Создание собственного образа Docker с помощью Dockerfile

Создание собственного образа Docker с помощью Dockerfile

Dockerfile — скрипт, используемый для автоматизации процесса создания образов Docker. Этот текстовый документ содержит специальные инструкции (команды), которые помогают настраивать различные параметры, устанавливать зависимости, копировать файлы и так далее.

Мы подготовили целую серию статей, посвященных использованию Docker в дистрибутивах CentOS / RHEL Linux:

  1. Установка Docker и базовые операции над контейнерами в CentOS / RHEL Linux.
  2. Как управлять приложениями внутри контейнера Docker.
  3. Создание собственного образа Docker с помощью Dockerfile.

В этой статье мы расскажем, как создавать и настраивать образы с помощью Dockerfile.

Содержание:

  1. Синтаксис Dockerfile
  2. Написание Dockerfile для образа
  3. Создание нового образа на основе Dockerfile
  4. Запуск контейнера и доступ к веб-серверу Apache
  5. Мониторинг процессов приложения внутри контейнера Docker
  6. Создание системного файла настроек контейнера Docker
  7. Выводы

Синтаксис Dockerfile

Dockerfile содержит набор инструкций, которые можно разделить на две категории: обязательные и необязательные. К обязательным относятся:

  • FROM — указывает базовый образ, на основе которого будет создан новый;
  • WORKDIR — задает рабочий каталог внутри контейнера;
  • COPY — копирует код приложения и файлы в образ;
  • RUN — выполняет команды во время сборки образа;
  • EXPOSE — определяет, какой сетевой порт будет использовать приложение внутри контейнера;
  • CMD — определяет команду по умолчанию для выполнения при запуске контейнера.

Написание Dockerfile для образа

Допустим, нам нужно создать собственный образ Docker на базе Ubuntu с установленным веб-сервером Apache. Для этого создадим Dockerfile в каталоге /var/docker/ubuntu/apache:

 

create docker file

Затем откроем его с помощью текстового редактора nano и заполним следующими инструкциями:

 

fill docker file

Читайте также: Как поместить свое веб-приложение в Docker-контейнер. Работа с Dockerfile.

Давайте детальнее разберем этот код:

  1. FROM ubuntu — указывает, что новый образ будет создан на основе официального образа Ubuntu;
  2. RUN apt update — обновляет репозиторий пакетов в образе Ubuntu;
  3. RUN apt -y install apache2 — устанавливает в образ Apache;
  4. RUN echo "Hello Apache server on Ubuntu Docker" > /var/www/html/index.html — создает HTML-файл с указанным содержанием и размещает его в стандартном корневом каталоге Apache;
  5. EXPOSE 80 — указывает, что контейнер будет прослушивать порт 80;
  6. CMD /usr/sbin/apache2ctl -D FOREGROUND — определяет команду по умолчанию для выполнения при запуске контейнера (в данном случае запускается веб-сервер Apache на переднем плане, позволяя пользователю управлять его процессом).

Создание нового образа на основе Dockerfile

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

 

Где PATH — путь к каталогу, в котором находится Dockerfile.

 

Теперь создадим образ с названием ubuntu-apache (для этого применим параметр -t) с помощью написанного ранее Dockerfile:

 

create new ubuntu-apache image

На скриншоте выше видно, что Docker успешно выполнил все инструкции, указанные в Dockerfile, и создал новый образ с именем ubuntu-apache.

Чтобы убедиться в этом, просмотрим список всех образов Docker в ОС:

 

docker images

Запуск контейнера и доступ к веб-серверу Apache

Итак, чтобы запустить контейнер на базе образа ubuntu-apache, воспользуемся следующей командой:

 

Где -d — опция, которая запускает контейнер в фоновом режиме.

run container

Читайте также: Как контролировать производительность Apache с помощью mod_status в Ubuntu.

Проверим, что контейнер действительно работает, используя команду netstat:

 

netstat

На скриншоте видно, что Docker прослушивает порт 81.

У созданного контейнера Docker есть свой IP-адрес. Просмотреть его можно с помощью команды ip addr:

 

ip addr

У нашего контейнера IP-адрес172.17.0.1. Мы можем применять его или IP-адрес локального хоста, чтобы отобразить в терминале информацию с веб-страницы Apache:

 

curl

В обоих случаях утилита curl вывела в терминал сообщение "Hello Apache server on Ubuntu Docker".

Также мы можем использовать IP-адреса для отображения страницы Apache в браузере. Для этого следует написать в поисковой строке один из следующих запросов:

 

apache browser

Читайте также: Cockpit — мощный инструмент для мониторинга и администрирования виртуальных серверов Linux через веб-браузер.

Мониторинг процессов приложения внутри контейнера Docker

Команда docker top используется для отображения списка запущенных процессов внутри контейнера Docker. Она предоставляет следующую информацию о процессах:

  • имя пользователя, который запустил процесс;
  • идентификатор PID;
  • время работы и многое другое.

Для примера узнаем, какие процессы работают в нашем контейнере:

 

docker top

Команда docker stats в режиме реального времени предоставляет информацию об использовании контейнером следующих ресурсов:

  • процессора;
  • ОЗУ;
  • сети;
  • устройства блочного ввода-вывода.

Например:

 

docker stats

Создание системного файла настроек контейнера Docker

Возможности системы инициализации systemd позволяют создавать файлы настроек для контейнеров Docker, как для любой другой локальной службы. Для примера создадим файл настроек /etc/systemd/system/apache-docker.service для нашего контейнера:

 

И заполним его следующим кодом:

 

Где <container-name> — название контейнера.

apache docker service

Читайте также: Chkservice — простой способ управления модулями (юнитами, unit) Systemd в терминале.

Сохраним и закроем этот текстовый документ. Затем перезагрузим демон systemd:

 

Запустим службу на основе нашего контейнера Docker и отобразим ее статус в терминале:

 

systemctl docker apache

Выводы

Понимание синтаксиса инструкций Dockerfile позволяет с легкостью создавать и настраивать новые образы Docker. Чтобы более детально разобраться с Docker, рекомендуем прочесть остальные статьи из этой серии.

Спасибо за время, уделенное прочтению статьи!

Если возникли вопросы — задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Ciscoкурсы по кибербезопасностиполный курс по кибербезопасностикурсы DevNet / DevOps (программируемые системы) от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).

Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!

Спешите подать заявку! Группы стартуют 25 января, 26 февраля, 22 марта, 26 апреля, 24 мая, 21 июня, 26 июля, 23 августа, 20 сентября, 25 октября, 22 ноября, 20 декабря.
Что Вы получите?
  • Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
  • Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проведем вечерние онлайн-лекции на нашей платформе.
  • Согласуем с вами удобное время для практик.
  • Если хотите индивидуальный график — обсудим и реализуем.
  • Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
  • Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
А еще поможем Вам:
  • отредактировать или создать с нуля резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco, Linux LPI, кибербезопасность, DevOps / DevNet, Python, подайте заявку или получите бесплатную консультацию.

Больше похожих постов

1 комментарий. Оставить новый

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения


Поиск по сайту
Лучшее
Популярное
Рубрики
Меню