Dockerfile — скрипт, используемый для автоматизации процесса создания образов Docker. Этот текстовый документ содержит специальные инструкции (команды), которые помогают настраивать различные параметры, устанавливать зависимости, копировать файлы и так далее.
Мы подготовили целую серию статей, посвященных использованию Docker в дистрибутивах CentOS / RHEL Linux:
- Установка Docker и базовые операции над контейнерами в CentOS / RHEL Linux.
- Как управлять приложениями внутри контейнера Docker.
- Создание собственного образа Docker с помощью Dockerfile.
В этой статье мы расскажем, как создавать и настраивать образы с помощью Dockerfile.
Содержание:
- Синтаксис Dockerfile
- Написание Dockerfile для образа
- Создание нового образа на основе Dockerfile
- Запуск контейнера и доступ к веб-серверу Apache
- Мониторинг процессов приложения внутри контейнера Docker
- Создание системного файла настроек контейнера Docker
- Выводы
Синтаксис Dockerfile
Dockerfile содержит набор инструкций, которые можно разделить на две категории: обязательные и необязательные. К обязательным относятся:
FROM
— указывает базовый образ, на основе которого будет создан новый;WORKDIR
— задает рабочий каталог внутри контейнера;COPY
— копирует код приложения и файлы в образ;RUN
— выполняет команды во время сборки образа;EXPOSE
— определяет, какой сетевой порт будет использовать приложение внутри контейнера;CMD
— определяет команду по умолчанию для выполнения при запуске контейнера.
Написание Dockerfile для образа
Допустим, нам нужно создать собственный образ Docker на базе Ubuntu с установленным веб-сервером Apache. Для этого создадим Dockerfile в каталоге /var/docker/ubuntu/apache
:
Затем откроем его с помощью текстового редактора nano и заполним следующими инструкциями:
Читайте также: Как поместить свое веб-приложение в Docker-контейнер. Работа с Dockerfile.
Давайте детальнее разберем этот код:
FROM ubuntu
— указывает, что новый образ будет создан на основе официального образа Ubuntu;RUN apt update
— обновляет репозиторий пакетов в образе Ubuntu;RUN apt -y install apache2
— устанавливает в образ Apache;RUN echo "Hello Apache server on Ubuntu Docker" > /var/www/html/index.html
— создает HTML-файл с указанным содержанием и размещает его в стандартном корневом каталоге Apache;EXPOSE 80
— указывает, что контейнер будет прослушивать порт 80;CMD /usr/sbin/apache2ctl -D FOREGROUND
— определяет команду по умолчанию для выполнения при запуске контейнера (в данном случае запускается веб-сервер Apache на переднем плане, позволяя пользователю управлять его процессом).
Создание нового образа на основе Dockerfile
Чтобы создать новый образ на базе Dockerfile, используется команда docker build
. Ее синтаксис имеет следующий вид:
Где PATH
— путь к каталогу, в котором находится Dockerfile.
Теперь создадим образ с названием ubuntu-apache
(для этого применим параметр -t
) с помощью написанного ранее Dockerfile:
На скриншоте выше видно, что Docker успешно выполнил все инструкции, указанные в Dockerfile, и создал новый образ с именем ubuntu-apache
.
Чтобы убедиться в этом, просмотрим список всех образов Docker в ОС:
Запуск контейнера и доступ к веб-серверу Apache
Итак, чтобы запустить контейнер на базе образа ubuntu-apache
, воспользуемся следующей командой:
Где -d
— опция, которая запускает контейнер в фоновом режиме.
Читайте также: Как контролировать производительность Apache с помощью mod_status в Ubuntu.
Проверим, что контейнер действительно работает, используя команду netstat
:
На скриншоте видно, что Docker прослушивает порт 81.
У созданного контейнера Docker есть свой IP-адрес. Просмотреть его можно с помощью команды ip addr
:
У нашего контейнера IP-адрес — 172.17.0.1
. Мы можем применять его или IP-адрес локального хоста, чтобы отобразить в терминале информацию с веб-страницы Apache:
В обоих случаях утилита curl
вывела в терминал сообщение "Hello Apache server on Ubuntu Docker"
.
Также мы можем использовать IP-адреса для отображения страницы Apache в браузере. Для этого следует написать в поисковой строке один из следующих запросов:
Читайте также: Cockpit — мощный инструмент для мониторинга и администрирования виртуальных серверов Linux через веб-браузер.
Мониторинг процессов приложения внутри контейнера Docker
Команда docker top
используется для отображения списка запущенных процессов внутри контейнера Docker. Она предоставляет следующую информацию о процессах:
- имя пользователя, который запустил процесс;
- идентификатор PID;
- время работы и многое другое.
Для примера узнаем, какие процессы работают в нашем контейнере:
Команда docker stats
в режиме реального времени предоставляет информацию об использовании контейнером следующих ресурсов:
- процессора;
- ОЗУ;
- сети;
- устройства блочного ввода-вывода.
Например:
Создание системного файла настроек контейнера Docker
Возможности системы инициализации systemd
позволяют создавать файлы настроек для контейнеров Docker, как для любой другой локальной службы. Для примера создадим файл настроек /etc/systemd/system/apache-docker.service
для нашего контейнера:
И заполним его следующим кодом:
Где <container-name>
— название контейнера.
Читайте также: Chkservice — простой способ управления модулями (юнитами, unit) Systemd в терминале.
Сохраним и закроем этот текстовый документ. Затем перезагрузим демон systemd
:
Запустим службу на основе нашего контейнера Docker и отобразим ее статус в терминале:
Выводы
Понимание синтаксиса инструкций Dockerfile позволяет с легкостью создавать и настраивать новые образы Docker. Чтобы более детально разобраться с Docker, рекомендуем прочесть остальные статьи из этой серии.
Спасибо за время, уделенное прочтению статьи!
Если возникли вопросы — задавайте их в комментариях.
Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!
Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco, курсы по кибербезопасности, полный курс по кибербезопасности, курсы DevNet / DevOps (программируемые системы) от Академии Cisco, курсы Linux от Linux Professional Institute на платформе SEDICOMM University (Университет СЭДИКОММ).
Курсы Cisco, Linux, кибербезопасность, DevOps / DevNet, Python с трудоустройством!
- Поможем стать экспертом по сетевой инженерии, кибербезопасности, программируемым сетям и системам и получить международные сертификаты Cisco, Linux LPI, Python Institute.
- Предлагаем проверенную программу с лучшими учебниками от экспертов из Cisco Networking Academy, Linux Professional Institute и Python Institute, помощь сертифицированных инструкторов и личного куратора.
- Поможем с трудоустройством и стартом карьеры в сфере IT — 100% наших выпускников трудоустраиваются.
- Проведем вечерние онлайн-лекции на нашей платформе.
- Согласуем с вами удобное время для практик.
- Если хотите индивидуальный график — обсудим и реализуем.
- Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
- Всем, кто боится потерять мотивацию и не закончить обучение, предложим общение с профессиональным коучем.
- отредактировать или создать с нуля резюме;
- подготовиться к техническим интервью;
- подготовиться к конкурсу на понравившуюся вакансию;
- устроиться на работу в Cisco по специальной программе. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
1 комментарий. Оставить новый
Можно ли работать с контейнером как со службой в Ubuntu?