背景
docker-compose.yml 内で container_name を指定することで、コンテナ名を明示することができる。
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 変数 + _ + サービス名 + _ + 連番」となる。
つまり
version: "3"
services:
web:
image: php:7.1-apache
COMPOSE_PROJECT_NAME=myapp
のようにして docker-compose up を実行すると、自動的に myapp_web_1 という名前がつけられたコンテナが立ち上がってくれる。
コンテナ名を決める要素を .env に切り出せる、名前が機械的に決定される、という意味でもこの方法が好ましそう。
余談
この COMPOSE_PROJECT_NAME 変数はコンテナ内からは参照できない。
docker コマンドを叩くときの変数ではなく、docker-compose コマンド自体を叩くときの変数だからである。
なので docker-compose.yml 内で env_file や environmet を使って設定する変数とは別のものである(慣れないと混乱しがち)。