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