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?