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?

株式会社シンプルウェイAdvent Calendar 2024

Day 20

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

Last updated at Posted at 2024-12-19

はじめに

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ファイルを以下のように一つにまとめます。


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って本当に便利だなぁと思いました。もっと使いこなせるように勉強したいなと思います。

参考資料

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?