в docker, tips

Docker совет №31: Использование build и image в одном сервисе в docker-compose


Всем известно, что при запуске сервиса, описанного в 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 реджистри.

Добавить комментарий