Docker docker-compose.yml LAMP CakePHP3

ディレクトリ構成

公開ディレクトリ
└.db-host-data
 └conf MySQLコンテナにマッピングする設定ディレクトリ。custom.cnfが追加で設定される
  └custom.cnf
 └db 永続化するDBファイルをマッピングする為のディレクトリ
 └initdb.d コンテナ作成時に実行するSQLファイルをマッピングする為のディレクトリ
  └init1.sql
  └init2.sql

└.web-host-data CakePHP3ソースコードをマッピングする為のディレクトリ
 CakePHP3のソースファイル

└docker
 └web
  └Dockerfile docker-composeから呼び出されるApacheコンテナ作成の為のDockerfile
docker-compose.yml

docker-compose.yml

version: ‘3’

services:

 web:
  Apacheコンテナ作成用のDockerfileを指定
  build: ./docker/web
  container_name: web-host
  volumes:
   ローカルのソースコードをApacheの公開ディレクトリとマッピング
   - ./.web-host-data:/var/www/html
  ports:
   - 80:80
  privileged: true
  restart: always

 db:
  image: mysql:8.0.20
  container_name: db-host
  environment:
   MYSQL_ROOT_PASSWORD: root
   MYSQL_DATABASE: limited
   MYSQL_USER: docker
   MYSQL_PASSWORD: docker
   TZ: ‘Asia/Tokyo’
  command: mysqld
   --character-set-server=utf8mb4
   --collation-server=utf8mb4_unicode_ci
   --innodb-use-native-aio=0
   --default-authentication-plugin=mysql_native_password
  volumes:
   DBのデータをローカルとマッピング。永続化(コンテナを終了してもDBのデータが残る)される
   - ./.db-host-data/db:/var/lib/mysql
   DBの設定ファイルをローカルとマッピング。.db-host-data/conf配下の設定が有効化される
   - ./.db-host-data/conf:/etc/mysql/conf.d
   コンテナ作成時の実行スクリプトを指定。.db-host-data/initdb.d配下のsqlファイルが自動実行される
   - ./.db-host-data/initdb.d:/docker-entrypoint-initdb.d
  ports:
   - 3306:3306
  restart: always

 phpmyadmin:
  container_name: phpmyadmin
  image: phpmyadmin/phpmyadmin
  environment:
   - PMA_ARBITRARY=1
   - PMA_HOSTS=db-host
   - PMA_USER=root
   - PMA_PASSWORD=root
  ports:
   - 8080:80

Dockerfile

FROM php:7.2-apache

RUN apt-get update && apt-get install -y –no-install-recommends \
nano \
libicu-dev \
vim \
&& rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install intl \
&& docker-php-ext-install pdo_mysql \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug

EXPOSE 80