複数プロジェクトを同時に起動させるDockerの設定

## はじめに
Docker初心者だったので、複数のプロジェクトをローカルで確認したいときに、今までは同じポート番号を使用してそれぞれのPHPのバージョンごとに分けてコンテナをビルドしていました。

ポートを分けずに設定していたので、同時にupしようとすると```ERROR: Encountered errors while bringing up the project.```が出てしまいます。

いちいち```docker stop```で停止してから立ち上げたいプロジェクトのディレクトリに移動してupして～というのをやっていてとにかく面倒だったので、PHPバージョンが違っても一回のupですべてのプロジェクトが動くように修正した内容を記載します。

社内でDocker環境整備していただいたので、この作業不要になってしまいましたが、自分の勉強を兼ねて記事にします。

## やったこと
簡潔にまとめるとファイル名の変更とフォルダ構成を少しだけいじるだけでできました。

以下に手順を記載します。

### 1. ディレクトリ構造の修正

以下のようなディレクトリ構造になるようにそれぞれのファイルを配置しました。名前は適当です。

```
.
├── docker-compose.yml
├── infra
│   ├── app
│   │   ├── Dockerfile1
│   │   ├── Dockerfile2
│   │   ├── httpd.conf
│   │   └── php.ini
│   └── db
│       ├── Dockerfile
│       └── my.conf 
└── projects
    ├── project1
    │      ├── project_1
    │      └── project_2
    └── project2
           ├── project_3
           └── project_4
```
少し私の場合の話をすると、projectsディレクトリの中に今まで正常稼働していたPHPバージョンごとのフォルダを作成してその下にそれぞれのプロジェクトをgit cloneしたものを配置しました。
### 2. docker-compose.ymlの修正

ばらばらに稼働していた時のymlファイルを以下のように一つにまとめます。

```diff

version: '3'

services:
+  // project1の設定の記述
-  web:
+  projects1:
-   build: ./docker/php-apache
+   build:                    //ビルドに使用するDockerfileを指定する（ファイルの置き場所は前述の通りのパスを指定）
+     context:.
+     dockerfile: ./infra/app/Dockerfile1  
-   container_name: apache
+   container_name: apache1   //名前が被らないように変える
    ports:
-      - "80:80"
+      - "8081:80"  //ポートを分ける
    depends_on:
      - db
    working_dir: /var/www/html/
    volumes:
-      - ./src:/var/www/html
-      - ./docker/php-apache/httpd.conf:/etc/httpd/conf/httpd.conf
+      - ./projects/project1:/var/www/html
+      - ./infra/app/httpd.conf:/etc/httpd/conf/httpd.conf
    tty: true
    stdin_open: true
    privileged: true
    command: /sbin/init
    
+   //project2の設定の記述
+  projects2:
-   build: ./docker/php-apache
+   build:                    //ビルドに使用するDockerfileを指定する（ファイルの置き場所は前述の通りのパスを指定）
+     context:.
+     dockerfile: ./infra/app/Dockerfile2  
-   container_name: apache
+   container_name: apache2   //名前が被らないように変える
    ports:
-      - "80:80"
+      - "8082:80"  //ポートを分ける
    depends_on:
      - db
    working_dir: /var/www/html/
    volumes:
-      - ./src:/var/www/html
-      - ./docker/php-apache/httpd.conf:/etc/httpd/conf/httpd.conf
+      - ./projects/project2:/var/www/html
+      - ./infra/app/httpd.conf:/etc/httpd/conf/httpd.conf
    tty: true
    stdin_open: true
    privileged: true
    command: /sbin/init
    
  db:
-   build: ./docker/db
+   build: ./infra/db      // 新しいディレクトリ構造にあわせてパスを変更
    container_name: mysql　
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: 'Asia/Tokyo'
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    volumes:
      - ../db-data/mysql-5.5.56/data:/var/lib/mysql
      - ./tmp-sql:/home/tmp
-     - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
+     - ./infra/db/my.cnf:/etc/mysql/conf.d/my.cnf   //新しいディレクトリ構造のパス通りに変更
    ports:
      - 3306:3306
    tty: true

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: phpmyadmin
    ports:
       - 8888:80
    depends_on:
       - db
    environment:
          PMA_HOST: "mysql"
          PMA_PORT: 3306
          UPLOAD_LIMIT: 500M
```

これで設定が完了しました。
あとは```docker-compose.yml```ファイルのあるディレクトリに移動して```docker-compose up -d --build```でビルドとUPを実施。
```composer install```をプロジェクトごとに行ったら使用できるようになりました。
それぞれポートを変えているので下記のようなアドレスでローカルホストにアクセスできます。
project1：http://localhost:8081/
project2：http://localhost:8082/

### まとめ
初歩的な設定ですが、作業の手間が減ってよかったです。Dockerって本当に便利だなぁと思いました。もっと使いこなせるように勉強したいなと思います。

### 参考資料
- https://docs.docker.jp/get-started/overview.html
- https://juno-engineer.com/article/docker-laravel-multi-project/#google_vignette
- https://zenn.dev/batton/articles/8c9acee35d7b73