Dockerで1つのコンテナを複数起動する(--scale)
はじめに
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を追加
COMPOSE_PROJECT_NAME = myapp
※myappの所は自由です
これでmyapp_コンテナ名
と自動でコンテナ名が変更される
複数起動した分にはmyapp_コンテナ名_1
, myapp_コンテナ名_2
のように自動で数字が追加される
docker-compose.ymlのportsを変更
幅を持つよう書き換える
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つ起動したいなら
ports:
- - 3000-3001:3000
+ - 3000-3002:3000
originが変更になったので、フロントとバックエンドを分けている場合などは他にも変更する場所が出てくると思います
最後に
portを範囲指定したことでupし直すたびにportが変わってしまうので固定したい(調査中)
何かご指摘ありましたらコメント頂けるとありがたいです!!
Discussion