Логотип

Docker File против Docker Compose. В чем разница

Docker File против Docker Compose. В чем разница

Многие люди путают Dockerfile и Composefile. Это в первую очередь потому, что оба они используются для некоторого изменения образа Docker, хотя это технически некорректно.

Эти два термина легко спутать, но также необходимо понимать разницу при разговоре с коллегой или вашим (потенциальным) работодателем.

Dockerfile — это то, что используется для создания образа контейнера, а файл Compose — это то, что используется для развертывания экземпляра этого образа в качестве контейнера.

Позвольте нам остановиться подробнее, чтобы вы правильно поняли разницу между Docker Compose и Dockerfile.

 

Что такое Dockerfile?

Нам нравится называть Dockerfile предшественником образа контейнера. Вы создаете образ из Dockerfile. Типичным Dockerfile содержит специальные инструкции по сборке, такие команды, как RUN, ADD, COPY, ENTRYPOINT и т.д.

Вот пример:

FROM alpine:latest

RUN apk add --no-cache fortune

ENTRYPOINT ["fortune"]

 

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

from alpine:latest

run apk add --no-cache fortune

entrypoint ["fortune"]

 

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

Читать  Установка и настройка Webmin для удаленного и графического управления серверами Linux

Чтобы создать образ из этого Dockerfile, используя интерфейс командной строки docker, выполните следующую команду:

docker build -t fortune:alpine

 

Это создаст изображение с тегами fortune:alpine. Мы пока не собираемся создавать контейнер из этого изображения, это для следующего раздела.

 

Что такое Composefile?

Composefile используется в двух типах развертываний: в некластерном развертывании с помощью docker-compose и кластерном развертывании с docker swarm.

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

Компоновка файлов — это часть инструмента, называемого docker-compose. Это клиентское приложение для сервера демона докеров, что-то вроде docker клиента CLI, но вместо того, чтобы каждый раз запускать все команды docker-compose, вы можете повторно использовать один и тот же файл YAML снова и снова и развертывать один и тот же контейнер с тем же конфигурация, как и в первый раз.

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

Поддержка файла Compose будет частью клиента докеров по умолчанию, который написан на Go в качестве аргумента командной строки «docker compose». Обратите внимание на отсутствующий дефис. Это все еще экспериментально, поэтому в производстве по-прежнему рекомендуется использовать версию Python, т.е. docker-compose.

Давайте возьмем предыдущий образ и развернем его, используя файл набора.

version: "3.3"

services:
    fortune:
        image: "fortune:alpine"

 

Читать  Как установить MySql Workbench в Ubuntu

Сохраните файл как docker-compose.yml. Теперь запустите в том же каталоге следующую команду

docker-compose up

 

Вы не должны сохранить файл как docker-compose.yml, вы можете сохранить его, как вам нравится, но если это не так, docker-compose.yml или docker-compose.yaml, убедитесь, что вы используете опцию -f [FILENAME].

docker-compose -f docker-compose.yml up

 

Подождите и посмотрите, что произойдет.

Что такое файл стека?

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

Вы можете повторно использовать предыдущий файл композиции непосредственно как файл стека.

Сначала инициализируйте кластер.

docker swarm init

 

Затем запустите команду, подобную следующей

docker stack deploy -c docker-compose.yml fortune

 

При таком развертывании необходимо проверить вывод, просмотрев журналы службы с помощью docker service logs ….

 

Подведение итогов

Файлы Dockerfiles и Compose служат разным целям. Если бы я мог построить график, это выглядело бы примерно так

Dockerfile -> Docker Image -> Compose File -> Running Containers

 

Есть еще одна причина, по которой новичков путают с этими двумя файлами. На файл Dockerfile можно указать через файл Compose, а затем вы можете использовать docker-compose для создания образа.

Например, вы можете переписать предыдущий файл композиции, чтобы

version: "3.3"

services:
    fortune:
        build:
            context: '.'
            dockerfile: "./Dockerfile"
        image: "fortune:alpine"

 

Читать  Списки контроля доступа в Ubuntu

Теперь вы можете запустить создание образа docker-compose build. Или вы также можете запустить сборку docker-compose up —build и сразу запустить контейнер.

Здесь файл Dockerfile передается через файл компоновки, и на первый взгляд может показаться, что это файл компоновки, который отвечает за создание образа, но это не так.

Мы надеемся, что эта статья прояснила, в чем разница между файлом Dockerfile и файлом Compose. Если у вас есть какие-либо вопросы, дайте нам знать в разделе комментариев ниже.

Редактор: AndreyEx

Рейтинг: 4.5 (107 голосов)
Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала