■プロジェクト名の指定
■プロジェクト名を指定しない場合の問題
例えば eccube4/code フォルダ内でECCubeを起動すると、以下のようになる
つまり、フォルダ名である code をプレフィックスとして、各ボリュームが作られる
$ docker volume ls
DRIVER VOLUME NAME
local code_mailcatcher-data
local code_mysql-database
local code_node_modules
local code_pg-database
local code_var
local code_vendor
local docker_compose_mysql_data
コンテナ名も、フォルダ名である code をプレフィックスとして作られる
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------------------------
code_ec-cube_1 docker-php-entrypoint apac ... Up 0.0.0.0:443->443/tcp,:::443->443/tcp,
0.0.0.0:80->80/tcp,:::80->80/tcp
code_mailcatcher_1 mailcatcher --no-quit --fo ... Up 0.0.0.0:1025->1025/tcp,:::1025->1025/tcp,
0.0.0.0:1080->1080/tcp,:::1080->1080/tcp
code_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:13306->3306/tcp,:::13306->3306/tcp, 33060/tcp
code_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:15432->5432/tcp,:::15432->5432/tcp
この状態で例えば myshop/code 内で別案件用にECCubeを起動すると、
やはりプレフィックスは code になる
つまり eccube4/code 内のECCubeと myshop/code 内のECCubeで、データベースなどは共通のものが参照されてしまう
■プロジェクト名の指定
dockerでプロジェクト名を指定する - Qiita
https://qiita.com/reflet/items/b7b384d202a9f5514fb3
Docker Compose の -p オプションで VS Code でのコンテナ管理を便利にする / Twin Turbo Computing
https://tt-computing.com/docker-project-vscode
通常以下のようにして起動するが、
$ docker-compose up -d
以下のようにして起動&終了すると、プロジェクト名を指定して起動できる
(終了時も同様に指定する必要があるので注意)
$ docker-compose -p myshop up -d
$ docker-compose -p myshop down
「-p プロジェクト名」もしくは「--project-name プロジェクト名」とする
これで以下のように、プロジェクト名をプレフィックスとして各ボリュームが作成される
$ docker volume ls
DRIVER VOLUME NAME
local code_mailcatcher-data
local code_mysql-database
local code_node_modules
local code_pg-database
local code_var
local code_vendor
local docker_compose_mysql_data
local myshop_mailcatcher-data
local myshop_mysql-database
local myshop_node_modules
local myshop_pg-database
local myshop_var
local myshop_vendor
コンテナ名もプロジェクト名をプレフィックスとして作られるため、一例だが以下のように接続する
$ docker container exec -it myshop_ec-cube_1 bash
$ docker container exec -it myshop_mysql_1 bash
ただし、DockerデスクトップをGUIで起動した場合など、プロジェクト名の指定が困難な場合がある
また単純に、プロジェクト名を付け忘れると意図しない挙動になる可能性がある
よってそもそもプロジェクト名を指定しなくてもいいように、
以下のように「docker-compose.yml はプロジェクトごとのフォルダ直下に置く」とするのが無難そうではある
docker/project1/docker-compose.yml
docker/project2/docker-compose.yml
docker/project3/docker-compose.yml
docker-compose.ymlはプロジェクトRoot直下に置くか、Dir名を工夫しよう | DevelopersIO
https://dev.classmethod.jp/articles/docker-compose-yml-dir/