Разница составляет сборка против запуск
Думайте об изображениях как о приложениях и контейнерах как о процессе, выполняющем приложение.Запуск приложения не меняет приложение.Запуск контейнера также не меняет изображение.Изображения создаются из Dockerfiles
с использованием docker build
и являются постоянными.Контейнеры создаются по мере необходимости docker run
, docker-compose
, kubernetes или аналогичными инструментами из изображений и предназначены для временного использования.
Dockerfile
используется командой docker build
для создания нового образа.В Dockerfile
в первой строке обычно указывается базовое изображение с FROM
, то есть FROM nginx
.Последующие строки RUN
в Dockerfile
предоставляют дополнительные шаги, которые docker build
будет выполнять в оболочке в контексте образа FROM
для создания нового образа.Обратите внимание, что Dockerfile
не указывает имя нового изображения.Вместо этого новому образу присваивается имя в параметре -t some/name
docker build
В файле docker-compose.yml
указывается группа изображений для совместной загрузки и запуска в рамках комбинированной службы.Например, docker-compose.yml
для блога может состоять из образа веб-сервера, образа приложения и образа базы данных и может указывать не только изображения, но и, возможно, способ их связи.
Поскольку сборка докера иdocker compose - это отдельные операции, нет конфликта или обнаружения различий.docker-compose.yml
контролирует то, что будет загружаться и запускаться, и вы также можете создавать все, что захотите.
Кроме того, как @David Maze упоминал в комментариях:
Если вы используете обе опции, то Docker Compose создаст изображение, как указано, и затем пометит его, используя image: name;это может сбивать с толку, если вы помещаете туда «стандартное» имя изображения.
Полагаю, что если вы сделаете это, у вас может получиться изображение, скажем nginx
, на вашем собственном компьютере, которое не соответствует изображению Dockerhub.Не делай этого.Вместо этого используйте уникальные имена для любых создаваемых вами изображений.