Как использовать Dockerfile для сборки образа Docker |
![]() |
Добавил(а) microsin |
Dockerfile это текстовый файл с инструкциями, которые используются для автоматизации инсталляции и конфигурации образа Docker. Файлы Dockerfile упрощают развертывание нескольких контейнеров Docker между несколькими виртуальными машинами без необходимости поддерживать одинаковый образ Docker. Инструкции выполняются в порядке, в каком они появляются в Dockerfile, что делает их использование и обновление понятной и интуитивной. В этой статье (перевод документации [1]) даны базовые понятия о том, как работает Dockerfile. Перед тем, как начать изучение этого материала вам необходимо установить Docker (на Ubuntu это делается простой командой sudo apt install docker.io) и ознакомиться с основными командами docker [3]. [Как работает Dockerfile] Dockerfile это скрипт, который содержит различные команды и действия для сборки образа Docker, который можно затем использовать для развертывания контейнера Docker. Команды и информация в Dockerfile может конфигурироваться для использования специфических версий программ и зависимостей для достижения стабильных инсталляций. Вы также можете использовать реестр (Docker registry) для сохранения образов Docker и публичного (или приватного) к ним доступа. Как только Dockerfile написан и отлажен, вы можете использовать команду docker build для генерации образа Docker на основе инструкций в Dockerfile. Затем вы можете развернуть контейнер на основе этого образа, используя команды наподобие docker run или docker create. Ниже даны общие инструкции, которыми вы можете использовать свои Dockerfile для сборки образов. Базовые определения FROM: определение базового образа, такого как ubuntu или debian, используемого для запуска процесса сборки. Требуется для каждого Dockerfile. Переменные ENV: устанавливает переменные окружения, которые сохраняющиеся при развертывании контейнера. Выполнение команды RUN: выполняет команды, такие как команды установки пакета, на новом слое образа. Замечание: каждая из команд RUN, CMD и ENTRYPOINT может выполняться в форме shell, принимая обычные аргументы, или в форме exec, принимая аргументы из массива JSON. Поскольку форма exec не вовлекает command shell, то она обычно является предпочтительной и используется в данном руководстве. Управление данными ADD: копирует файлы из источника в файловую систему образа, в заданное место назначения, с автоматической обработкой tarball и remote URL. Сетевые коммуникации (Networking) EXPOSE: откроет определенный порт для разрешения сетевого обмена между контейнером и внешним миром. Далее мы рассмотрим пример создания Dockerfile, который использует некоторые эти команды. [Создание Dockerfile] Для создания Dockerfile: 1. В командной строке (либо сеанс SSH, либо терминал bash), создайте новый каталог и перейдите в него: $ mkdir ~/mydockerbuild && cd ~/mydockerbuild Замечание: это поместит директорию сборки Docker в вашу домашнюю директорию. Хорошее правило - не храните Dockerfile в самой домашней директории или корневой директории сервера. Вместо этого создайте отдельную директорию, и поместите туда необходимые файлы (такие как Dockerfile для нашего примера), как и сделано в этом руководстве (папка mydockerbuild). 2. Создайте Dockerfile: $ touch example_dockerfile 3. Откройте Dockerfile, используя текстовый редактор, который вы предпочитаете (в этом примере используется nano): $ nano example_dockerfile 4. Вставьте в файл example_dockerfile следующий текст: FROM debian MAINTAINER Jane Doe jdoe@example.com CMD ["echo", "Hello, Sunshine!"] 5. Сохраните example_dockerfile. Командой cat example_dockerfile убедитесь в надлежащем содержимом файла. [Сборка образа Docker из Dockerfile] Сборка образа из Dockerfile происходит командой docker build: $ docker build ~/mydockerbuild -f example_dockerfile -t example_image Пометкой example_image нашего образа упрощается развертывание контейнера на следующем шаге. Вывод этой команды должен выглядеть примерно так: Sending build context to Docker daemon 4.096kB Step 1/3 : FROM debian ---> 4a7a1f401734 Step 2/3 : MAINTAINER Jane Doe jdoe@example.com ---> Running in fdd81bd8b5c6 Removing intermediate container fdd81bd8b5c6 ---> 1253842068a3 Step 3/3 : CMD ["echo", "Hello, Sunshine!"] ---> Running in d33e1bacf1af Removing intermediate container d33e1bacf1af ---> a5d95e138b97 Successfully built a5d95e138b97 Successfully tagged example_image:latest Как вы можете видеть, инструкции из example_dockerfile были выполнены в указанном порядке. Образ с меткой example_image готов теперь для запуска, чтобы развернуть контейнер. [Запуск образа Docker для развертывания контейнера] Запуск образа, который был только что собран, чтобы развернуть контейнер Docker, теперь делается простой командой: $ docker run example_image После этого разворачивается новый контейнер, основанный на example_image, и выполняется команда, указанная в инструкции CMD. В результате в консоли контейнера мы увидим следующий вывод: Hello, Sunshine! Замечание: если команда docker run выполнилась, и образ Docker недоступен в текущей директории, то вместо этого он извлекается (pulled) из реестра Docker. Поздравляем! Вы собрали свой первый Dockerfile, и запустили ваш первый образ Docker. Для других примеров и информации по использованию файлов Dockerfile с образами Docker и контейнерами, просмотрите следующие материалы: - How to Use Docker Images, Containers, and Dockerfiles in Depth. По теме Dockerfile, образов и контейнеров Docker вы можете также обратиться к следующим ресурсам: - Best Practices for Writing Dockerfiles. [Ссылки] 1. How to Use a Dockerfile to Build a Docker Image site:linode.com. |