В чем разница между docker-compose build
и docker build
?
Предположим, что в пути к документированному проекту есть docker-compose.yml
файл:
docker-compose build
И
docker build
В чем разница между docker-compose build
и docker build
?
Предположим, что в пути к документированному проекту есть docker-compose.yml
файл:
docker-compose build
И
docker build
Ответы:
docker-compose
может рассматриваться как оболочка для интерфейса командной строки докера (на самом деле это еще одна реализация на Python, как сказано в комментариях ), чтобы выиграть время и избежать строк длиной 500 символов (а также запустить несколько контейнеров одновременно). Он использует файл с именемdocker-compose.yml
для получения параметров.
Вы можете найти ссылку на Докер-Compose формат файла здесь .
Таким образом, в основном docker-compose build
будет читать ваш docker-compose.yml
, искать все службы, содержащие build:
оператор, и запускать docker build
для каждого из них.
Каждыйbuild:
может указать a Dockerfile
, контекст и аргументы для передачи докеру.
В заключение приведем пример docker-compose.yml
файла:
version: '3.2'
services:
database:
image: mariadb
restart: always
volumes:
- ./.data/sql:/var/lib/mysql
web:
build:
dockerfile: Dockerfile-alpine
context: ./web
ports:
- 8099:80
depends_on:
- database
При вызове docker-compose build
только web
цель будет нуждаться в построении изображения. Команда docker build
будет выглядеть так:
docker build -t web_myproject -f Dockerfile-alpine ./web
web
происходит от названия контейнера. myproject
- это имя папки, в которой вы находитесь. Это позволяет избежать конфликтов, если вы работаете над двумя проектами, в каждом из которых есть web
контейнер.
docker-compose.yml
изложенного выше, web
происходит от названия службы.
docker-compose build
создаст службы в docker-compose.yml
файле.
https://docs.docker.com/compose/reference/build/
docker build
создаст образ, определенный Dockerfile.
По сути, docker-compose - лучший способ использовать docker, чем просто команда docker.
Если вопрос здесь в том, будет ли команда сборки docker-compose build создавать zip-архив, содержащий несколько изображений, которые в противном случае были бы созданы отдельно с помощью обычного Dockerfile, то это неверное мнение.
Сборка Docker-compose будет создавать отдельные образы путем перехода к отдельной записи службы в docker-compose.yml.
С помощью команды docker images, мы также можем видеть все сохраняемые отдельные изображения.
Настоящая магия - это docker-compose up.
Это в основном создаст сеть взаимосвязанных контейнеров, которые могут взаимодействовать друг с другом с именем контейнера, аналогичным имени хоста.
Добавляем к первому ответу ...
Вы можете указать имя изображения и имя контейнера под определением службы.
например, для службы с именем 'web' в приведенном ниже примере создания докеров вы можете явно указать имя изображения и имя контейнера, чтобы докеру не нужно было использовать значения по умолчанию.
В противном случае имя изображения, которое будет использовать докер, будет объединением папки (каталога) и имени службы. например, myprojectdir_web
Поэтому лучше явно указать желаемое имя изображения, которое будет сгенерировано при выполнении команды docker build.
например, изображение: mywebserviceImage имя_контейнера: my-webServiceImage-Container
пример файла docker-compose.yml:
version: '3.2'
services:
web:
build:
dockerfile: Dockerfile-alpine
context: ./web
ports:
- 8099:80
image: mywebserviceImage
container_name: my-webServiceImage-Container
depends_on:
- database
build:
вы получите точное имя файла как Dockerfile
. Например, в build: ./web
.So использование context:
- это хорошо!
Несколько дополнительных слов о разнице между docker build
и docker-compose build
. Оба имеют возможность создавать изображения с использованием существующего изображения в качестве кеша слоев.
docker build
, опция--cache-from <image>
docker-composer
, cache_from
в build
разделе есть тег .К сожалению, до сих пор на этом уровне изображения, созданные одним из них, несовместимы с другим в качестве кеша слоев ( идентификаторы несовместимы ). Однако в docker-compose
v1.25.0 (2019-11-18) представлена экспериментальная функция COMPOSE_DOCKER_CLI_BUILD, которая docker-compose
использует собственный конструктор докеров (поэтому изображения, созданные с помощью, docker build
могут использоваться в качестве кеша слоев для docker-compose build
)