В чем разница между 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 - это оболочка для командной строки докера, чтобы выиграть время и избежать строк длиной в 500 символов (а также запустить несколько контейнеров одновременно). Он использует файл с именем docker-compose.yml для получения параметров.
Вы можете найти ссылку на формат файла docker-compose здесь.
Таким образом, в основном docker-compose build будет читать ваш docker-compose.yml, искать все сервисы, содержащие инструкцию build: и запускать docker build для каждого из них.
Каждая build: может указывать Dockerfile, контекст и аргументы для передачи в Docker.
В заключение docker-compose.yml файла 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-compose build. Команда docker build будет выглядеть так:
docker build -t web_myproject -f Dockerfile-alpine ./web
docker-compose build создаст службы в файле docker-compose.yml.
https://docs.docker.com/compose/reference/build/
docker build создаст образ, определенный Dockerfile.
По сути, docker-compose - это лучший способ использования docker, чем просто команда docker.
Если здесь возникает вопрос: если команда сборки docker-compose создаст zip файл, содержащий несколько изображений, которые в противном случае были бы скомпилированы отдельно с обычным Dockerfile, то это неверное мышление.
Docker-compose build, создаст отдельные образы, перейдя в отдельную запись сервиса в docker-compose.yml.
С помощью команды docker images мы можем видеть, как сохраняются все отдельные изображения.
Настоящая магия состоит в том, чтобы составлять докер.
Этот в основном создаст сеть взаимосвязанных контейнеров, которые могут общаться друг с другом с именем контейнера, похожим на имя хоста.
Добавление к первому ответу...
Вы можете дать имя изображения и имя контейнера в соответствии с определением сервиса.
например, для службы под названием "web" в приведенном ниже примере docker-compose вы можете явно указать имя изображения и имя контейнера, чтобы docker не использовал значения по умолчанию.
В противном случае имя образа, которое будет использовать docker, будет объединением папки (Directory) и имени службы. например, myprojectdir_web
Поэтому лучше явно указать желаемое имя образа, которое будет сгенерировано при выполнении команды сборки docker.
например, изображение: 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