Как сделать docker image

Полное руководство по созданию Docker-образа для обслуживания системы машинного обучения в продакшене

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Команда Mail.ru Cloud Solutions перевела полное пошаговое руководство для создания образа Docker (GPU или CPU) вместе с объяснением всех передовых методов, которые следует использовать для обслуживания любого программного обеспечения на основе машинного обучения. Далее текст от лица автора.

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

Эта статья посвящена сборке идеального образа, а не рассмотрению его достоинств или применяемых в образе концепций. Я исхожу из того, что у вас есть базовые знания:

Общие рекомендации по сборке Docker-образа

Есть много отличных источников информации по универсальным лучшим методикам, например официальное руководство Docker, но я хочу предложить лаконичный вариант, адаптированный под проект на основе машинного обучения.

Файл requirements.txt всегда должен содержать версию пакета Python. Никогда не пишите просто название пакета, иначе всегда будет устанавливаться последний пакет из списка, а пользы от Docker не будет никакой.

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
Источник

Всегда группируйте похожие команды RUN, которые оперируют на одном уровне Docker (не буду объяснять причин, это выходит за рамки статьи).

Избегайте базовых Docker-образов на основе Alpine. Звучит противоречиво, но поверьте, они плохо работают с Python. Подробнее читайте в этой публикации.

Сборка Docker-образа для любого проекта на Python (CPU)

Чаще всего системы машинного обучения делают на Python, поэтому важно эффективно создавать любые Docker-образы на основе этого языка.

Одноэтапная сборка

Во время одного общего процесса сборки будут выполнены все задачи. Последовательность действий: выберите базовый образ, установите пакеты ОС, скопируйте исходники, установите пакеты, задайте точку входа (если нужно) или другие команды.

Пример одноэтапной сборки Docker:

Для демонстрации я использовал эти пакеты:

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

После запуска команды docker build размер образа был 1,64 Гб:

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Библиотеки Python из коробки не работают, сначала их нужно скомпилировать на С. Нас интересует лишь скомпилированная часть библиотек, остальное не нужно. При выполнении pip install все библиотеки сначала скачиваются, а затем компилируются.

Нужно удалить все промежуточные и дополнительные компоненты, созданные при установке библиотек. Для этого можно использовать bash-команды. Если сделать неправильно, то будет много неприятностей или даже сломается библиотека. Это довольно сложно, многие стараются этого избежать и пускают в эксплуатацию более громоздкие образы. Но нам на помощь приходит многоэтапная сборка образа (Docker multi-stage builds).

Многоэтапная сборка

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

Давайте посмотрим на примере:

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

При таком способе размер Docker-образа стал 1,61 Гб вместо 1,64. Вроде бы разница невелика, но на самом деле отличий много. Пробежимся по ним.

Строки с 1 по 5 относятся к первому этапу — компилированию, когда мы устанавливаем библиотеки Python: они сначала скачиваются, а затем компилируются на С, поэтому мы даже установили gcc. Затем мы просто копируем скомпилированные библиотеки из первого этапа во второй (runtime) с помощью этой команды:

Но, как видно на скриншоте, размер уменьшился не сильно. С другими языками разница будет огромной, но у Python есть несколько фокусов в запасе:

Кроме того, многоэтапность применима, если вы собираете Python-пакет из исходника, либо с помощью setup.py используете локальный пакет, поскольку опять же их нужно компилировать.

Настаиваю, чтобы вы прочитали эту статью, в которой объясняется формат wheels в Python.

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

В файле req.txt, который я использовал для демонстрации, только вышеприведенные пакеты представлены не в формате wheel, а также они очень малы. Но если какой-то пакет не скомпилирован предварительно и занимает много места, то вы потеряете много места на диске.

Сборка Docker-образа для любого проекта на Python (GPU)

Собирать Docker-образ для CPU нетрудно, чего не скажешь о сборке образа для GPU. Если ошибиться, то размер будет огромный. Я сосредоточусь на практической реализации и не буду касаться теории (думаю, это выходит за рамки статьи).

Необходимые условия

TensorFlow и Pytorch используют видеодрайверы Nvidia CUDA. Поэтому сначала нужно установить на хостовую машину свежие драйверы Nvidia и CUDA, а также соответствующую cuDNN (не буду здесь это описывать).

После этого нужно установить nvidia-docker2, позволяющий движку Docker обращаться к видеодрайверам Nvidia.

Самое важное — выбрать правильную версию/тег CUDA, cuDNN для Nvidia-Docker-образа, а также записать туда TensorFlow/Pytorch. Тогда система машинного обучения сможет использовать видеокарту. Поверьте, это может быть очень неприятной задачей, так что дам советы:

Описание официального Docker-хаба Nvidia:

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
Источник

Нас интересует только основа и runtime, а не среда разработки, потому что мы сосредоточены на среде эксплуатации. Как выбрать нужный тег? Читайте ниже.

Одноэтапная сборка

Для выбора тега есть эмпирическое правило, которому я следую.

Шаг 1: проверьте версию CUDA и cuDNN на хостовой машине.

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
У меня CUDA 10.1 и cuDNN 7.5

Шаг 3: выберите правильную версию TensorFlow/Pytorch, которая совместима с вашей версией CUDA и cuDNN. В моем случае это TensorFlow 2.20.

Обратите внимание: Docker-образ от Nvidia может быть старше Ubuntu (18.04 или 16.04), и тогда будет установлен Python 3.6. Поэтому проверьте совместимость версии Python со своим проектом и внешними пакетами. Потом можно будет установить нужную версию.

Пример одноэтапной сборки Docker-образа (GPU):

Примечание: в основе Docker-образа от Nvidia лежит Ubuntu 18.04, мне пришлось внести правку и установить TensorFlow 2.2.0.

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
Проверяем, что TensorFlow может использовать видеокарту

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
Размер Docker-образа при одноэтапной сборке

Многоэтапная сборка

Можно использовать тот же механизм, который описан в главе 2.2. Сначала скачаем и скомпилируем пакеты Python, они будут скопированы во второй этап (runtime). Также нужно воспользоваться всеми советами из главы 3.2.

Пример многоэтапной сборки Docker-образа (GPU):

Примечание: чтобы по умолчанию использовать Python 3.8, я добавил кое-какой код. Если вам это не нужно, то пропустите.

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
Проверяем, что TensorFlow может использовать видеокарту

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image
Размер Docker-образа при многоэтапной сборке

Снова разница в размерах невелика, причины те же, что и в главе 2.2. Очень рекомендую всегда применять многоэтапную сборку, она в любом случае улучшает удобочитаемость.

Исследуем Docker-образ с помощью Dive

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

Dive — прекрасный инструмент на основе командной строки для исследования образа, содержимого слоев и поиска способов уменьшить размер Docker/OCI-образа. У него на GitHub больше 24 тыс. звезд. К тому же он очень прост в использовании.

У Dive есть две очень полезные метрики:

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

Заключение

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

Источник

Docker, часть 3 – создание образов при помощи Dockerfile

В предыдущей части данного руководства мы увидели, как можно сохранить изменения в контейнере в новый образ. Такой способ подходит, если количество изменений относительно невелико – вводить все команды вручную каждый раз может быть затруднительно. Для упрощения процесса сборки можно воспользоваться Dockerfile. Это специальный скрипт, в котором содержатся команды и инструкции, которые будут в заданной последовательности выполнены для сборки нового образа Docker.
В данном руководстве мы рассмотрим создание собственного образа Docker при помощи Dockerfile. Он будет подробно разобран, чтобы в дальнейшем вы легко смогли создать свой собственный скрипт.

Обзор команд Dockerfile

Dockerfile – это скрипт, содержащий набор команд dockerfile и операционной системы (то есть команд Linux). Прежде чем создать свой dockerfile, давайте познакомимся с этими командами. Вот наиболее важные из них:
FROM — Указывает базовый образ для создания нового образа. Эта команда должна быть первой в dockerfile.
MAINTAINER — Необязательная команда, указывает имя владельца образа.
RUN — Используется для выполнения команды в ходе сборки образа.
ADD — Скопировать файл из файловой системы хоста в новый образ. Можно указать URL файла, в этом случае Docker загрузит его в заданную директорию.
ENV — Определяет переменную среды.
CMD — Команда которая будет запущена при создании нового контейнера на основе образа.
ENTRYPOINT — Задает команду по умолчанию, которая будет выполнена при запуске контейнера.
WORKDIR — рабочий каталог для выполнения команды CMD.
USER — Задает пользователя или UID для создаваемого на основе образа контейнера.
VOLUME — Монтирует директорию хоста в контейнер.
EXPOSE — Указывает какие порты будут слушаться в контейнере.

Создание Dockerfile

На данном этапе мы создадим для Dockerfile новую директорию и определим, что мы хотим сделать при помощи Dockerfile.
Создайте новую директорию и пустой файл в ней

Затем определим, какой образ требуется создать. В данном руководстве мы установим Nginx и PHP-FPM7, используя образ Ubuntu 18.04. Кроме того, нам потребуется Supervisord, чтобы запустить Nginx и PHP-FPM 7 одной командой.
Откройте Dockerfile в любом текстовом редакторе, например vim:

В начале файла добавьте строку с указанием базового образа, который мы будем использовать (Ubuntu 18.04):

Обновим программный репозиторий Ubuntu внутри Dockerfile при помощи команды ‘RUN‘.

Теперь установим приложения, который требуются для нашего образа. При помощи apt можно установить Nginx, PHP-FPM и Supervisord из репозитория Ubuntu. Добавьте соответствующую команду RUN:

После установки приложений их нужно настроить. Мы настроим Nginx для работы с PHP путем изменения конфигурации виртуального хоста по умолчанию. Можно отредактировать существующий файл конфигурации командой sed или заменить его новым файлом при помощи команды Dockerfile COPY.

Теперь настроим Supervisord для Nginx and PHP-FPM, точно так же заменив файл конфигурации по умолчанию новым файлом, используя команду COPY.

Создадим новую директорию для sock-файла php-fpm и изменим владельца директории /var/www/html и директории PHP на www-data.

Определим том, чтобы смонтировать указанные ниже директории на хост:

Наконец, нужно установить команду по умолчанию при запуске контейнера и открыть порты для HTTP и HTTPS. Для заданной ‘CMD’ команды по умолчанию мы создадим новый файл

start.sh, содержащий команду «supervisord», и скопируем его в новый образ командой ‘COPY‘.

Указываем порты для nginx

Сохраните и закройте файл.

Вот весь скрипт Dockerfile целиком:

Теперь внутри директории с Dockerfile создайте новый файл конфигурации виртуального хоста под названием «default», файл конфигурации supervisord «supervisord.conf» и скрипт конфигурации сервисов «start.sh».

Вставьте в файл конфигурации виртуального хоста следующий код:

Откройте файл конфигурации Supervisord:

Вставьте следующий код конфигурации:

Откройте файл start.sh.

Вставьте следующие параметры конфигурации:

Сохраните и закройте файл.

При помощи команды chmod сделайте файл start.sh исполняемым:

Создание нового образа и контейнера

Теперь, когда у нас есть все необходимые файлы конфигурации, можно собрать новый образ Docker на основе Ubuntu 18.04, используя наш Dockerfile. Для этого нужно выполнить следующую команду Docker:

Обратите внимание на точку, если вы находитесь в каталоге в котором создан Dockerfile. Если вы находитесь не в корне каталога, то вместо точки укажите директорию с докфайлом. Если создание образа прошло без ошибок вы должны увидеть примерно следующее

Successfully built e7e5dc3d6cd1, говорит о том что образ создан. После успешного выполнения команды можно проверить наличие нового образа при помощи команды images:

Попробуем создать на основе этого образа новый контейнер. Предварительно создадим на хосте новую директорию для данных корня документов:

Запустим новый контейнер командой run:

И командой ps проверим, запустился ли новый контейнер под названием my_container:

Разберем команду run более подробно:

—name my_container nginx_image — на основе образа «nginx_images» создаем новый контейнер с именем «my_container».
-p 80:80 — контейнер запускаетcя на 80 порте хоста.
-v /webroot:/var/www/html — содержимое директории хоста /webroot перезаписывает директорию /var/www/html в контейнере.
Новый контейнер на основе образа nginx_image должен работать без ошибок.

Тестирование работы Nginx и PHP-FPM в контейнере

Командой echo создайте в директории /webroot новый файл index.html:

Теперь проверим, что PHP-FPM 7.2 работает – создадим в директории /webroot новый файл c phpinfo.

Откройте веб-браузер и введите IP-адрес хоста:

Если все работает правильно, вы увидите следующий результат:

Заключение

Мы успешно создали новый образ и теперь можем создавать на его основе новые контейнеры. Более подробную информацию о создании образов и Dockerfile можно получить в документации Docker.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Изучаем Docker, часть 3: файлы Dockerfile

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

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Образы Docker

Вспомните о том, что контейнер Docker — это образ Docker, вызванный к жизни. Это — самодостаточная операционная система, в которой имеется только самое необходимое и код приложения.

Образы Docker являются результатом процесса их сборки, а контейнеры Docker — это выполняющиеся образы. В самом сердце Docker находятся файлы Dockerfile. Подобные файлы сообщают Docker о том, как собирать образы, на основе которых создаются контейнеры.

Контейнеры, как мы выяснили в первом материале этой серии, состоят из слоёв. Каждый слой, кроме последнего, находящегося поверх всех остальных, предназначен только для чтения. Dockerfile сообщает системе Docker о том, какие слои и в каком порядке надо добавить в образ.

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

Базовый образ — это то, что является исходным слоем (или слоями) создаваемого образа. Базовый образ ещё называют родительским образом.

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Базовый образ — это то, с чего начинается образ Docker

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

Файлы Dockerfile

В файлах Dockerfile содержатся инструкции по созданию образа. С них, набранных заглавными буквами, начинаются строки этого файла. После инструкций идут их аргументы. Инструкции, при сборке образа, обрабатываются сверху вниз. Вот как это выглядит:

Здесь мы исходим из предположения, в соответствии с которым используется образ Docker, основанный на Unix-подобной ОС. Конечно, тут можно воспользоваться и образом, основанным на Windows, но использование Windows — это менее распространённая практика, работать с такими образами сложнее. В результате, если у вас есть такая возможность, пользуйтесь Unix.

Для начала приведём список инструкций Dockerfile с краткими комментариями.

Дюжина инструкций Dockerfile

Инструкции и примеры их использования

▍Простой Dockerfile

Dockerfile может быть чрезвычайно простым и коротким. Например — таким:

▍Инструкция FROM

Ключевое слово FROM сообщает Docker о том, чтобы при сборке образа использовался бы базовый образ, который соответствует предоставленному имени и тегу. Базовый образ, кроме того, ещё называют родительским образом.

В этом примере базовый образ хранится в репозитории ubuntu. Ubuntu — это название официального репозитория Docker, предоставляющего базовую версию популярной ОС семейства Linux, которая называется Ubuntu.

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

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Структура контейнера (взято из документации)

Docker, ради эффективности, использует стратегию копирования при записи. Если слой в образе существует на предыдущем уровне и какому-то слою нужно произвести чтение данных из него, Docker использует существующий файл. При этом ничего загружать не нужно.

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

Продолжим рассмотрение инструкций, которые используются в Dockerfile, приведя пример такого файла с более сложной структурой.

▍Более сложный Dockerfile

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

Возможно, на первый взгляд этот файл может показаться довольно сложным. Поэтому давайте с ним разберёмся.

Базой этого образа является официальный образ Python с тегом 3.7.2-alpine3.8. Проанализировав этот код можно увидеть, что данный базовый образ включает в себя Linux, Python, и, по большому счёту, этим его состав и ограничивается. Образы ОС Alpine весьма популярны в мире Docker. Дело в том, что они отличаются маленькими размерами, высокой скоростью работы и безопасностью. Однако образы Alpine не отличаются широкими возможностями, характерными для обычных операционных систем. Поэтому для того, чтобы собрать на основе такого образа что-то полезное, создателю образа нужно установить в него необходимые ему пакеты.

▍Инструкция LABEL

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Инструкция LABEL (метка) позволяет добавлять в образ метаданные. В случае с рассматриваемым сейчас файлом, она включает в себя контактные сведения создателя образа. Объявление меток не замедляет процесс сборки образа и не увеличивает его размер. Они лишь содержат в себе полезную информацию об образе Docker, поэтому их рекомендуется включать в файл. Подробности о работе с метаданными в Dockerfile можно прочитать здесь.

▍Инструкция ENV

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Инструкция ENV хорошо подходит для задания констант. Если вы используете некое значение в Dockerfile несколько раз, скажем, при описании команд, выполняющихся в контейнере, и подозреваете, что, возможно, вам когда-нибудь придётся сменить его на другое, его имеет смысл записать в подобную константу.

▍Инструкция RUN

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

▍Инструкция COPY

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

▍Инструкция ADD

Кроме того, документация предлагает везде, где это возможно, вместо инструкции ADD использовать инструкцию COPY для того, чтобы сделать файлы Dockerfile понятнее. Полагаю, команде разработчиков Docker стоило бы объединить ADD и COPY в одну инструкцию для того, чтобы тем, кто создаёт образы, не приходилось бы помнить слишком много инструкций.

▍Инструкция CMD

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Инструкция CMD предоставляет Docker команду, которую нужно выполнить при запуске контейнера. Результаты выполнения этой команды не добавляются в образ во время его сборки. В нашем примере с помощью этой команды запускается скрипт my_script.py во время выполнения контейнера.

Вот ещё кое-что, что нужно знать об инструкции CMD :

▍Ещё более сложный Dockerfile

Рассмотрим ещё один файл Dockerfile, в котором будут использованы некоторые новые команды.

Кроме того, пакеты Python в образ можно устанавливать с помощью pip, wheel и conda. Если речь идёт не о Python, а о других языках программирования, то при подготовке соответствующих образов могут использоваться и другие менеджеры пакетов.

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

▍Инструкция WORKDIR

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

▍Инструкция ARG

▍Инструкция ENTRYPOINT

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Пункт перехода в какое-то место

▍Инструкция EXPOSE

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Инструкция EXPOSE указывает на то, какие порты планируется открыть для того, чтобы через них можно было бы связаться с работающим контейнером. Эта инструкция не открывает порты. Она, скорее, играет роль документации к образу, средством общения того, кто собирает образ, и того, кто запускает контейнер.

▍Инструкция VOLUME

Как сделать docker image. Смотреть фото Как сделать docker image. Смотреть картинку Как сделать docker image. Картинка про Как сделать docker image. Фото Как сделать docker image

Инструкция VOLUME позволяет указать место, которое контейнер будет использовать для постоянного хранения файлов и для работы с такими файлами. Об этом мы ещё поговорим.

Итоги

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

Уважаемые читатели! Если вы пользуетесь Docker на практике, просим рассказать о том, как вы пишете Docker-файлы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *