Как создать контейнер Docker с Apache


Образ 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 .



При запуске сборки будет такой вывод в консоль:

docker Apache


Процесс завершится сообщениями об успешной сборке образа. Из образа можно будет создавать контейнеры:

docker контейнер с апачи


Убеждаемся в том, что в хост системе свободен порт 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:

apache в docker контейнере


Если к адресу добавить test.html откроется файл, который скопировали из хост системы на этапе сборки.



Добавив несколько директив можно получить контейнер с конфигурацией для выполнения PHP скриптов.


Когда Docker используется для размещения сайтов на PHP сборку обычно выполняют с помощью docker-compose.

С docker-compose контейнер Docker с Apache и PHP можно запустить так как описано в материале по ссылке.

Сказать спасибо