2015-04-24 1 views
8

Так что я недавно обнаружил докер и бродяга, и я начинаю новый проект Php, в котором я хочу использовать как:проекта с бродячим, грузчиком и мерзавцем

Vagrant для того, чтобы иметь сменную среду, что все разработчики могут использовать.

Докер для производства, но также и внутри бродячего машинного оборудования, поэтому среда разработки похожа на производственную, насколько это возможно.

Первый подход, чтобы все файлы определений вместе с исходным кодом в том же хранилище с использованием этого макета:

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

Так бродяга машина, на обеспечение, работает все Докер «машины» и наборы баз данных и исходного кода.

Это хороший подход? Я все еще пытаюсь понять, как это будет работать с точки зрения развертывания производства.

ответ

7

Это хороший подход?

Да, по крайней мере, это работает для меня с нескольких месяцев.

Разница в том, что у меня также есть файл docker-compose.yml.

В моей Vagrantfile есть первый раздел инициализации, который устанавливает докер, пип и докер-Compose:

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 

и, наконец, раздел инициализации, который запускает докер-Compose:

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

Есть other ways, чтобы создавать и запускать докерные контейнеры от бродяг, но использование докеры-компоновки позволяет мне вытеснять любой докер Специфика из моего Vagrantfile. В результате этот Vagrantfile может быть повторно использован для других проектов без изменений; вам просто нужно предоставить другой файл docker-compose.yml.

Другой вопрос, который я делаю по-другому, заключается в том, чтобы положить Vagrantfile в корень вашего проекта (а не в каталог vagrant), поскольку это место, где люди и инструменты (некоторые IDE) ожидают его найти. PyCharm делает, вероятно, PhpStorm.

Я также поместил свой файл docker-compose.yml в корень моих проектов.

В конце концов, для разработки я просто перехожу в свою директорию проектов и запускаю бродягу, которая сообщает, что докеры-компоновщики (в конечном итоге строят) запускают контейнеры докеров.


Я все еще пытаюсь выяснить, как это будет работать в плане развертывания производства.

Для развертывания производства, обычной практикой является предоставление своим Docker изображения в команде ОПС, публикуя их на частныхdocker registry.Вы можете разместить такой реестр в своей собственной инфраструктуре или использовать онлайн-службы, которые предоставляют их, например Docker Hub.

Также предоставьте команде ops файл docker-compose.yml, который определит, как запустить контейнеры и связать их. Обратите внимание, что этот файл не должен использовать инструкцию build:, но вместо этого следует использовать команду image:. Кто хочет создавать/компилировать материал при развертывании на производство?

Этот Docker blog article может помочь выяснить, как использовать докер-компоновку и док-рой для развертывания на кластере.

+0

Отличный ответ, большое спасибо. Просто небольшой вопрос: в Vagrant вы используете ящик или поставщик докеров? – antonienko

+2

Я использую поле 'phusion/ubuntu-14.04-amd64'. Я попробовал поставщика бродячего докера, но не был доволен результатом. Это было несколько месяцев назад, поэтому, возможно, теперь это работает лучше, но использование ящика + обеспечение докеров ставит вас под контроль. My Vagrantfile доступен по адресу https://github.com/thomasleveil/vagrant-phusion-docker/blob/master/Vagrantfile. – Thomasleveil

1

Я также рекомендую использовать докер для разработки, чтобы получить полную репликацию зависимостей. Docker Compose является ключевым инструментом.

Вы можете использовать стратегию, как это:

Докер-compose.yml

db: 
    image: my_database_image 
    ports: ... 

machinex: 
    image: my_machine_x_image 

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

В вашем Dockerfile вы можете указать зависимости для запуска PHP-код.

Кроме того, я рекомендую хранить my_database_image и my_machine_x_image проектами, разделенными их Dockerfiles, потому что отлично может быть использован с другими проектами.

Если вы используете Mac, вы уже используете виртуальную машину под названием boot2docker

Я надеюсь, что это помогает.

Смежные вопросы