在Docker中尝试重复使用项目名称和服务名称

首先

    • Dockerで、Dockerfileとかdocker-compose.ymlを使いまわしていると、どこまでプロジェクト名やサービス名を変える必要があるのだろうと不安になりました。

 

    • なので、プロジェクト名やサービス名を被らせて、どこまでちゃんと動くか調べました。

 

    • Reactプロジェクトを使っています。

 

    プロジェクト名とサービス名については、以下を参考

 

如果项目名称不同

请分别创建名为”react-app1″和”react-app2″的项目。

プロジェクト名1.png
プロジェクト名2.png

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

Untitled.png
    • プロジェクト名を変えると、完璧に動く

 

    • ちゃんと違うプロジェクトとしてDockerが認識してくれる

 

    • ただ、ホスト側のポート番号は変える必要がある

ports: “3000:3000” と ports: “3002:3000”

サービス名を同じにしても大丈夫

如果是相同的项目名称和相同的服务名称

    • 次は、同じプロジェクト名で、同じサービス名で実験しました。

 

    • 「あプロジェクト」「いプロジェクト」を作ります。

 

    • サービス名は、docker-compose.ymlで定義するものです。

 

    プロジェクト名を、react-appにしました。
プロジェクト名.png
プロジェクト名.png
# 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→「あプロジェクト」が表示された

Untitled (1).png

启动“い项目”。

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

Untitled (2).png

結果或終點。

    • イメージもコンテナも、後からビルドした「いプロジェクト」に乗っ取られた

 

    同じプロジェクト名で、同じサービス名は一つしか作成できない

如果是相同的项目名称,但服务名称不同的情况

这次,我尝试将同一个项目名称改为不同的服务名称。

プロジェクト名.png

这个项目

# 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 构建并启动该项目。

Untitled (3).png

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

Untitled (4).png

虽然站起来了,但受到了注意

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→「いプロジェクト」が表示された

看到这个画面时,可以清晰地看到每个人都做出了自己的形象。

Untitled (5).png

總結

    • 同じプロジェクト名で、違うサービス名にすると、ちゃんと立ち上がる

 

    • でも、同じプロジェクトとして認識されてしまい、関連のあるコンテナと思われてしまう

 

    同じプロジェクト名にするのは、よくない!!!

如果主机端口相同

端口:主机端口是容器端口。
即使容器端口相同也没有问题。
这是因为容器是独立的,问题在于主机端口。

一个项目

# 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项目”,就没有问题。
换句话说,如果只启动其中一个容器,也会顺利进行。

Untitled (6).png

最后的结论

    • プロジェクト名は必ず変更する必要がある

 

    • サービス名は同じでも大丈夫

 

    • ホスト側のportは、変更を推奨

 

    • コンテナ側のportは変更する必要はない

 

    Dockerfileは、全く同じで問題ない

汇总应该在使用Docker时进行更改的地方。

puojekuto .png
# docker-compose.yml
version: "3"

services:
  react-app: 
    build: .
    volumes:
      - ./:/usr/src/app
    command: npm start
    ports:
      - "3000:3000" 

以后创建第二次及以后时

プロジェクト2-変更.png
# docker-compose.yml
version: "3"

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