在Docker中尝试重复使用项目名称和服务名称
首先
-
- Dockerで、Dockerfileとかdocker-compose.ymlを使いまわしていると、どこまでプロジェクト名やサービス名を変える必要があるのだろうと不安になりました。
-
- なので、プロジェクト名やサービス名を被らせて、どこまでちゃんと動くか調べました。
-
- Reactプロジェクトを使っています。
- プロジェクト名とサービス名については、以下を参考
如果项目名称不同
请分别创建名为”react-app1″和”react-app2″的项目。


运行”docker compose up –build -d”将产生以下结果。

-
- プロジェクト名を変えると、完璧に動く
-
- ちゃんと違うプロジェクトとしてDockerが認識してくれる
-
- ただ、ホスト側のポート番号は変える必要がある
ports: “3000:3000” と ports: “3002:3000”
サービス名を同じにしても大丈夫
如果是相同的项目名称和相同的服务名称
-
- 次は、同じプロジェクト名で、同じサービス名で実験しました。
-
- 「あプロジェクト」「いプロジェクト」を作ります。
-
- サービス名は、docker-compose.ymlで定義するものです。
- プロジェクト名を、react-appにしました。


# docker-compose.yml
version: "3"
services:
react-app: #同じサービス名!!!!
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3000:3000"
<div className="App">
<h1>「あ プロジェクト」</h1>
</div>
这个项目
# docker-compose.yml
version: "3"
services:
react-app: #同じサービス名!!!!
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3002:3000"
<div className="App">
<h1>「い プロジェクト」</h1>
</div>
开始「a项目」
docker compose up –build -d
→コンテナの立ち上がり成功
localhost:3000→「あプロジェクト」が表示された

启动“い项目”。
docker compose up –build -d
→「いプロジェクト」は立ち上がったが、「あプロジェクト」が廃棄された
localhost:3000→アクセス不可
localhost:3002→「いプロジェクト」が表示された
イメージは、と、react-app-react-app:latest が作成された
「あプロジェクト」のイメージ名は、に変更されていた

結果或終點。
-
- イメージもコンテナも、後からビルドした「いプロジェクト」に乗っ取られた
- 同じプロジェクト名で、同じサービス名は一つしか作成できない
如果是相同的项目名称,但服务名称不同的情况
这次,我尝试将同一个项目名称改为不同的服务名称。

这个项目
# docker-compose.yml
version: "3"
services:
a-app: #サービス名をa-app
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3000:3000"
这个项目
# docker-compose.yml
version: "3"
services:
i-app: #サービス名をi-app
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3002:3000"
使用 Docker Compose 构建并启动该项目。

使用Docker Compose构建并启动项目。

虽然站起来了,但受到了注意
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
time="2023-08-09T16:01:33+09:00" level=warning msg="Found orphan containers ([react-app-react-app-1]) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up."
-
- localhost:3000→「あプロジェクト」が表示された
- localhost:3002→「いプロジェクト」が表示された
看到这个画面时,可以清晰地看到每个人都做出了自己的形象。

總結
-
- 同じプロジェクト名で、違うサービス名にすると、ちゃんと立ち上がる
-
- でも、同じプロジェクトとして認識されてしまい、関連のあるコンテナと思われてしまう
- 同じプロジェクト名にするのは、よくない!!!
如果主机端口相同
端口:主机端口是容器端口。
即使容器端口相同也没有问题。
这是因为容器是独立的,问题在于主机端口。
一个项目
# docker-compose.yml
version: "3"
services:
a-app:
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3000:3000" #同じ
这个项目
# docker-compose.yml
version: "3"
services:
i-app:
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3000:3000" #同じ
使用docker compose up –build -d命令,启动项目A。
使用docker compose up –build -d命令,启动项目B。
出现错误。
Error response from daemon: driver failed programming external connectivity on endpoint react-app-i-app-1 (db68ac6f7ebfeacd3f3880f4e1afc03f88d2ba4f302e90d6391cc497aafb7fcf): Bind for 0.0.0.0:3000 failed: port is already allocated
只要构建“i项目”,就没有问题。
换句话说,如果只启动其中一个容器,也会顺利进行。

最后的结论
-
- プロジェクト名は必ず変更する必要がある
-
- サービス名は同じでも大丈夫
-
- ホスト側のportは、変更を推奨
-
- コンテナ側のportは変更する必要はない
- Dockerfileは、全く同じで問題ない
汇总应该在使用Docker时进行更改的地方。

# docker-compose.yml
version: "3"
services:
react-app:
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3000:3000"
以后创建第二次及以后时

# docker-compose.yml
version: "3"
services:
react-app: #変更しなくて大丈夫!!!
build: .
volumes:
- ./:/usr/src/app
command: npm start
ports:
- "3002:3000" #"3002(こっちは被らないようにする):3000"