背景
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
を使って設定する変数とは別のものである(慣れないと混乱しがち)。