🚀

Dockerで1つのコンテナを複数起動する(--scale)

2023/02/23に公開約1,300字

はじめに

Next.jsのDockerコンテナをhttp://localhost:3000, http://localhost:3001のようにポートを変えて2つ起動したので、方法をメモとして残します

結論

docker-compose up --scale 起動したいコンテナにつける名前=2 --buildを実行

docker-compose up --scale frontend=2 --build

前提

Dockerfile, docker-compose.yml を用意し、Dockerコンテナを起動できる

準備

docker-compose.ymlの複数起動したいコンテナのcontainer_nameだけ削除

例えばfrontend, backend, dbコンテナがそれぞれあってfrontendコンテナだけ複数起動したいならそのcontainer_nameだけ削除する

※削除しないとThe container name "/frontend" is already in useとなる

.envにCOMPOSE_PROJECT_NAMEを追加

.env
COMPOSE_PROJECT_NAME = myapp

※myappの所は自由です
これでmyapp_コンテナ名と自動でコンテナ名が変更される
複数起動した分にはmyapp_コンテナ名_1, myapp_コンテナ名_2のように自動で数字が追加される

docker-compose.ymlのportsを変更

幅を持つよう書き換える

docker-compose.yml
ports:
-  - 3000:3000
+  - 3000-3001:3000

Dockerコマンドを打つ

docker-compose up --scale コンテナ名=2 --build

今回だとfrontendの話なので
docker-compose up --scale frontend=2 --build
としました(hogehogeやfugaなど適当な文字でも動きますがわかりやすさのため)

これでfrontendコンテナを2つ起動できました!
--scaleなしで1つだけ起動も可能です

オプション:コンテナの個数を増やす

docker-compose.ymlのports範囲を増やせばOK
3つ起動したいなら

docker-compose.yml
ports:
-  - 3000-3001:3000
+  - 3000-3002:3000

originが変更になったので、フロントとバックエンドを分けている場合などは他にも変更する場所が出てくると思います

最後に

portを範囲指定したことでupし直すたびにportが変わってしまうので固定したい(調査中)
何かご指摘ありましたらコメント頂けるとありがたいです!!

Discussion

ログインするとコメントできます