ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Среда, 18 декабря, 2024

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). Образ — это просто шаблон для запущенных контейнеров, состоящий из нескольких слоев только для чтения. Поскольку это статья не об образах контейнеров, мы воздержимся от излишних разъяснений по этой теме.

Чтобы создать образ из этого 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"

 

Сохраните файл как 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"

 

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

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

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

Exit mobile version