Docker совет №31: Использование build и image в одном сервисе в docker-compose
Jul 19, 2018 07:06 · 176 words · 1 minute read
Всем известно, что при запуске сервиса, описанного в docker-compose.yaml
, можно скачать готовый образ из docker-registry (указав image:
) или собрать образ из существующего Dockerfile
(указав build:
). Но что случится, если указать обе инструкции?
Если в вашем конфигурационном файле docker-compose.yaml
в описании сервиса указана инструкция build: "."
, то при вызове команды docker-compose build
или docker-compose up
будет собран docker-образ согласно инструкциям в Dockerfile
, расположенном в том же каталоге.
Если же в описании сервиса будет написано например image: "postgres:10.3-alpine"
, то соответствующий образ будет скачан из Docker Hub при вызове команды docker-compose up
или docker-compose pull
.
Но что произойдет, если в вашем docker-compose.yaml
написано примерно следующее:
...
db:
build: "."
image: "ealebed/myimage:1.0"
...
Это неочевидно, но в данном случае docker-образ будет собран как описано в Dockerfile
, находящимся в том же каталоге, но вместо COMPOSE_PROJECT_NAME
(или имени каталога, в котором находится docker-compose.yaml
) + имени сервиса собранному образу будет присвоено имя, указанное в свойстве image:
. В примере выше - образ будет собран и протэгирован как ealebed/myimage:1.0
- это позволит быстро запушить данный образ на Docker Hub или в любой другой docker реджистри.