Квест → Как хакнуть форму
Прошли: 77
Среди многих проблем, при современной разработке программного обеспечения, существует проблема гарантированно одинакового исполнения ПО во всех окружениях.
И для решения оной, Docker приходит на помощь! Он предоставляет единый способ построения и запуска контейнеров для любых необходимых сервисов. Платформа гарантирует, что ваше приложение отработает одинаково вне зависимости от конечного окружения.
Чтобы продемонстрировать процесс Docker-изации PHP-приложения, я буду рассматривать блог, изначально разработанный на фреймворке Laravel 5.4.
Для начала, убедитесь, что на вашей машине установлен Docker. Я буду работать с docker-compose, который упрощает развертывание мульти-контейнерного приложения с помощью простого описания в одином файле и запуска простой команды.
В корневом каталоге проекта создайте файл с названием 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 5.6). Вы можете легко настроить нужный базовый образ в зависимости от потребностей вашего приложения. Далее я скопировал несколько файлов в контейнер.
В этом 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
.
Вы можете посмотреть ваши активные контейнеры с помощью такой команды:
docker ps
Пример вывода:
Вы также можете получить доступ к контейнеру через
docker exec -it bash
Теперь мы знаем как просто Docker-изировать PHP-приложения. Благодаря своему легкому весу, он может быть легко разрушен и вновь создан всего за пару мгновений.