Следует ли избегать `docker run`, чтобы запустить образ, созданный с помощью` docker-compose`? - PullRequest
0 голосов
/ 16 октября 2019

Я проверил SO, но не смог найти исчерпывающий ответ.

Мой docker-composer.yml определяет несколько вещей, включая тома

app:
    volumes:
        - "./:/app"
    ...

Если яиспользуйте docker run для создания экземпляра изображения, тогда мне нужно будет указать снова те же тома , указанные в docker-compose.yml.

docker run -v "./:/app"

То может быть желательным для некоторых случаев использования, но в целом, имея одно и то же определение, указанное в 2 разных местах, на самом деле не поддерживается (или очевидно для будущих разработчиков). Я хотел бы избежать определения одной и той же конфигурации в разных местах (один для docker-compose и один в качестве аргументов для docker run).

Можно ли утверждать, что при настройке volume (или другие параметры) внутри docker-compose.yml, тогда, чтобы иметь их, изображение должно запускаться через docker-compose up, а не docker run -v redundant:volume:specification?

Примечание: Я спрашиваю о лучших практиках больше, чем личные мнения.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вы должны думать о docker-compose.yml как об очень специализированном сценарии оболочки, который запускает docker run для вас. Неплохая идея - попытаться свести к минимуму количество необходимых монтирований и опций (например, не связывать код монтирования поверх кода в вашем образе), но также не рекомендуется, чтобы сказать: «это возможно только через этот docker-compose.yml файл ".

Также учтите, что существуют другие способы запуска контейнера с различными синтаксисами. И Кубернетес , и Кочевник Хашикорпа имеют очень различных синтаксиса и не могут повторно использовать docker-compose.yml. Если вы запускаете образ в другом контексте, вам в любом случае придется переписать эту конфигурацию.

В ограниченных областях - «для этого проекта разработки, в этой среде, в этом конкретном репозитории» - этоДостаточно разумно сказать, что «стандартный способ запустить это со стандартными опциями - через docker-compose up», но все же возможно запустить образ по-другому, если вам нужно.

0 голосов
/ 16 октября 2019

В общем случае один должен полагаться на docker-compose, как только начнет его использовать, поскольку простое использование docker <cmd> может пропустить некоторые настройки и дать неожиданные результаты (особенно, если вы только что попали в проект и неуверенность в этом).

Выполнение изображений с docker run приведет к следующим недостаткам:

  • необходимость запомнить добавление возможных параметров при каждом запуске , которые вместо этого подразумеваются с docker-compose
  • даже при запоминании или использовании bash-скрипта, вызывающего docker run с правильными параметрами, будущие изменения этих параметров должны быть отраженыв двух разных местах. Это не очень легко обслуживаемо и подвержено ошибкам .
  • возможные другие коррелированные изображения не будут запускаться , и нужно помнить, что запускать их вручную;или добавьте их в сценарий, снова заканчивая определением в двух разных местах.

Однако, для более широкого обзора, учитывая других бегунов (k8s), проверьте ответ Дэвида Мазе .

...