7
6

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 3 years have passed since last update.

docker compose (docker-compose) で複数サービスを起動する

Posted at

docker compose (docker-compose) で複数のプロジェクトの画面を同時に立ち上げたいとき、調べると「ポートが被ってるからkillしろ」とか「別なところで起動してるdockerをdownさせろ」とか、『同時に立ち上げない前提』の記事ばかり目についたのでそれとは逆の意図で書きました。

現場では2個も3個も同時に開発のプロジェクトが走っていて、いちいちdockerを立ち上げ直すのが面倒だったので。

マシン環境は以下の内容で確認しています。

macOS Catalina バージョン 10.15.7
docker desktop バージョン 3.3.3

結論

プロジェクト同士でポートがかぶらないようにymlファイルを編集してから docker-compose -p other up -d または docker compose -p other up -d のコマンドで起動。

やったこと

結論から言えば上記の通り、docker-compose.yml のファイルを編集してポート番号を変更するのですが、例えばプロジェクトAとプロジェクトBを同時に起動したいとき、ymlファイルが以下のようになっているとします。

プロジェクトAのdocker-compose.yml
version: '3'

services:
  nginx:
    container_name: xxx_nginx
    image: xxx:nginx_v4
    volumes:
    - ./server:/data/www
    ports:
      - "80:80"
    depends_on:
      - php
  php:
    container_name: xxx_php
    image: xxx:php_v6
    volumes:
    - ./server:/data/www
  redis:
    container_name: xxx_redis
    image: xxx:redis_latest
    ports:
      - "6379:6379"
    volumes:
      - "./data/redis:/data"

プロジェクトBのdocker-compose.yml
version: '3'

services:
  nginx:
    container_name: nginx
    image: xxx:nginx_latest
    volumes:
    - ./server:/data/www
    ports:
      - "80:80"
    depends_on:
      - php
  php:
    container_name: php
    image: xxx:php_latest
    volumes:
    - ./server:/data/www
  redis:
    container_name: redis
    image: xxx:redis_latest
    ports:
      - "6379:6379"
    volumes:
      - "./data/redis:/data"

プロジェクトAを docker-compose up -d または docker compose up -d のコマンドで起動した後、ステータスを見てみると以下のようになります。

% docker compose ps
NAME                      SERVICE             STATUS              PORTS
xxx_nginx   nginx         running             443/tcp, 0.0.0.0:80->80/tcp, :::80->80/tcp
xxx_php     php           running             9000/tcp
xxx_redis   redis         running             0.0.0.0:6379->6379/tcp, :::6379->6379/tcp

nginx や redis のポートがプロジェクトAとBで重複しているので、プロジェクトBのymlを以下のように変更します。

プロジェクトBのdocker-compose.yml
version: '3'

services:
  nginx:
    container_name: nginx
    image: xxx:nginx_latest
    volumes:
    - ./server:/data/www
    ports:
      - "81:80" # ←ここを変更
    depends_on:
      - php
  php:
    container_name: php
    image: xxx:php_latest
    volumes:
    - ./server:/data/www
  redis:
    container_name: redis
    image: xxx:redis_latest
    ports:
      - "6380:6379" # ←ここを変更
    volumes:
      - "./data/redis:/data"

その後 docker-compose -p other up -d または docker compose -p other up -d のコマンドで起動すると、

プロジェクトAは http://localhost/ で、 プロジェクトBは http://localhost:81/ で繋がるようになります。

参考URL

docker-compose の ports 指定まとめ
docker-compose.ymlの書き方について解説してみた
docker-compose を複数起動する

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?