Docker
docker-compose

【Docker Compose】container_name ではなくて COMPOSE_PROJECT_NAME 変数を使うと良さそう


背景

docker-compose.yml 内で container_name を指定することで、コンテナ名を明示することができる。


docker-compose.yml

version: "3"

services:
web:
container_name: myapp_web
image: php:7.1-apache


上記 docker-compose.yml が置いてある場所で docker-compose up すると myapp_web という名前でコンテナが立ち上がる。

しかし、これでは名前の重複によって、同じコンテナを複数立ち上げることができない。


そこで COMPOSE_PROJECT_NAME 変数の出番

一方で container_name を指定しない場合、コンテナ名は自動的に「COMPOSE_PROJECT_NAME 変数 + _ + サービス名 + _ + 連番」となる。

つまり


docker-compose.yml

version: "3"

services:
web:
image: php:7.1-apache



.env

COMPOSE_PROJECT_NAME=myapp


のようにして docker-compose up を実行すると、自動的に myapp_web_1 という名前がつけられたコンテナが立ち上がってくれる。

コンテナ名を決める要素を .env に切り出せる、名前が機械的に決定される、という意味でもこの方法が好ましそう。


余談

この COMPOSE_PROJECT_NAME 変数はコンテナ内からは参照できない。

docker コマンドを叩くときの変数ではなく、docker-compose コマンド自体を叩くときの変数だからである。

なので docker-compose.yml 内で env_fileenvironmet を使って設定する変数とは別のものである(慣れないと混乱しがち)。


参考