docker
и docker-compose
, похоже, взаимодействуют с одним и тем же файлом dockerFile, в чем разница между этими двумя инструментами?
В чем разница между докером и докером?
Ответ 1
docker
cli используется при управлении отдельными контейнерами на движке докеров. Командная строка клиента получает доступ к демону docker api.
docker-compose
cli может использоваться для управления многоконтейнерным приложением. Он также перемещает многие параметры, которые вы вводите в docker run
cli в файл docker-compose.yml
для более простого повторного использования. Он работает как передний конец "script" поверх той же докеры api, используемой docker
, поэтому вы можете делать все docker-compose
с помощью команд docker
и много сценариев оболочки. Подробнее см. эту документацию по компоновке docker.
Обновление для режима Swarm
Поскольку этот ответ был отправлен, докер добавил второе использование файлов docker-compose.yml. Начиная с версия 3 yml format и docker 1.13, вы можете использовать yml с компоновкой docker, а также определить стек в режиме роуминга докеров. Чтобы сделать последнее, вам нужно использовать docker stack deploy -c docker-compose.yml $stack_name
вместо docker-compose up
, а затем управлять стеком командами docker
вместо команд docker-compose
. Отображение является одним для одного между двумя видами использования:
- Compose Project → Swarm Stack: группа услуг для определенной цели
- Составить сервис → Услуга рой: одно изображение и его конфигурация, возможно, увеличена.
- Составить контейнер → Задача Рой: один контейнер в сервисе
Подробнее о режиме рой см. в документации режима роуминга докеров.
Ответ 2
docker
управляет отдельными контейнерами
docker-compose
управляет несколькими контейнерными приложениями
Использование docker-compose требует 3 шага:
- Определите среду приложения с помощью Dockerfile
- Определите сервисы приложения в docker-compose.yml
- Запустите
docker-compose up
чтобы запустить и запустить приложение
Ниже приведен пример docker-compose.yml, взятый из документации docker:
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Ответ 3
Я всегда вижу docker-compose, предназначенный для использования в нескольких контейнерах
Мне кажется, что это так же полезно для отдельного контейнера, так как оно кодирует то, что может быть очень длинной командой, отправляемой в Docker run
Я не видел никакой документации, рекомендующей docker-compose.yml с одним определенным контейнером.
Я упускаю причину, чтобы предпочесть подход cli для помещения аргументов в docker-compose.yml?
Спасибо Кент