2015-04-24 9 views
8

Więc ja niedawno odkryto docker i włóczęgę, a ja zaczynam nowy projekt PHP, w którym chcę użyć zarówno:Projekt z Vagrant, docker i git

Vagrant aby mieć wymienne środowisko, które wszystko programiści mogą korzystać.

Docker do produkcji, ale również do maszyny włóczęga, więc środowisko programistyczne jest jak najbardziej zbliżone do środowiska produkcyjnego.

Pierwsze podejście jest mieć wszystkie pliki definicji wraz z kodem źródłowym w tym samym repozytorium z tego układu:

/docker 
    /machine1-web_server 
     /Dockerfile 
    /machine2-db_server 
     /Dockerfile 
    /machineX 
     /Dockerfile 
/src 
    /app 
    /public 
    /vendors 
/vagrant 
    /Vagrantfile 

Więc włóczęga maszyna, na przepisie, uruchamia wszystkie „maszyny” Döcker i zestawy bazy danych i kod źródłowy.

Czy to dobre podejście? Nadal staram się dowiedzieć, jak to będzie działać pod względem wdrożenia do produkcji.

Odpowiedz

7

Czy to dobre podejście?

Tak, przynajmniej działa to dla mnie od kilku miesięcy.

Różnica polega na tym, że mam również plik docker-compose.yml.

W moim Vagrantfile jest Sekcja 1 provisioning, który instaluje doker, pip i doker-komponować:

config.vm.provision "shell", inline: <<-SCRIPT 
    if ! type docker >/dev/null; then 
     echo -e "\n\n========= installing docker..." 
     curl -sL https://get.docker.io/ | sh 
     echo -e "\n\n========= installing docker bash completion..." 
     curl -sL https://raw.githubusercontent.com/dotcloud/docker/master/contrib/completion/bash/docker > /etc/bash_completion.d/docker 
     adduser vagrant docker 
    fi 
    if ! type pip >/dev/null; then 
     echo -e "\n\n========= installing pip..." 
     curl -sk https://bootstrap.pypa.io/get-pip.py | python 
    fi 
    if ! type docker-compose >/dev/null; then 
     echo -e "\n\n========= installing docker-compose..." 
     pip install -U docker-compose 
     echo -e "\n\n========= installing docker-compose command completion..." 
     curl -sL https://raw.githubusercontent.com/docker/compose/$(docker-compose --version | awk 'NR==1{print $NF}')/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose 
    fi 
SCRIPT 

i wreszcie sekcja rezerw, które wystrzeliwuje Döcker-Compose:

config.vm.provision "shell", inline: <<-SCRIPT 
    cd /vagrant 
    docker-compose up -d 
SCRIPT 

Istnieje other ways do budowania i uruchamiania kontenerów dokerów od vagrant, ale użycie funkcji dokowania pozwala mi na uzewnętrznienie dowolnego okna dokowanego specyfiki z mojej Vagrantfile. W rezultacie ta Vagrantfile może być ponownie wykorzystana do innych projektów bez zmian; wystarczy podać inny plik docker-compose.yml.

Inną rzeczą, którą robię inaczej jest umieszczenie Vagrantfile w katalogu głównym projektu (a nie w katalogu vagrant), ponieważ jest to miejsce, w którym ludzie i narzędzia (niektórzy IDE) oczekują, że go znajdą. PyCharm ma, prawdopodobnie PhpStorm.

Umieściłem również mój plik docker-compose.yml w katalogu głównym moich projektów.

W końcu, dla rozwoju, idę do mojego katalogu projektu i odpalam włóczęgę, który mówi doker-compose do (w końcu budować) uruchamiać kontenery doków.


Ja wciąż próbuje dowiedzieć się, jak to będzie działać w zakresie wdrożenia do produkcji.

do wdrażania do produkcji, powszechną praktyką jest dostarczanie obrazów Döcker do zespołu ops, publikując je na prywatnejdocker registry.Możesz umieścić taki rejestr w swojej własnej infrastrukturze lub korzystać z usług online, które je zapewnia, takich jak Docker Hub.

Udostępniamy również zespół operacyjny w postaci pliku docker-compose.yml, który definiuje sposób uruchamiania kontenerów i łączenia ich. Zauważ, że ten plik nie powinien używać instrukcji build:, ale zamiast tego polegaj na instrukcji image:. Kto chce budować/kompilować rzeczy podczas wdrażania do produkcji?

Ten numer Docker blog article może pomóc w określeniu sposobu korzystania z funkcji dokowania i roota w doku do wdrożenia w klastrze.

+0

Świetna odpowiedź, dziękuję bardzo. Tylko małe dodatkowe pytanie: czy w Vagrant używasz skrzynki lub dostawcy doków? – antonienko

+2

Używam pola 'phusion/ubuntu-14.04-amd64'. Próbowałem usługodawcy dokerów, ale nie byłem zadowolony z wyniku. To było kilka miesięcy temu, więc być może teraz działa lepiej, ale korzystanie z okna dokowanego + pudełko zapewnia kontrolę. Mój Vagrantfile jest dostępny na https://github.com/thomasleveil/vagrant-phusion-docker/blob/master/Vagrantfile – Thomasleveil

1

Polecam używać docker również do programowania, aby uzyskać pełną replikację zależności. Najważniejszym narzędziem jest Docker Compose.

można wykorzystywać strategię takiego:

Döcker-compose.yml

db: 
    image: my_database_image 
    ports: ... 

machinex: 
    image: my_machine_x_image 

web: 
    build: . 
    volumes: 
    - '/path/to/my/php/code:/var/www' 

W swojej Dockerfile można określić zależności uruchomić swój kod PHP.

Polecam również, aby zachować my_database_image i my_machine_x_image projektów oddzielone ich Dockerfiles, ponieważ doskonale mogą być używane z innymi projektami.

Jeśli używasz komputera Mac, już używasz VM nazywa boot2docker

Mam nadzieję, że to pomaga.

Powiązane problemy