docker compose PHP Apache MySQL 環境 作成

今回は、docker-composeで、

PHP、Apache、MySQLの環境を構築した際のメモです。

尚、PHP、Apacheの部分までは、以下の記事と近い内容になっております。

Docker VSCode PHP デバッグ 設定 xdebug

環境

・OS:mac OS Catalina 10.15.7

・VSCode:1.57.1  Microsoft Visual Studio Code

・Docker for Desktop:3.2.1(61626)

・Docker : 20.10.5, build 55c4c88

・docker-compose version 1.28.5, build c4eb3a1f

Xdebug 3.0.4

 


整備対象

・PHP:8.0.7

・Apache:2.0

・MySQL:5.7.41

・Xdebug:3.0.4

 


PHP Dockerfile 設定ファイル 準備

まずは、PHP用の設定ファイルとDockerfileを用意していきます。

設定ファイルとDockerfileは、PHP用のフォルダを用意して配置します。

・php.ini

display_errors = On
display_startup_errors = On
max_execution_time = 30
session.gc_divisor = 1000
session.sid_bits_per_character = 5
output_buffering = 4096
memory_limit = 128M
upload_max_filesize = 64M
post_max_size = 64M
max_input_vars = 1000
log_errors = On
error_log = /dev/stderr
error_reporting = E_ALL
expose_php = On
zend.exception_ignore_args = Off

[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.language = Japanese

[mysqlnd]
mysqlnd.collect_memory_statistics = On

[assertion]
zend.assertions = 1

・xdebug.ini

xdebug.iniは、最低限の動作には不要ですが、デバッグ実行を行う場合には配置します。

[xdebug]
xdebug.client_host=host.docker.internal
xdebug.client_port=9004
xdebug.start_with_request=yes
xdebug.mode=debug

 

・Dockerfile

FROM php:8-apache

WORKDIR /var/www/html

# PHP実行・デバッグ用、MySQL連携用、作業用で必要なライブラリをインストール
RUN apt-get update \
&& apt-get install -y libonig-dev libzip-dev unzip\
&& docker-php-ext-install pdo_mysql mbstring zip bcmath\
&& pecl install xdebug\
&& docker-php-ext-enable xdebug

# 設定ファイルをコピー
COPY ./php.ini /usr/local/etc/php/php.ini
COPY ./xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini

※mbstring、bcmath、xdebugは必須ではありません。

mbstringは、PHPの処理の中でmb系のマルチバイト文字を取り扱う為に、

bcmathは、Math関数を扱う為に導入しています。

MySQL Dockerfile 設定ファイル 準備

MySQLもmysqlフォルダを作成して、そこにファイルを配置していきます。

・my.cnf

[mysqld]
character-set-server=utf8

・Dockerfile

FROM mysql:5.7.41-debian
COPY ./my.cnf /etc/mysql/conf.d/
RUN apt-get update
RUN apt-get install -y locales
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*
RUN sed -i -E 's/# (ja_JP.UTF-8)/\1/' /etc/locale.gen && locale-gen
ENV LANG ja_JP.UTF-8
CMD ["mysqld", "--character-set-server=utf8", "--collation-server=utf8_unicode_ci"]

apt-getの調整、言語設定を行います。

Dockerfile MySQL Debian
・init.sql
自動的にデータベースも整備するために、初期化用のsqlファイルを作成します。

今回は、mysqlフォルダ内にsqlフォルダを作成して、そこに配置します。

DROP TABLE IF EXISTS japanese_calendar_year;

CREATE TABLE japanese_calendar_year (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    nameTEXTNOTNULL
) charset=utf8;

INSERT INTO japanese_calendar_year (name) VALUES ("昭和"),("平成"),("令和");

検証用 PHP ファイル作成

続けて、実行確認用のPHPファイルを用意します。

・index.php

<?php
  echo__DIR__;
  phpinfo();
?>

・db_connect_test.php

念のため、MySQLへの接続が確認できるファイルも用意します。

<?php

try {
    // DB接続設定
    $dsn = "mysql:host=mysql:3306;dbname=test_db;";
    $db = newPDO($dsn, 'test_db_docker', 'test_db_docker_pass');

    // SQL実行
    $sql = 'SELECT*FROM japanese_calendar_year;';
    $stmt = $db->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // デバッグ
    var_dump($result);

} catch (PDOException $e) {
    echo$e->getMessage();
    exit;
}

 


docker-compose.yaml 作成

docker-compose.yamlは、プロジェクトのルートディレクトリに配置します。

・docker-compose.yaml

version: "3"
services:
  app:
    build:
      context: ./php
      # PHP用dockerfileの配置パス
      dockerfile: .
    ports:
      - "8010:80"
    volumes:
      - ./src:/var/www/html
  mysql:
    build:
      context: ./mysql
      # MySQL用dockerfileの配置パス
      dockerfile: .
    ports:
      - 3306:3306
    volumes: # データ永続化
    # MySQL Database初期化用SQLを./mysql/sqlに配置します。
      - ./mysql/sql:/docker-entrypoint-initdb.d
    # MySQLの内容を./dataディレクトリに保持します。
      - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_USER: root
      # Rootユーザーを、パスワードなしでMySQLへのログインを許可します。
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      # MySQLのRootユーザーのパスワードを設定する場合は、
      # MYSQL_ALLOW_EMPTY_PASSWORDをコメントアウトし、MYSQL_ROOT_PASSWORDでパスワードを指定します。
      # MYSQL_ROOT_PASSWORD: root
      # Database名称の指定
      MYSQL_DATABASE: test_db
      # 作業用MySQLユーザー名称の指定
      MYSQL_USER: test_db_docker
      # 作業用MySQLユーザーパスワードの指定
      MYSQL_PASSWORD: test_db_docker_pass
また、MySQLコンテナデータを永続化させるために、
docker-compose.yamlで指定したフォルダを作成します。
今回は、プロジェクト直下に、dataフォルダを作成します。

イメージビルド・コンテナ起動

以下のコマンドで、実行を行います。

docker-compose up -d --build

 

 


挙動確認

まずは、PHPが正常に動作していることを確認するため、

以下のURLにアクセスして、PHPの設定情報を確認します。

http://localhost:8010/

 

 

内容が問題なさそうでしたら、

以下のURLにアクセスして、PHPとMySQLのやり取りも問題ないか確認します。

http://localhost:8010/db_connect_test.php

 

動作確認も問題がなく、停止する場合は、

docker-compose down --volumes

などで停止します。

 


 

今回のメモは以上となります。

 

都内でエンジニアをやっています。 2017年に脱サラ(法人設立)しました。 仕事で調べたことや、気になったことをメモしています。
投稿を作成しました 172

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連投稿

検索語を上に入力し、 Enter キーを押して検索します。キャンセルするには ESC を押してください。

トップに戻る