img

Как работать с Dockerfile?

В продолжение статьи про Docker, сегодня мы расскажем про Dockerfile — скрипт, который позволяет автоматизировать процесс построения контейнеров — шаг за шагом, используя при этом base образ.


Докерфайлы и синтаксис для их создания

Как уже было сказано выше, каждый Докерфайл — по сути скрипт, который автоматически выполняет определенные действия или команды в base образе, для формирования нового образа.

Все подобные файлы начинаются с обозначения FROM — также как и процесс построения нового контейнера, далее следуют различные методы, команды, аргументы или условия, после применения которых получится Docker контейнер.

Для начала, быстренько пройдемся по синтаксису — он, кстати говоря, крайне простой, с командами, говорящими самими за себя.

В Докер файлах содержится два типа основных блоков — комментарии и команды с аргументами. Причем для всех команд подразумевается определенный порядок — подробнее об этом ниже.

Ниже типичный пример синтаксиса, где первая строка является комментарием, а вторая — командой.

# Print «Hello from Merionet!»
RUN echo «Hello from Merionet!!»

Перед тем, как переходить к собственно написанию собственно Докерфайла, сначала разберем все возможные команды.

Все команды в Докерфайлах принято указывать заглавными буквами — к примеру RUN, CMD и т.д.
  • Команда ADD — данная команда берет два аргумента, путь откуда скопировать файл и путь куда скопировать файлы в собственную файловую систему контейнера. Если же source путем является URL (т.е адрес веб-страницы) — то вся страница будет скачена и помещена в контейнер.
    # Синтаксис команды: ADD [исходный путь или URL] [путь назначения]
    ADD /my_merionet_app /my_merionet_app
    
  • Команда CMD — довольно таки похожая на команду RUN, используется для выполнения определенных программ, но, в отличие от RUN данная команда обычно применяется для запуска/инициации приложений или команд уже после их установки с помощью RUN в момент построения контейнера.
    # Синтаксис команды: CMD %приложение%  «аргумент», «аргумент», ..
    CMD «echo» «Hello from Merionet!».
    
  • Команда ENTRYPOINT устанавливает конкретное приложение по умолчанию, которое используется каждый раз в момент построения контейнера с помощью образа. К примеру, если вы установили определенное приложение внутри образа и вы собираетесь использовать данный образ только для этого приложения, вы можете указать это с помощью ENTRYPOINT, и каждый раз, после создания контейнера из образа, ваше приложение будет воспринимать команду CMD, к примеру. То есть не будет нужды указывать конкретное приложение, необходимо будет только указать аргументы.
    #Синтаксис команды: ENTRYPOINT %приложение% «аргумент» 
    # Учтите, что аргументы опциональны — они могут быть предоставлены командой CMD или #во время создания контейнера.
    ENTRYPOINT echo
    
    #Синтаксис команды совместно с CMD:
    CMD «Hello from Merionet!»
    ENTRYPOINT echo
    
  • Команда ENV используется для установки переменных среды (одной или многих). Данные переменные выглядят следующим образом «ключ = значение» и они доступны внутри контейнера скриптам и различным приложениям. Данный функционал Докера, по сути, очень сильно увеличивает гибкость в плане различных сценариев запуска приложений.
    # Синтаксис команды:  ENV %ключ% %значение%
    ENV BASH /bin/bash
    
    Команда EXPOSE используется для привязки определенного порта для реализации сетевой связности между процессом внутри контейнера и внешним миром — хостом.
    # Синтаксис команды:  EXPOSE %номер_порта%
    EXPOSE 8080
    
  • Команда FROM — данную команду можно назвать одной из самых необходимых при создании Докерфайла. Она определяет базовый образ для начала процесса построения контейнера. Это может быть любой образ, в том числе и созданные вами до этого. Если указанный вами образ не найден на хосте, Докер попытается найти и скачать его. Данная команда в Докерфайле всегда должна быть указана первой. # Синтаксис команды: FROM %название_образа% FROM centos
  • Команда MAINTAINER — данная команда не является исполняемой, и просто определяет значение поля автора образа. Лучше всего ее указывать сразу после команды FROM.
    # Синтаксис команды:  MAINTAINER %ваше_имя%
    MAINTAINER MerionetNetworks
    
  • Команда RUN - является основной командой для исполнения команд при написании Докерфайла. Она берет команду как аргумент и запускает ее из образа. В отличие от CMD данная команда используется для построения образа (можно запустить несколько RUN подряд, в отличие от CMD).
    # Синтаксис команды:  RUN %имя_команды%
    RUN yum install -y wget
    
  • Команда USER — используется для установки UID или имени пользователя, которое будет использоваться в контейнере.
    # Синтаксис команды:  USER %ID_пользователя%
    USER 751
    
  • Команда VOLUME — данная команда используется для организации доступа вашего контейнера к директории на хосте (тоже самое, что и монтирование директории)
    # Синтаксис команды:  VOLUME [«/dir_1», «/dir2» ...]
    VOLUME [«/home»]
    
  • Команда WORKDIR указывает директорию, из которой будет выполняться команда CMD.
    # Синтаксис команды:  WORKDIR /путь
    WORKDIR ~/
    

Создание своего собственного образа для установки MongoDB

Для начала создадим пустой файл и откроем его с помощью vim:

vim Dockerfile

Затем мы можем указать комментариями для чего данный Докерфайл будет использоваться и все такое — это не обязательно, но может быть полезно в дальнейшем. На всякий случай напомню — все комментарии начинаются с символа #.

########
# Dockerfile to build MongoDB container images
# Based on Ubuntu
########

Далее, укажем базовый образ:

FROM ubuntu

Затем, укажем автора:

MAINTAINER Merionet_Translation

После чего обновим репозитории(данный шаг совершенно необязателен, учитывая, что мы не будем их использовать ) :

RUN apt-get update

После укажем команды и аргументы для скачивания MongoDB (установку проводим в соответствии с гайдом на официальном сайте):

RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list

RUN apt-get update

RUN apt-get install -y mongodb-10gen

RUN mkdir -p /data/db

После чего укажем дефолтный порт для MongoDB:

EXPOSE 27017

CMD [«--port 27017»]

ENTRYPOINT usr/bin/mongod

Вот как должен выглядеть у вас финальный файл — проверьте и, затем, можно сохранить изменения и закрыть файл:

Как работать с Dockerfile?
#########
# Dockerfile to build MongoDB container images
# Based on Ubuntu
#########

FROM ubuntu

MAINTAINER Merionet_Translation

RUN apt-get update

RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

RUN echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee /etc/apt/sources.list.d/mongodb.list

RUN apt-get update

RUN apt-get install -y mongodb-10gen

RUN mkdir -p /data/db


EXPOSE 27017

CMD ["--port 27017"]

ENTRYPOINT usr/bin/mongod

Запуск контейнера Docker

Итак, мы готовы создать наш первый MongoDB образ с помощью Docker!

sudo docker build -t merionet_mongodb .
-t и имя здесь используется для присваивания тэга образу. Для вывода всех возможных ключей введите
sudo docker build —help
, а точка в конце означает что Докерфайл находится в той же категории, из которой выполняется команда.

Далее запускаем наш новый MongoDB в контейнере!

sudo docker run -name MerionetMongoDB -t -i merionet_mongodb
Ключ -name используется для присвоения простого имени контейнеру, в противном случае это будет довольно длинная цифро-буквенная комбинация. После запуска контейнера для того, чтобы вернуться в систему хоста нажмите CTRL+P, а затем CTRL+Q.

Заключение

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

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Git Flow - это специальная система ветвления для Git. Она помогает команде лучше контролировать и добавлять различные версии про
img
Docker — популярная платформа виртуализации на уровне ОС. Она поставляет приложения в пакетах (контейнерах), которые, представля
img
Хуки в Git — это bash-скрипты, которые запускаются до или после команд Git, например, коммитов и пушей. Они позволяют автоматизи
img
  Nomad и Kubernetes – это две самые популярные платформы оркестровки, предназначенные для оркестровки динамических рабочих нагр
img
  Давайте узнаем о новом Ops-течении – GitOps! DevOps поспособствовал цифровизации многих компаний. Речь идет о командах разрабо
img
  Канареечное (canary) развёртывание – это метод разработки и развертывания программного обеспечения, который позволяет выпускат
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59