В чем разница между 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