目次

CentOS8 + MySQL8.0 の Docker Compose 作成例

Laravel を載せる用の CentOS8 の app コンテナと、MySQL8.0 の db コンテナを作成する例。

ディレクトリ構成

project
├ docker
│ ├ app
│ │ ├ conf
│ │ │ ├ html.conf
│ │ │ └ php74.ini
│ │ ├ conf.d
│ │ │ └ charset.cnf
│ │ └ Dockerfile
│ ├ db
│ │ ├ conf.d
│ │ │ └ charset.cnf
│ │ └ Dockerfile
│ └ docker-compose.yml
└ production  // appコンテナに載せるプログラムファイルを格納

docker/docker-compose.yml

version: '3'
services:
  db:
    container_name: project_name_db
    build: ./db/
    image: laravel_mysql80_db
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: laravel_db
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    ports:
      - 3306:3306
  app:
    container_name: project_name_app
    build: ./app/
    image: laravel_centos8_php74_app
    ports:
      - 8080:80
    volumes:
      - ../production:/var/www/production/
    tty: true
    stdin_open: true
    privileged: true
    command: /sbin/init
    depends_on:
      - db

docker/app/Dockerfile

FROM centos:8

RUN export LC_ALL=C && \
    dnf -y update && \
    dnf -y install httpd && \
    dnf -y install epel-release && \
    dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm && \
    dnf -y install http://ftp.riken.jp/Linux/remi/enterprise/remi-release-8.rpm && \
    dnf module -y install php:remi-7.4  && \
    dnf -y install php-pdo php-json php-xml php-mysqlnd php-gd php-mbstring && \
    dnf -y install @mysql:8.0 && \
    dnf -y install ibus-kkc && \
    dnf -y install langpacks-ja && \
    curl -sL https://rpm.nodesource.com/setup_14.x | bash - && \
    dnf -y install nodejs

ENV LANG ja_JP.UTF-8

COPY ./conf/html.conf /etc/httpd/conf.d/html.conf
COPY ./conf/php74.ini /etc/php.ini
COPY ./conf.d/charset.cnf /etc/my.cnf.d/charset.cnf

RUN export LANG=ja_JP.utf8 && \
    chmod 644 /etc/httpd/conf.d/html.conf && \
    mkdir /var/log/php && \
    chown apache:apache /var/log/php && \
    rm -rf /var/www/html && \
    ln -s /var/www/production/public /var/www/html

# httpd
RUN systemctl enable httpd

docker/app/conf/html.conf

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

docker/app/conf/php74.ini

対応バージョンの php.ini をどこかからコピーしてきて、設定したい内容に書き換えて設置

docker/app/conf.d/charset.cnf

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
init-connect='set names utf8'

[client]
loose-default-character-set = utf8mb4

docker/db/Dockerfile

FROM mysql:8.0

RUN apt-get update && \
    apt-get -y install locales-all && \
    export LC_ALL=ja_JP.UTF-8

ENV LANG ja_JP.UTF-8

COPY ./conf.d/charset.cnf /etc/my.cnf.d/charset.cnf

docker/db/conf.d/charset.cnf

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
init-connect='set names utf8'

[client]
loose-default-character-set = utf8mb4

コマンドの実行

Docker Quickstart Terminal を起動する。

# project/docker ディレクトリへ移動
cd project/docker

# コンテナの作成&起動
# -d をつけることでバックグラウンドでコンテナを起動
# --build をつけることでイメージを作成
docker-compose up -d --build

# コンテナの一覧を確認
docker-compose ps

# IP アドレスを調べる
docker-machine ip

# 192.168.99.100 なら、以下でアクセス可能になる
# http://192.168.99.100:8080

# 2回め以降は、バックグラウンドでコンテナを起動するだけでよい
docker-compose up -d

# app コンテナに入り作業をする
docker container exec -it project_name_app /bin/bash

# マウントした production に移動
cd /var/www/production/

# production ディレクトリ内のファイルが共有されているか確認
ls -l

# db コンテナの DB に接続できるか確認
mysql -h project_name_db --port 3306 -u docker -pdocker -D laravel_db

これでローカルで Laravel を動かすための環境が整いました。
次は Laravel のインストールを行います。
Laravel 7 のインストール