PHP Profi

Контейнеризация PHP-Приложения с помощью Docker Перевод

Среди многих проблем, при современной разработке программного обеспечения, существует проблема гарантированно одинакового исполнения ПО во всех окружениях.

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

Чтобы продемонстрировать процесс Docker-изации PHP-приложения, я буду рассматривать блог, изначально разработанный на фреймворке Laravel 5.4.

Для начала, убедитесь, что на вашей машине установлен Docker. Я буду работать с docker-compose, который упрощает развертывание мульти-контейнерного приложения с помощью простого описания в одином файле и запуска простой команды.

В корневом каталоге проекта создайте файл с названием docker-compose.yml. Код в файле будет выглядеть так:

Объяснения к Docker-compose.yml

В этом коде определены два сервиса с именами php и db, которые подключаются один к другому для запуска конечного приложения.

build— директива определяет местоположение файла Dockerfile, описываемого сервиса.

volumes — монтирует текущую директорию проекта как директорию /var/www/html внутри контейнера; а также директорию с логами в соответствующую директорию внутри.

ports— директива в контейнере php пробрасывает порт 8000 вашей машины на 80й порт контейнера. Это позволит достучаться до приложения.

environment — позволяет указать переменные окружения.

depends_on — указывает Docker-у какой контейнер нужно собрать до того, как приступить к сборке этого. Например, в нашем случае, контейнер db должен быть собран первым, так как php контейнер зависит от него.

Теперь, когда файл для docker-compose был создан, я создам соответствующие Dockerfile-ы, которые содержат все инструкции по созданию образов контейнеров.

Перейдём в директорию docker и создадим там две папкиphp и db для соответствующих контейнеров.

Два dockerfile-а будут выглядеть так:

php Dockerfile

Файл начинается с определения базового образа (в данном случае, базовый образ PHP 5.6). Вы можете легко настроить нужный базовый образ в зависимости от потребностей вашего приложения. Далее я скопировал несколько файлов в контейнер.

db Dockerfile

В этом dockerfile-е я использую MySQL 5.6 качестве базового образа. При запуске контейнера создаётся новая база данных с указанным именем. Я также включил файл с SQL-дампом данных, который будет выполняться, как только сервер создастся (так как он расположен в /docker-entrypoint-initdb.d).

Теперь, когда все файлы были созданы, перейдём в корневой каталог приложения и выполним следующую команду:

docker-compose up -d

Эта команда запустит контейнеры в фоновом режиме. Запуск может быть медленным в первый раз, потому что все образы должны будут скачены. Однако, все последующие запуски происходят намного быстрее.

Обратите внимание, что я также скопировал файл hosts в контейнере, со следующим текстом:

127.0.0.1 blogsite.dev

Теперь вы можете получить доступ к приложению, перейдя по url-у http://localhost:8000. Так как я скопировал файл hosts в контейнер, то также можно получить доступ к приложению, посетив url-адрес http://blogsite.dev.

dockerized php blog

Дополнительно

Список активных контейнеров:

Вы можете посмотреть ваши активные контейнеры с помощью такой команды:

docker ps

Пример вывода:

 

Bash Shell внутри контейнера:

Вы также можете получить доступ к контейнеру через

docker exec -it bash

 

Итог

Теперь мы знаем как просто Docker-изировать PHP-приложения. Благодаря своему легкому весу, он может быть легко разрушен и вновь создан всего за пару мгновений.

2017-08-18 оригинал

Последние посты

Комментарии

авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий