てくなべ (tekunabe)

ansible / network automation / 学習メモ

docker-compose.yml の内容を上書きする docker-compose.override.yml

はじめに

最近、netbox-docker の README.md を見て知ったのですが、docker-compose.yml の内容を上書きする docker-compose.override.yml というファイルがあるそうです。

docker-compose.yml はそのままのこしておき、docker-compose.override.yml でカスタマイズするのに便利そうです。

公式ドキュメントにも記載がありました。

docs.docker.jp

netbox-docker の README.md の例で試してみます。

docker-compose.yml 単品の場合

nginx を抜粋すると以下の通りです。

  # nginx
  nginx:
    command: nginx -c /etc/netbox-nginx/nginx.conf
    image: nginx:1.19-alpine
    depends_on:
    - netbox
    ports:
    - 8080
    volumes:
    - netbox-static-files:/opt/netbox/netbox/static:ro
    - netbox-nginx-config:/etc/netbox-nginx/:ro

これを docker-compose up -d で起動したあと、確認します。

$ docker-compose ps
            Name                           Command               State                Ports             
--------------------------------------------------------------------------------------------------------
netbox-docker_netbox-worker_1   python3 /opt/netbox/netbox ...   Up                                     
netbox-docker_netbox_1          /opt/netbox/docker-entrypo ...   Up                                     
netbox-docker_nginx_1           /docker-entrypoint.sh ngin ...   Up      80/tcp, 0.0.0.0:49153->8080/tcp
netbox-docker_postgres_1        docker-entrypoint.sh postgres    Up      5432/tcp                       
netbox-docker_redis-cache_1     docker-entrypoint.sh sh -c ...   Up      6379/tcp                       
netbox-docker_redis_1           docker-entrypoint.sh sh -c ...   Up      6379/tcp                       

抜粋すると、以下の通り、49153 が開放されました。

netbox-docker_nginx_1           /docker-entrypoint.sh ngin ...   Up      80/tcp, 0.0.0.0:49153->8080/tcp

ただ、先程の docker-compose.yml ですと、docker-compose up のたびにポートが変わってしまい、たとえば、

netbox-docker_nginx_1           /docker-entrypoint.sh ngin ...   Up      80/tcp, 0.0.0.0:49154->8080/tcp

となってしまい不便です。

docker-compose.override.yml で上書きする

そこで docker-compose.override.yml で上書きして起動する方法を試します。

まず、以下の内容の docker-compose.override.yml を用意します。

version: '3.4'
services:
  nginx:
    ports:
      - 8000:8080
EOF

この状態で docker-compose up -d で起動したあと、確認します。

$ docker-compose ps
            Name                           Command               State                           Ports                         
-------------------------------------------------------------------------------------------------------------------------------
netbox-docker_netbox-worker_1   python3 /opt/netbox/netbox ...   Up                                                            
netbox-docker_netbox_1          /opt/netbox/docker-entrypo ...   Up                                                            
netbox-docker_nginx_1           /docker-entrypoint.sh ngin ...   Up      80/tcp, 0.0.0.0:8000->8080/tcp,0.0.0.0:49153->8080/tcp
netbox-docker_postgres_1        docker-entrypoint.sh postgres    Up      5432/tcp                                              
netbox-docker_redis-cache_1     docker-entrypoint.sh sh -c ...   Up      6379/tcp                                              
netbox-docker_redis_1           docker-entrypoint.sh sh -c ...   Up      6379/tcp  

今度は 8000 も開放されました。「も」なのでマージ的な動作なのでしょうか。