thumbnail

docker-compose.ymlのbuild, imageオプション

2022/04/14

docker-compose.ymlのbuild, imageオプションは、それぞれ指定する、しないでdocker立ち上げ時のimage作成の挙動が異なります。

build, imageの挙動を理解してないとlocalのimageレジストリがどんどん膨らんでいく可能性があるので注意が必要です(レジストリはdocker imagesで確認できます)。

docker-compose.ymlのbuild, imageオプションに関して簡単に整理してみたので参考になれば幸いです。

build指定なし、image指定あり

imageが指定されている場合は、まずlocalに指定のimageがないかを探しに行きます。 localに指定のimageが見つからなかった場合はremote (DockerHub)からimageをpullします。

docker-compose.yml
version: '3.8'

services:
  node:
    image: node:16-alpine
    restart: always
    volumes:
      - .:/app
    working_dir: /app
    command: ['yarn', 'start']

build指定あり、image指定なし

buildで指定されたpathからimageを作成したあと、作成したimageは{project名}_{service名}としてlocalのプライベートレジストリに登録されます。

docker-compose.yml
version: '3.8'

services:
  node:
    build: path/to/Dockerfile # <- {project名}_nodeというimageが作成される
    restart: always
    volumes:
      - .:/app
    command: ['yarn', 'start']

project名やservice名が変わるごとに新しいimageがどんどん作られていくので、個人的にbuild名だけを指定することはあまりありません。

build指定あり、image指定あり

指定したimageがlocalになかった場合は、buildのpathをもとに新しくimageを作成します。 その後、作成したimageは指定したimage名としてプライベートレジストリに登録されます。

プライベートレジストリに登録された後は、各service間で同じimageを指定することで、自身がbuildしたimageでも以下のように共有して使用することができます。

docker-compose.yml
version: '3.8'

services:
  node1:
    build: path/to/Dockerfile # <- custom-node imageとしてbuildされる
    image: custom-node
    restart: always
    volumes:
      - .:/app
    command: ['yarn', 'start']

  node2:
    image: custom-node # <- buildされたcustom-node imageを使用する
    restart: always
    volumes:
      - .:/app
    command: ['yarn', 'start']
author picture

Mitsuru Takahashi

京都市内にてフリーランスエンジニアとして活動しています。

detail

Profile

author picture

Mitsuru Takahashi

京都市内にてフリーランスエンジニアとして活動しています。

detail

© 2022 mitsuru takahashi