Поиск по сайту:

Как автоматически создавать и настраивать пользовательские образы Docker с помощью Dockerfile — часть 3


В этом руководстве основное внимание уделяется созданию собственного образа Docker на основе Ubuntu с установленной службой Apache. Весь процесс будет автоматизирован с помощью Dockerfile.

Образы Docker можно автоматически создавать из текстовых файлов с именем Dockerfiles. Файл Docker содержит пошаговые инструкции или команды, используемые для создания и настройки образа Docker.

Требования

  • Установите Docker и изучите манипуляции с контейнерами Docker — часть 1
  • Развертывание и запуск приложений в контейнерах Docker. Часть 2.

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

  1. FROM=обязателен в качестве первой инструкции в файле Docker. Указывает Docker извлечь базовый образ, из которого вы создаете новый образ. Используйте тег, чтобы указать точное изображение, из которого вы создаете:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=Автор образа сборки
  2. RUN=Эту инструкцию можно использовать в нескольких строках и запускать любые команды после создания образа Docker.
  3. CMD=запускать любую команду при запуске образа Docker. Используйте только одну инструкцию CMD в Dockerfile.
  4. ENTRYPOINT=То же, что и CMD, но используется как основная команда для изображения.
  5. EXPOSE=Указывает контейнеру прослушивать сетевые порты во время работы. По умолчанию порты контейнера недоступны с хоста.
  6. ENV=Установить переменные среды контейнера.
  7. ADD=Копировать ресурсы (файлы, каталоги или файлы из URL-адресов).

Шаг 1. Создание или запись репозитория Dockerfile

1. Во-первых, давайте создадим своего рода репозитории Dockerfile, чтобы в будущем повторно использовать файлы для создания других образов. Создайте пустой каталог где-нибудь в разделе /var, где мы создадим файл с инструкциями, которые будут использоваться для создания нового образа Docker.

mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile

2. Далее начните редактирование файла, следуя следующим инструкциям:

vi /var/docker/ubuntu/apache/Dockerfile

Отрывок из докерфайла:

FROM ubuntu
MAINTAINER  your_name  <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND

Теперь давайте пройдемся по инструкциям файла:

Первая строка сообщает нам, что мы создаем образ Ubuntu. Если тег не отправлен, скажем, 14:10, используется последнее изображение из Docker Hub.

Во второй строке мы добавили имя и адрес электронной почты создателя изображения. Следующие две строки RUN будут выполнены в контейнере при создании образа и установят демон Apache и echo некоторый текст на веб-страницу Apache по умолчанию. .

Строка EXPOSE будет указывать контейнеру Docker прослушивать порт 80, но этот порт будет недоступен извне. Последняя строка указывает контейнеру запустить службу Apache на переднем плане после запуска контейнера.

3. Последнее, что нам нужно сделать, это начать создавать образ, введя приведенную ниже команду, которая локально создаст новый образ Docker с именем ubuntu-apache на основе Dockerfile, созданный ранее, как показано в этом примере:

docker build -t ubuntu-apache /var/docker/ubuntu/apache/

4. После создания образа с помощью Docker вы можете перечислить все доступные изображения и идентифицировать свое изображение, выполнив следующую команду:

docker images

Шаг 2. Запустите контейнер и получите доступ к Apache из локальной сети.

5. Чтобы непрерывно запускать контейнер (в фоновом режиме) и получать доступ к службам (портам), предоставляемым контейнером, с хоста или другого удаленного компьютера в вашей локальной сети, выполните приведенную ниже команду в командной строке хост-терминала. :

docker run -d -p 81:80 ubuntu-apache

Здесь опция -d запускает контейнер ubuntu-apache в фоновом режиме (как демон), а опция -p отображает порт контейнера 80 на порт вашего локального хоста 81. Доступ к службе Apache извне локальной сети возможен только через порт 81.

Команда Netstat даст вам представление о том, какие порты прослушивает хост.

После запуска контейнера вы также можете запустить команду docker ps, чтобы просмотреть состояние работающего контейнера.

6. Веб-страницу можно отобразить на вашем хосте из командной строки с помощью утилиты curl по IP-адресу вашего компьютера, локальному хосту или сетевому интерфейсу Docker на порту 81. Используйте IP-команду. строка для отображения IP-адресов сетевых интерфейсов.

ip addr               [List nework interfaces]
curl ip-address:81    [System Docker IP Address]
curl localhost:81     [Localhost]

7. Чтобы посетить веб-страницу контейнера из вашей сети, откройте браузер в удаленном месте и используйте протокол HTTP, IP-адрес компьютера, на котором работает контейнер, а затем порт 81, как показано на изображение ниже.

http://ip-address:81

8. Чтобы узнать, какие процессы выполняются внутри контейнера, введите следующую команду:

docker ps
docker top <name or ID of the container>

9. Чтобы остановить выпуск контейнера, введите команду docker stop, за которой следует идентификатор или имя контейнера.

docker stop <name or ID of the container>
docker ps

10. Если вы хотите присвоить контейнеру описательное имя, используйте параметр --name, как показано в примере ниже:

docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps

Теперь вы можете ссылаться на контейнер для манипуляций (начало, остановка, начало, статистика и т. д.), только используя назначенное имя.

docker stats my-www

Шаг 3. Создайте общесистемный файл конфигурации для контейнера Docker.

11. В CentOS/RHEL вы можете создать файл конфигурации systemd и управлять контейнером, как вы обычно это делаете для любой другой локальной службы.

Например, создайте новый файл systemd с именем, скажем, apache-docker.service, используя следующую команду:

vi /etc/systemd/system/apache-docker.service

Отрывок из файла apache-docker.service:

[Unit]
Description=apache container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www

[Install]
WantedBy=local.target

12. После завершения редактирования файла закройте его, перезагрузите демон systemd, чтобы отразить изменения, и запустите контейнер, выполнив следующие команды:

systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service

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

Дополнительная литература: