Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

<p>Название</p><p>Dolor Set Amet</p><p>LOREM IPSUM</p><p>Глава 1</p><p>DOCKER</p><p>Docker — программное обеспечение</p><p>для автоматизации развёртывания и</p><p>управления приложениями в средах</p><p>с поддержкой контейнеризации.</p><p>Позволяет «упаковать» приложение со</p><p>всем его окружением и зависимостями в</p><p>контейнер, который может быть</p><p>перенесён на любую Linux-систему с</p><p>поддержкой cgroups в ядре, а также</p><p>предоставляет среду по управлению</p><p>контейнерами.</p><p>Позволяет «упаковать» приложение со</p><p>всем его окружением и зависимостями в</p><p>контейнер, который может быть</p><p>перенесён на любую Linux-систему с</p><p>Раздел 1</p><p>LOREM IPSUM</p><p>1. Lorem ipsum dolor sit amet</p><p>2. Consectetur adipisicing elit, sed do</p><p>eiusmod tempor incididunt ut labore et</p><p>dolore magna aliqua.</p><p>3. Ut enim ad minim veniam, quis nostrud</p><p>exercitation ullamco laboris nisi ut aliquip</p><p>ex ea commodo consequat.</p><p>4. Duis aute irure dolor in reprehenderit in</p><p>voluptate velit esse cillum dolore eu fugiat</p><p>nulla pariatur.</p><p>Docker</p><p>2</p><p>поддержкой cgroups в ядре, а также предоставляет среду по</p><p>управлению контейнерами.</p><p>Написан на языке: Go</p><p>Автор: Solomon Hykes</p><p>Первый выпуск: 13 марта 2013</p><p>Контрольная группа (англ. control</p><p>group, cgroups, cgroup) —</p><p>группа процессов в Linux, для которой</p><p>механизмами ядра наложена изоляция</p><p>и установлены ограничения на некоторые вычислительные ресурсы (процессорные,</p><p>сетевые, ресурсы памяти, ресурсы ввода-вывода). Механизм позволяет</p><p>образовывать иерархические группы процессов с заданными ресурсными</p><p>свойствами и обеспечивает программное управление ими.</p><p>3</p><p>Проект начат как внутренняя собственническая разработка</p><p>компании dotCloud, основанной Соломоном Хайксом (Solomon</p><p>Hykes) в 2008 году с целью построения публичной PaaS-платформы</p><p>с поддержкой различных языков программирования. Наряду с</p><p>Хайксом в первоначальной разработке значительное участие</p><p>приняли инженеры dotCloud Андреа Лудзарди (Andrea Luzzardi) и</p><p>Франсуа-Ксавье Бурле (François-Xavier Bourlet).</p><p>Для экономии дискового пространства проект использует файловую</p><p>систему Aufs с поддержкой технологии каскадно-объединённого</p><p>монтирования: контейнеры используют образ базовой</p><p>операционной системы, а изменения записываются в отдельную</p><p>область. 4</p><p>Platform as a Service (PaaS, «платформа как услуга») — модель предоставления облачных вычислений, при которой потребитель получает доступ</p><p>к использованию информационно-технологических платформ: операционных систем, систем управления базами данных, связующему</p><p>программному обеспечению, средствам разработки и тестирования, размещённым у облачного провайдера.</p><p>Также поддерживается размещение контейнеров в файловой</p><p>системе Btrfs с включённым режимом копирования при</p><p>записи.Программное обеспечение функционирует в среде Linux с</p><p>ядром, поддерживающим cgroups и изоляцию пространств имён</p><p>(namespaces); существуют сборки только для платформ</p><p>x86-64 и ARM. Начиная с версии 1.6 возможно использование в</p><p>ОС Windows.</p><p>Docker - это платформа</p><p>для разработчиков и</p><p>системных</p><p>администраторов для создания, запуска и обмена приложениями с</p><p>контейнерами. Использование контейнеров для развертывания</p><p>приложений называется контейнеризацией . Контейнеры не новы,</p><p>они используются для простого развертывания приложений. 5</p><p>Ключевое преимущество Docker в том, что он позволяет</p><p>пользователям упаковать приложение со всеми его зависимостями</p><p>в стандартизированный модуль для разработки. В отличие от</p><p>виртуальных машин, контейнеры не создают такой дополнительной</p><p>нагрузки, поэтому с ними можно использовать систему и ресурсы</p><p>более эффективно.</p><p>Виртуальные машины отлично подходят для полной изоляции процесса для</p><p>приложения: почти никакие проблемы основной операционной системы не могут</p><p>повлиять на софт гостевой ОС, и наоборот. Но за такую изоляцию приходится</p><p>платить. Существует значительная вычислительная нагрузка, необходимая для</p><p>виртуализации железа гостевой ОС.</p><p>Контейнеры используют другой подход: они предоставляют схожий с виртуальными</p><p>машинами уровень изоляции, но благодаря правильному задействованию</p><p>низкоуровневых механизмов основной операционной системы делают это с в разы</p><p>меньшей нагрузкой.</p><p>6</p><p>Контейнеризация становится все более популярной, поскольку</p><p>контейнеры обладают следующими возможностями:</p><p>7</p><p>Гибкость:</p><p>flexible</p><p>Легкость:</p><p>lightweight</p><p>Портативность:</p><p>portable</p><p>Свободно (слабо)</p><p>связанность:</p><p>loosely coupled</p><p>Масштабируемость:</p><p>scalable</p><p>Безопасность:</p><p>secure</p><p>Даже самые сложные приложения могут быть упакованы.</p><p>Контейнеры используют и совместно используют ядро</p><p>узла, что делает их намного более эффективными с точки</p><p>зрения системных ресурсов, чем виртуальные машины.</p><p>Можно создавать локально, развертывать в облаке и</p><p>запускать в любом месте.</p><p>Контейнеры очень самодостаточны и инкапсулированы,</p><p>позволяя заменить или обновить один, не нарушая других.</p><p>Можно увеличивать и автоматически распространять</p><p>реплики контейнеров в центре обработки данных.</p><p>Контейнеры применяют агрессивные ограничения и</p><p>отключения к процессам без какой-либо конфигурации,</p><p>требуемой от пользователя.</p><p>Образы и контейнеры</p><p>В принципе, контейнер является не чем иным, как запущенным</p><p>процессом, с некоторыми добавленными функциями инкапсуляции,</p><p>примененными к нему, чтобы сохранить его изолированным от хоста</p><p>и от других контейнеров.</p><p>Один из важнейших аспектов изоляции контейнера заключается в</p><p>том, что каждый контейнер взаимодействует со своей собственной</p><p>частной файловой системой; Эта файловая система</p><p>предоставляется образом Docker.</p><p>Образ включает все необходимое для запуска</p><p>приложения - код или двоичный файл, время</p><p>выполнения, зависимости и любые другие</p><p>требуемые объекты файловой системы.</p><p>8</p><p>Контейнеры и виртуальные машины</p><p>Контейнер нативно запускается в Linux и совместно использует</p><p>ядро хост-машины с другими контейнерами. Он запускает</p><p>дискретный процесс, занимающий не больше памяти, чем любой</p><p>другой исполняемый файл, что делает его более легким.</p><p>В отличие от этого виртуальная машина (ВМ) запускает</p><p>полноценную "гостевую" операционную</p><p>систему с виртуальным доступом к</p><p>ресурсам узла через гипервизор.</p><p>Как правило, виртуальные машины</p><p>несут большие издержки,</p><p>превышающие затраты логики</p><p>приложения.</p><p>9</p><p>Установка Docker под различные ОС</p><p>Docker Desktop - это простое в установке приложение для среды</p><p>Mac или Windows, которое позволяет начать контейнеризацию за</p><p>считанные минуты. Docker Desktop включает все необходимое для</p><p>создания, запуска и совместного использования контейнерных</p><p>приложений прямо с компьютера.</p><p>Для загрузки и установки Docker Desktop следуйте инструкциям,</p><p>соответствующим вашей операционной системе:</p><p>Установить Docker Desktop на Mac</p><p>Docker Desktop for Mac - это версия Docker для Mac.</p><p>Вы можете скачать Docker Desktop for Mac из Docker Hub по ссылке:</p><p>https://hub.docker.com/editions/community/docker-ce-desktop-mac/</p><p>10</p><p>Установить Docker Desktop в Windows</p><p>Docker Desktop for Windows - это версия Docker</p><p>для Microsoft Windows. Вы можете загрузить</p><p>Docker Desktop for Windows из Docker Hub по</p><p>ссылке:</p><p>https://hub.docker.com/editions/community/docker-ce-desktop-windows/</p><p>Docker Desktop не запускается</p><p>автоматически после установки.</p><p>Если значок</p><p>кита в строке</p><p>состояния запущен, Docker Desktop</p><p>работает и доступен из любого окна</p><p>терминала.</p><p>11</p><p>https://hub.docker.com/editions/community/docker-ce-desktop-windows/</p><p>https://hub.docker.com/editions/community/docker-ce-desktop-windows/</p><p>Установить Docker в Centos 7</p><p>Сперва обновим базу пакетов:</p><p>sudo yum check-update</p><p>Для установки самой последней и стабильной версии Docker необходимо обратиться к официальному репозиторию Docker.</p><p>Следующая команда добавит репозиторий, загрузит последнюю</p><p>версию ПО и установит его:</p><p>curl -fsSL https://get.docker.com/ | sh</p><p>если вы собираетесь использовать Docker не от root, то необходимо</p><p>добавить пользователя в созданную после установки группу docker:</p><p>sudo usermod -aG docker user1</p><p>Запустите демон Docker после окончания установки:</p><p>sudo systemctl start docker 12</p><p>https://get.docker.com</p><p>https://get.docker.com</p><p>Чтобы убедиться в правильности</p><p>установки и работоспособности</p><p>программной среды Docker, следует</p><p>выполнить команду docker version.</p><p>Для проверки правильности</p><p>установки программной системы</p><p>Docker выполните следующую</p><p>команду:</p><p>$ docker run debian echo "Hello World"</p><p>13</p><p>docker run, инициализируем запуск контейнеров</p><p>debian – это имя образа, который мы</p><p>намерены использовать</p><p>После загрузки и проверки образа Docker помещает его в</p><p>работающий контейнер и выполняет заданную команду echo "Hello</p><p>World" внутри контейнера.</p><p>Если выполнить эту же команду еще раз, то контейнер</p><p>запустится немедленно, без предварительной загрузки образа.</p><p>14</p><p>сообщает об отсутствии локальной копии образа</p><p>Debian</p><p>Затем Docker в онлайн-режиме проверяет Docker</p><p>Hub и загружает самую новую версию образа Debian</p><p>Способы создания образа Docker</p><p>Существует 4 стандартных способа создать образ Docker:</p><p>Первый вариант «от руки» подойдет, если вы проверяете концепцию,</p><p>чтобы увидеть, работает ли ваш процесс установки. В то же время</p><p>вы должны вести записи о предпринимаемых вами шагах, чтобы при</p><p>необходимости вернуться к нужной вам точке. 15</p><p>1. Команды Docker 2. Dockerfile</p><p>3. Dockerfile и</p><p>инструмент</p><p>управления</p><p>конфигурацией</p><p>4. Cтереть образ и</p><p>импортировать</p><p>набор файлов</p><p>Запуск контейнера</p><p>с помощью</p><p>docker run и ввод</p><p>команд для</p><p>создания образа в</p><p>командной строке</p><p>Выполнение сборки</p><p>из базового образа</p><p>и указание ее с</p><p>помощью</p><p>ограниченного</p><p>набора простых</p><p>команд</p><p>То же самое что и</p><p>Dockerfile, но вы</p><p>передаете контроль</p><p>над сборкой более</p><p>сложному</p><p>инструменту</p><p>управления</p><p>конфигурацией</p><p>Из пустого образа</p><p>импортируете TAR</p><p>файл с</p><p>необходимыми</p><p>файлами</p><p>В какой-то момент вы захотите определить шаги для создания</p><p>своего образа. Это опция Dockerfile.</p><p>Для более сложных сборок вы можете выбрать третий вариант,</p><p>особенно когда функции Dockerfile недостаточно сложны для</p><p>вашего образа.</p><p>Последний вариант строится из нулевого образа путем наложения</p><p>набора файлов, необходимых для запуска образа. Это полезно, если вы</p><p>хотите импортировать набор автономных файлов, созданных в другом месте, но этот</p><p>метод редко встречается при массовом использовании.</p><p>DOCKERFILE</p><p>Dockerfile – это обычный текстовый файл, содержащий набор</p><p>операций, которые могут быть использованы для создания Docker-</p><p>образа.</p><p>16</p><p>Базовый синтаксис Dockerfile выглядит следующим образом:</p><p># Использовать официальный образ в качестве родительского.</p><p>FROM node:current-slim</p><p># Указание рабочей директории</p><p>WORKDIR /usr/src/app</p><p># Копирование файла с вашего хоста в текущее расположение.</p><p>COPY package.json .</p><p># Выполнить команду внутри файловой системы образа.</p><p>RUN npm install</p><p># Сообщить Docker, что контейнер прослушивает указанный порт во время выполнения.</p><p>EXPOSE 8080</p><p># Выполнить указанную команду в контейнере.</p><p>CMD [ "npm", "start" ]</p><p># Скопировать остальную часть исходного кода приложения с вашего хоста в ваш образ файловой системы.</p><p>COPY . . 17</p><p>Пример работы docker</p><p>Напишите команду docker run hello-world и выполните ее.</p><p>Если команда выполнена успешно вы увидите примерно следующее:</p><p>Теперь выполните docker ps -a что бы увидеть все контейнеры в</p><p>системе:</p><p>Команда</p><p>docker ps отображает только запущенные контейнеры.</p><p>Поскольку hello-world уже выполнен и завершен, то</p><p>соответствующий контейнер не отображается по команде docker ps.</p><p>18</p><p>Docker Engine обеспечивает базовую технологию для</p><p>функционирования образов и контейнеров. На последнем шаге вы</p><p>использовали команду docker run hello-world. Эта команда</p><p>выполнялась в три этапа.</p><p>docker run hello-world</p><p>Образ представляет из себя файловую систему с параметрами</p><p>используемыми при запуске. Он не имеет состояния и никогда не</p><p>меняется. А контейнер является запущенным экземпляром образа.</p><p>Важной частью экосистемы Docker является Docker Hub -</p><p>открытый репозиторий образов контейнеров. В нём можно найти</p><p>десятки готовых приложений от официальных разработчиков.</p><p>19</p><p>сообщает вашей</p><p>операционной системе, что</p><p>вы используете программу</p><p>Docker</p><p>сообщает Docker, какой образ</p><p>загружать в контейнер</p><p>подкоманда, которая создает и запускает Docker-контейнер</p><p>Среди них - nginx, MySQL, Apache, Gitlab, Redmine, Elasticsearch,</p><p>Jenkins и другие.</p><p>Docker Hub содержит образы как от индивидуальных</p><p>разработчиков, так и официальные образы от организаций, таких</p><p>как RedHat, IBM, Google и д.р.</p><p>Docker Hub находится по адресу: https://hub.docker.com</p><p>Перейдя в строку поиска и набрав название, мы можем найти</p><p>необходимые нам</p><p>образы, например</p><p>whalesay</p><p>Браузер отобразит</p><p>репозиторий для</p><p>образа whalesay. 20</p><p>https://hub.docker.com</p><p>https://hub.docker.com</p><p>Каждый репозиторий образа</p><p>содержит информацию о</p><p>разновидностях</p><p>содержащегося</p><p>программного обеспечения и</p><p>о том как им пользоваться.</p><p>Пролистав описание ниже, мы увидим</p><p>пример команды:</p><p>docker run docker/whalesay cowsay boo</p><p>21</p><p>Введем команду docker run docker/whalesay cowsay boo в</p><p>терминале.</p><p>Эта команда запускает образ</p><p>whalesay в контейнере.</p><p>Результат выполнения будет</p><p>примерно таким:</p><p>При первом запуске образа,</p><p>команда docker ищет образ в</p><p>вашей системе.</p><p>Если образ не обнаружен, то docker скачает его с Docker Hub.</p><p>22</p><p>Образы контейнеров Docker содержат в себе все</p><p>необходимые приложению библиотеки, поэтому конфликтов</p><p>с другим ПО не будет.</p><p>Введите команду: docker images</p><p>Команда отображает список образов в локальной системе.</p><p>В результате вы увидите docker/whalesay в этом списке.</p><p>Когда вы запускаете образ в контейнере, Docker скачивает образ</p><p>на ваш компьютер. Эта локальная копия будет беречь ваше время.</p><p>В следующий раз Docker скачает этот образ только если он</p><p>обновился на Docker Hub.</p><p>Образ whalesay можно улучшить.</p><p>Было бы хорошо сделать так, что бы не нужно было печатать</p><p>лишние фразы для запуска whalesay.</p><p>docker run docker/whalesay cowsay boo-boo</p><p>23</p><p>Создание Dockerfile</p><p>Создайте новую директорию mydockerbuild.</p><p>$ mkdir mydockerbuild</p><p>Этот каталог служит в качестве "контекста" для сборки.</p><p>Контекст просто означает, что он содержит все, что вам нужно,</p><p>чтобы построить свой образ.</p><p>Войдите в созданную директорию.</p><p>$ cd mydockerbuild</p><p>Создайте Dockerfile в директории Dockerfile.</p><p>$ touch Dockerfile</p><p>Команда создает новый файл но ничего не выводит в консоль.</p><p>24</p><p>Откройте Dockerfile</p><p>#vim Dockerfile</p><p>Добавьте 3 следующие строки:</p><p>FROM docker/whalesay:latest</p><p>RUN apt-get -y update && apt-get install -y fortunes</p><p>CMD /usr/games/fortune -a | cowsay</p><p>Последняя строка говорит программе fortune передать фразу программе cowsay.</p><p>Сохраните и закройте Dockerfile.</p><p>На этом этапе, в Dockerfile добавлены все необходимые программы</p><p>и описано поведение.</p><p>Вы готовы к созданию нового образа.</p><p>25</p><p>Ключевое слово FROM говорит Docker какой образ будет базовым.</p><p>Образ whalesay уже имеет программу cowsay по этому мы возьмем</p><p>его за основу.</p><p>Теперь добавим программу fortunes в наш образ.</p><p>добавим инструкцию запуска программы при старте</p><p>контейнера.</p><p>Создание образа из Dockerfile</p><p>Теперь, соберем ваш новый образ набрав в терминале команду</p><p>docker build -t docker-whale . (на забудьте точку через пробел в конце).</p><p>Команда docker build -t docker-whale . открывает Dockerfile в</p><p>текущей директории, и создает образ docker-whale на вашем</p><p>компьютере.</p><p>Первым делом Докер проверяет все ли необходимое есть для</p><p>создания образа и затем выполняет шаги из Dockerfile.</p><p>Выполнение команды занимает несколько секунд. 26</p><p>Запуск нового образа</p><p>Введите и выполните команду docker images в командной строке.</p><p>Эта команда выводит список локальных образов в системе.</p><p>Запустите ваш новый образ</p><p>командой docker run docker-whale</p><p>Мы сделали кита гораздо умнее. Он</p><p>сам находит фразы для разговора и</p><p>команда запуска стала гораздо</p><p>короче. Docker не нужно было ничего</p><p>скачивать, так как образ был</p><p>построен на основе уже имеющегося.</p><p>27</p><p>Создание аккаунта в Docker Hub и репозитория</p><p>Для создания аккаунта в Docker Hub нужно зарегистрироваться на</p><p>сайте https://hub.docker.com. 	 Docker Hub бесплатен. Docker</p><p>попросит ввести имя, пароль и почту.</p><p>Регистрация обычная, нужно заполнить необходимые данные при</p><p>регистрации и</p><p>подтвердить свой емайл.</p><p>После успешной регистрации в Docker Hub ссылка подтверждения</p><p>из почты откроет в браузере страницу вашего профиля на Docker</p><p>Hub.</p><p>Здесь мы может создать новый репозиторий</p><p>нажав Create Repository.</p><p>Браузер откроет страницу создания репозитория.</p><p>28</p><p>https://hub.docker.com</p><p>https://hub.docker.com</p><p>Укажите название и</p><p>описание репозитория.</p><p>Убедитесь что</p><p>видимость репозитория</p><p>выставлена в режим</p><p>Public.</p><p>Нажмите Create</p><p>когда все поля будут</p><p>заполнены.</p><p>Docker Hub создаст ваш новый репозиторий.</p><p>29</p><p>Версионирование, push и pull вашего образа</p><p>Версионирование и push образа</p><p>В командной строке выполните команду docker images для</p><p>отображения списка существующих образов:</p><p>Найдите IMAGE ID для вашего образа docker-whale.</p><p>В данном примере он равен 543d445ae279 (у вас он может отличаться).</p><p>Обратите внимание что REPOSITORY показывает имя репозитория</p><p>docker-whale, но не пространство имен.</p><p>Вам необходимо включить namespace в Docker Hub для</p><p>ассоциирования его с вашим аккаунтом. namespace совпадает с</p><p>именем вашего аккаунта Docker Hub.</p><p>30</p><p>Вам необходимо переименовать образ по этому шаблону</p><p>YOUR_DOCKERHUB_NAME/docker-whale.</p><p>Используйте IMAGE ID и команду docker tag чтобы указать версию</p><p>вашего образа docker-whale.</p><p>docker tag 543d445ae279 samarancho/first-repo:latest</p><p>Таким образом, вы вводите команду с ID образа и имя вашей</p><p>учетной записи и нажмите ввод.</p><p>Снова выполните команду docker images что бы увидеть образ и</p><p>его версию:</p><p>31</p><p>Используйте команду docker login что бы авторизоваться в Docker</p><p>Hub из командной строки.</p><p>При появлении соответствующего запроса введите логин, пароль и</p><p>нажмите клавишу Enter.</p><p>1. Если вы авторизовываетесь в первый раз то команда покажет:</p><p>$ docker login</p><p>Login with your Docker ID to push and pull images from Docker Hub. If you don't have a</p><p>Docker ID, head over to https://hub.docker.com to create one.</p><p>Username: mydock</p><p>Password: password</p><p>Login Succeeded</p><p>2. Если не в первый раз:</p><p>32</p><p>https://hub.docker.com</p><p>https://hub.docker.com</p><p>Используйте команду docker push что бы выгрузить ваш образ в</p><p>репозиторий:</p><p>docker push samarancho/first-repo</p><p>Вернувшись в ваш профиль в</p><p>Docker Hub вы увидите новый</p><p>образ.</p><p>33</p><p>Загрузка (pull) нового образа</p><p>Теперь мы скачаем (pull) образ,</p><p>который вы выгрузили (push) на</p><p>Docker Hub.</p><p>Прежде чем это сделать, необходимо удалить исходный образ с</p><p>локального компьютера.</p><p>Если вы оставили исходный образ на вашей машине, Docker не</p><p>будет качать образ из Docker Hub - к чему бы это, ведь оба образа</p><p>идентичны.</p><p>В командной строке вводим docker images для вывода списка</p><p>образов на вашей машине.</p><p>34</p><p>Для проведения корректного теста, вам необходиму удалить образы</p><p>samarancho/first-repo и docker-whale из вашей локальной системы.</p><p>Их удаление вынудит в следующий раз docker pull скачать их из</p><p>репозитория.</p><p>Используйте команду docker rmi что бы удалить образы</p><p>maryatdocker/docker-whale и docker-whale.</p><p>Также вы можете использовать ID или название для команды</p><p>удаления.</p><p>$ docker rmi -f 543d445ae279</p><p>или</p><p>$ docker rmi -f docker-whale</p><p>35</p><p>Далее сделаем pull и загрузим новый образ из репозитория с</p><p>помощью команды docker run.</p><p>Команда должна включать имя пользователя на Docker Hub.</p><p>docker pull samarancho/first-repo:latest</p><p>Можно удостоверится что образ загрузился docker images:</p><p>Далее мы можем запустить наш</p><p>образ командой:</p><p>docker run samarancho/first-repo</p><p>36</p><p>Инструкции Dockerfile</p><p>Далее кратко описаны некоторые инструкции, предназначенные для</p><p>использования в файлах Dockerfile.</p><p>ADD</p><p>Копирует файлы из контекста создания или из удаленных URL-</p><p>ссылок в создаваемый образ. Если архивный файл добавляется из</p><p>локального пути, то он будет автоматически распакован. Так как</p><p>диапазон функциональности инструкции ADD достаточно велик, в</p><p>общем случае лучше воспользоваться более простой командой COPY</p><p>для копирования файлов и каталогов в локальном контексте создания</p><p>или инструкциями RUN с запуском curl или wget для загрузки</p><p>удаленных ресурсов (с сохранением возможности обработки и</p><p>удаления результатов загрузки в той же самой инструкции).</p><p>37</p><p>CMD</p><p>Запускает заданную инструкцию во время инициализации</p><p>контейнера.</p><p>Если была определена инструкция ENTRYPOINT, то заданная здесь</p><p>инструкция будет интерпретироваться как аргумент для</p><p>ENTRYPOINT (в этом случае необходимо использовать формат exec).</p><p>Инструкция CMD замещается любыми аргументами, указанными в</p><p>команде docker run после имени образа.</p><p>В действительности выполняется только самая последняя</p><p>инструкция CMD, а все предыдущие инструкции CMD будут</p><p>отменены (в том числе и содержащиеся в основных образах).</p><p>38</p><p>COPY</p><p>Используется для копирования файлов из контекста создания в</p><p>образ. Имеет два формата: COPY источник цель и COPY</p><p>["источник", "цель"] – оба копируют файл или каталог из</p><p>«источник» в контексте создания в «цель» внутри контейнера.</p><p>Формат JSON-массива обязателен, если путь содержит пробелы.</p><p>Можно использовать шаблонные символы для определения</p><p>нескольких файлов или каталогов.</p><p>Следует обратить особое внимание на невозможность указания</p><p>путей «источника», расположенных вне пределов контекста</p><p>создания</p><p>(например, нельзя указать для копирования файл ../another_dir/myfile).</p><p>39</p><p>ENTRYPOINT</p><p>Определяет выполняемый файл (программу) (и аргументы по</p><p>умолчанию), запускаемый при инициализации контейнера.</p><p>В эту выполняемую программу передаются как аргументы любые</p><p>инструкции CMD или аргументы команды docker run, записанные</p><p>после имени образа.</p><p>Инструкции ENTRYPOINT часто используются для организации</p><p>скриптов запуска, которые инициализируют переменные и сервисы</p><p>перед обработкой всех передаваемых в образ аргументов.</p><p>ENV</p><p>Определяет переменные среды внутри образа. На эти переменные</p><p>можно ссылаться в последующих инструкциях.</p><p>40</p><p>Например:</p><p>...</p><p>ENV MY_VERSION 1.3</p><p>RUN apt-get install -y mypackage=$MY_VERSION</p><p>Определенные в этой инструкции переменные будут доступными</p><p>также и внутри образа.</p><p>EXPOSE</p><p>Сообщает механизму Docker о том, что в данном контейнере будет</p><p>существовать процесс, прослушивающий заданный порт или</p><p>несколько портов. Механизм Docker использует эту информацию при</p><p>установлении соединения между контейнерами или при открытии</p><p>портов для общего доступа при помощи аргумента -P в команде</p><p>docker run. Но сама по себе инструкция EXPOSE не оказывает</p><p>никакого воздействия на сетевую среду. 41</p><p>FROM</p><p>Определяет основной образ для файла Dockerfile.</p><p>Все последующие инструкции выполняют операции создания поверх</p><p>заданного образа.</p><p>Основной образ определяется в форме IMAGE:TAG (например,</p><p>debian:wheezy).</p><p>При отсутствии тега по умолчанию полагается latest, но настоятельно</p><p>рекомендуется всегда явно указывать тег конкретной версии, чтобы</p><p>избежать неприятных неожиданностей.</p><p>Эта инструкция обязательно должна быть самой первой в</p><p>Dockerfile.</p><p>42</p><p>MAINTAINER</p><p>Определяет метаданные об авторе «Author» для создаваемого</p><p>образа в заданной строке. Извлечь эти метаданные можно с</p><p>помощью команды docker inspect -f {{.Author}} IMAGE. Обычно</p><p>используется для записи имени автора образа и его контактных</p><p>данных.</p><p>ONBUILD</p><p>Определяет инструкцию, которая должна выполняться позже, когда</p><p>данный образ будет использоваться как основной уровень для</p><p>другого образа. Это может оказаться полезным при обработке</p><p>данных, добавляемых в образ-потомок (например, это может быть</p><p>инструкция копирования дополнительного кода из заданного каталога и запуска</p><p>скрипта сборки, обрабатывающего скопированные данные).</p><p>43</p><p>RUN</p><p>Запускает заданную инструкцию внутри контейнера и сохраняет</p><p>результат.</p><p>USER</p><p>Задает пользователя (по имени или по идентификатору UID) для</p><p>использования во всех последующих инструкциях RUN, CMD,</p><p>ENTRYPOINT. Идентификаторы UID одинаковы на хосте и в</p><p>контейнере, но имена пользователей могут присваиваться</p><p>различным идентификаторам UID, что может приводить к</p><p>затруднениям при установке прав доступа.</p><p>44</p><p>VOLUME</p><p>Объявляет заданный файл или каталог как том. Если такой файл или</p><p>каталог уже существует в образе, то он копируется</p><p>в том при</p><p>запуске контейнера. Если задано несколько аргументов, то они</p><p>интерпретируются как определение нескольких томов. Из</p><p>соображений обеспечения безопасности и сохранения</p><p>переносимости нельзя определить каталог хоста как том внутри</p><p>файла Dockerfile.</p><p>WORKDIR</p><p>Определяет рабочий каталог для всех последующих инструкций</p><p>RUN, CMD, ENTRYPOINT, ADD, COPY. Инструкцию можно</p><p>использовать несколько раз. Допускается указание относительных путей,</p><p>при этом итоговый путь определяется относительно ранее указанного рабочего</p><p>каталога WORKDIR.</p><p>45</p>

Mais conteúdos dessa disciplina