0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【使いまわし】Dockerでプロジェクト名とサービス名を被らせてみる

Posted at

はじめに

  • 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>

「あプロジェクト」を立ち上げる

  • docker compose up --build -d
    →コンテナの立ち上がり成功
  • localhost:3000→「あプロジェクト」が表示された

↓「あプロジェクト」立ち上げ時のコンテナ状況
Untitled (1).png

「いプロジェクト」を立ち上げる

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

↓「あプロジェクト」「いプロジェクト」を続けて立ち上げたときのコンテナ状況
Untitled (2).png

結論

  • イメージもコンテナも、後からビルドした「いプロジェクト」に乗っ取られた
  • 同じプロジェクト名で、同じサービス名は一つしか作成できない

同じプロジェクト名・異なるサービス名の場合

今度は、同じプロジェクト名で、違うサービス名にしてみました。

↓あプロジェクトのフォルダ構成
プロジェクト名.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 up --build -dで、あプロジェクトを立ち上げる

↓コンテナ状況
Untitled (3).png

docker compose up --build -dで、いプロジェクトを立ち上げる

↓コンテナ状況
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

結論

  • 同じプロジェクト名で、違うサービス名にすると、ちゃんと立ち上がる
  • でも、同じプロジェクトとして認識されてしまい、関連のあるコンテナと思われてしまう
  • 同じプロジェクト名にするのは、よくない!!!

ホスト側のポートが同じ場合

port: ホスト側のポート:コンテナ側のポートです。
コンテナ側のポートは、同じでも全く問題ないです。
なぜなら、コンテナは独立しているためです。問題なのはホスト側のポートです。

あプロジェクト

# 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で、あプロジェクト立ち上げ
docker compose up --build -dで、いプロジェクト立ち上げ

エラーが出た。

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

「いプロジェクト」のビルドだけなら大丈夫だった。
つまり、どちらか一方のコンテナしか立ち上げない場合は、上手くいく

↓コンテナ状況
Untitled (6).png

最終結論

  • プロジェクト名は必ず変更する必要がある
  • サービス名は同じでも大丈夫
  • ホスト側のportは、変更を推奨
  • コンテナ側のportは変更する必要はない
  • Dockerfileは、全く同じで問題ない

再利用Dockerで変更するべき箇所まとめ

1回目作成
puojekuto .png

# docker-compose.yml
version: "3"

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

2回目以降作成する際は、

プロジェクト2-変更.png

# docker-compose.yml
version: "3"

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?