今回は、docker-composeで、
PHP、Apache、MySQLの環境を構築した際のメモです。
尚、PHP、Apacheの部分までは、以下の記事と近い内容になっております。
目次
環境
・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
整備対象
・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系のマルチバイト文字を取り扱う為に、
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の調整、言語設定を行います。
今回は、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
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
イメージビルド・コンテナ起動
以下のコマンドで、実行を行います。
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
などで停止します。
今回のメモは以上となります。