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
  В современном технологическом мире контейнерные технологии используются везде. Самой популярной платформой для управления конт
img
  На сегодняшний день контейнеры – это то, без чего не обходится запуск приложений. А самая популярная контейнерная технология
img
Введение Разработчик при написании кода должен быть максимально продуктивным. Однако бывают ситуации, когда им приходится выпо
img
  Kubernetes стал незаменимым инструментом для оркестровки, масштабирования, автоматического развертывания и управления контей
img
  С помощью контейнеров вы можете упаковать свое приложение и сделать его, таким образом, переносимым. В результате оно сможет р
img
Введение Kubernetes – это платформа, которая предоставляет возможность работать с модулями, службами и внешними ресурсами и пр
Комментарии
ЛЕТНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59