Образ Docker Apache является одним из самых простым для рассмотрения и подходит для демонстрации возможностей Docker и запуска веб-приложений на PHP.
Образ Docker с Apache для отдачи статики и выполнения скриптов
Рассмотрим как запустить Apache в Docker.
Можно использовать готовый образ httpd или создать свою сборку взяв за основу образ операционной системы и добавив в него необходимые пакеты и файлы.
В обоих случаях на сервере должна быть установлена система контейнеризации Docker.
Рассмотрим второй вариант. При нём сборка займет больше места на диске, но будет досутпна большая гибкость конфигурации, так как контейнер представляет собой операционную систему.
За основу берем образ с Ubuntu с dockerhub. В него добавляем пакеты nmap и apache2. Пакета apache2 достаточно для отдачи статического контента. Это минимальная задача для веб-сервера.
Какая система на хост машине не имеет значения.
Создадим в текущем каталоге Dockerfile
mcedit Dockerfile
FROM ubuntu:latest
RUN apt-get -y update
RUN apt-get -y install nmap apache2
COPY ./test.html /var/www/html
EXPOSE 80
CMD apache2ctl -D FOREGROUND
Директивы, которые требуется добавить в файл приведены выше.
Docker скачает Ubuntu установит в операционную систему веб-сервера. Затем из текущего каталога на хост системе в /var/www/html в контейнере скопируется файл test.html.
В фоне на 80 порту запустится веб-сервер через apache2ctl
Чтобы собрать образ из Dockerfile нужно выполнить build
docker build -t cutom_image .
При запуске сборки будет такой вывод в консоль:
Процесс завершится сообщениями об успешной сборке образа. Из образа можно будет создавать контейнеры:
Убеждаемся в том, что в хост системе свободен порт 80 .
Проверить можно с помощью netstat
netstat -nltp | grep 80
Вывод должен быть пуст, если на порту 80 запущен веб-сервер — нужно его остановить. Или использовать другой порт.
Запускаем контейнер
docker run -dit -p 80:80 cutom_image
80 порт внутри контейнера пробрасывается на 80 порт хост системы.
Проверяем результат
Контейнер должен быть в запущенном состоянии и слушать порт 80.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
445e8666fce9 cutom_image «/bin/sh -c 'apache2…» 7 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp happy_franklin
Обратившись к порту 80 можно увидеть заглушку Apache:
Если к адресу добавить test.html откроется файл, который скопировали из хост системы на этапе сборки.
Добавив несколько директив можно получить контейнер с конфигурацией для выполнения PHP скриптов.
Когда Docker используется для размещения сайтов на PHP сборку обычно выполняют с помощью docker-compose.
С docker-compose контейнер Docker с Apache и PHP можно запустить так как описано в материале по ссылке.