Docker docker-compose.yml LAMP Laravel

ディレクトリ構成

公開ディレクトリ
└.db-host-data
 └conf MySQLコンテナにマッピングする設定ディレクトリ。custom.cnfが追加で設定される
  └custom.cnf
 └data 永続化するDBファイルをマッピングする為のディレクトリ
 └initdb.d コンテナ作成時に実行するSQLファイルをマッピングする為のディレクトリ
  └init1.sql
  └init2.sql
└.web-host-data Laravelソースコードをマッピングする為のディレクトリ
 Laravelのソースファイル
└docker
 └web
  └apache
   └000-default.conf apacheコンテナにコピーするapache設定ファイル
  └php
   └php.ini apacheコンテナにコピーするphp設定ファイル
  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.3-apache
# mod_rewriteを 有効に
RUN a2enmod rewrite

COPY ./php/php.ini /usr/local/etc/php/
COPY ./apache/*.conf /etc/apache2/sites-enabled/

RUN apt-get update \
 && apt-get install -y libzip-dev zlib1g-dev libpq-dev default-mysql-client unzip vim \
 && docker-php-ext-install zip pdo_mysql mysqli \
 && docker-php-ext-enable mysqli

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2

WORKDIR /var/www/html

EXPOSE 80

Laravel

次の記事

Laravel Controller