2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ラクスAdvent Calendar 2024

Day 13

docker compose override入門

Last updated at Posted at 2024-12-12

docker compose overrideについて、概要と使用例を載せていく

リポジトリ:https://github.com/tkeshun/docker_compose_override

docker compose overrideとは

複数のcomposeファイルをマージして、1つのcomposeファイルを作る方法。

環境固有のものや、dev・stagging・production(docker-composeをプロダクション環境で使うことはありえないが)など設定をわけることができる。

デフォルトではcompose.ymlcompose.override.ymlの2つに分けられる
マージは-fオプションで行うことができる
マージ結果がみたいときは、docker compose -f ファイル名 -f ファイル名 configでみれる。
マージしたcomposeファイルで起動したい場合はdocker compose -f ファイル名 -f ファイル名 upでOK。
ちなみに3ファイル以上でもマージできる。あとに指定したファイルで上書きされていく。
以下に例を示す。

2つのファイルをマージする

  • compose.yml(マージされるファイル)
$ cat compose.yml 
services:
  app:
    image: my-app:latest
    ports:
      - "3000:3000"
  • compose.override.yml(マージするファイル)
$ cat compose.override.yml 
services:
  app:
    environment:
      - NODE_ENV=development
    volumes:
      - ./src:/app/src
  • マージ後(compose.ymlにcompose.override.ymlをマージする)
$ docker compose -f compose.yml -f compose.override.yml config
name: docker_compose_override
services:
  app:
    environment:
      NODE_ENV: development
    image: my-app:latest
    networks:
      default: null
    ports:
      - mode: ingress
        target: 3000
        published: "3000"
        protocol: tcp
    volumes:
      - type: bind
        source: /home/shun/workspace/docker_compose_override/src
        target: /app/src
        bind:
          create_host_path: true
networks:
  default:
    name: docker_compose_override_default

※補足:書かれてないのに増えている項目は、マージによって生成されるものではなくデフォルト設定である。
通常は暗黙的に設定される項目が、configでyamlを出力するとみることができる。
そのため、以下のようにcompose.ymlだけ指定してconfigを出力してみると暗黙に設定される項目をみることができる。

$ docker compose -f compose.yml config
name: docker_compose_override
services:
  app:
    image: my-app:latest
    networks:
      default: null
    ports:
      - mode: ingress
        target: 3000
        published: "3000"
        protocol: tcp
networks:
  default:
    name: docker_compose_override_default

networks以下が暗黙的にされる項目。

マージルール

マージルールの一部を紹介

同じキーを指定すると上書きされる

$ cat value.yml 
services:
  app:
    image: my-app:1.0
$ cat value.override.yml 
services:
  app:
    image: my-app:2.0
$ docker compose -f value.yml -f value.override.yml config
name: example2
services:
  app:
    image: my-app:2.0
    networks:
      default: null
networks:
  default:
    name: example2_default

同じキーの中で違うキーを指定するとマージされる

$ cat onaji-key.yaml 
services:
  app:
    image: my-app:1.0
    environment:
      NODE_ENV: production
$ cat onaji-key.override.yml 
services:
  app:
    environment:
      DEBUG: true
$ docker compose -f onaji-key.yaml -f onaji-key.override.yml config
name: example3
services:
  app:
    environment:
      DEBUG: "true"
      NODE_ENV: production
    image: my-app:1.0
    networks:
      default: null
networks:
  default:
    name: example3_default

リストはマージされる

$ cat list.yml 
services:
  app:
    image: my-app:1.0
    environment:
    - production
$ cat list.override.yml 
services:
  app:
    environment:
    - dev
$ docker compose -f list.yml -f list.override.yml config 
name: example4
services:
  app:
    environment:
      dev: null
      production: null
    image: my-app:1.0
    networks:
      default: null
networks:
  default:
    name: example4_default

あとのファイルでnullを指定すると値の削除ができる

$ cat compose.yml 
services:
  app:
    image: my-app:1.0
    environment:
      - APP_ENV=production
      - DEBUG=true
$ cat compose.override.yml 
services:
  app:
    environment:
      DEBUG: null
$ docker compose -f compose.yml -f compose.override.yml config
name: poc-docer-override
services:
  app:
    environment:
      APP_ENV: production
    image: my-app:1.0
    networks:
      default: null
networks:
  default:
    name: poc-docer-override_default

まとめ

composeファイルのオーバーライド、マージについてまとめた。
実用例でいうと、複数のDBを使う場合やバージョンによって初期化SQLなどが違う場合はイメージを固めておいて、compose..db.ymlなどにしてimageキーの値を上書きすると便利なのではないかと思う。
記事を見た人は是非活用してほしい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?