В чем разница между докером и докером?

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 шага:

  1. Определите среду приложения с помощью Dockerfile
  2. Определите сервисы приложения в docker-compose.yml
  3. Запустите docker-compose up чтобы запустить и запустить приложение

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?

Спасибо Кент