GrabDuck

Развертывание среды разработки с помощью Docker | Тоси-боси о компьютерах

:

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

Dockerfile

Чтоб в последствии легко разворачивать подобные контейнеры нужно создать Dockerfile для создания снимка системы которым мы будем пользоваться в будущем. Пример создание php окружение с нужными расширениями уже внутри этого контейнера:

Собрать образ описаный в Dockerfile нужно при помощи команды docker build. Также можно легко эспортировать контейнер в сжатый архив и перенести руками готовую стстему без необходимости выкачивания ее из сети и сборки модулей. Для этого помогут команды save и load Для хранения данных в разных проектах мы используем MySQL, memcached, redis и PGSQL, поднимем их в разных контейнерах. Бляго все они имеют официальные образы в Docker Hub и если нужно их расширить, то есть хорошая документация на страницах их образов. Для модификации конфигов и переобъявления к примеру пароля root пользователя для MySQL можно прописать это в Dockerfile ссылаясь на образ источник при помощи директивы FROM, так же как мы сделали для PHP. Имейте в виду что все что в нутри контейнера, при его падении/отключении пропадает безвозвратно, для того чтоб не терялись конфиги, и сами данные лучше пробрасывать файлы в хост через параметр для команды run -v, через Dockerfile это не получится сделать, или прописать через оркестрацию.

Оркестрация

Скачав и развернув все необходимые образы нам нужно объединить их при помощи параметра —link или сконфигурировать docker-compose.yml для удобного хранения конфига и последующего легкого модифицирования нашей связки. Чтоб постоянно не отправлять в контейнер файлы и сохранять данные из БД на хосте, конфиги для nginx, php, … тянуть с хоста. Если вы хотите обновлять ПО то лучше использовать Docker data container, а для разработки пробрасывать в хост то, что нужно. Для примера свяжем Nginx+PHP-FPM+MySQL+Memcached.

Теперь обратившись к хосту который мы прописали в конфиге nginx по 80 порту мы получим наши файлы из проекта. (естественно нужно настроить nginx для опроса нужной папки).