—просите про Asterisk в Telegram - чате

ћерион Ќетворкс

6 минут чтени€

¬ продолжение статьи про 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.

«аключение

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


ѕолезна ли ¬ам эта стать€?


Ёти статьи могут быть вам интересны: