Docker Composeを用いてLAMP環境構築 -- php.iniの設定とmysqlへのアクセス


はじめに

前回の記事では、Docker Composeを使用してLAMP環境を構築してみました。しかし、実際にphpからmysqlを操作するためには、php.iniの設定や必要なパッケージのインストールを行わなくてはいけません。今回は、それらをDockerの機能を利用して行います。

ファイル準備

ディレクトリ構成
/ -- docker-compose.yml
               web-php/ -- Dockerfile
                           php.ini

                  html/ -- index.php
                           sqlTest.php
docker-compose.yml

前回と同じ内容を使用します。

web-php / Dockerfile
Dockerfile
FROM php:7.3-apache

# コマンドを連続して記述したい場合は \ && で区切る
RUN docker-php-ext-install pdo_mysql \
    && docker-php-ext-enable pdo_mysql

# COPY コピー元ファイル コピー先ディレクトリ
COPY ./php.ini /usr/local/etc/php/
web-php / php.ini
php.ini
[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese
html / index.html
index.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Test Page Welcome!</h1>
    <div>----------------------------------------------------------------------------</div>
    <?php phpinfo() ?>
</body>
</html>
html / sqlTest.php
sqlTest.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>SQL Test Page</h1>

    <?php 
        $dsn = 'mysql:dbname=test_db;host=db';
        $user = 'root';
        $password = 'password';

        try {
            $dbh = new PDO($dsn, $user, $password);

            print("接続成功<br>");

            $dbh->query('SET NAMES sjis');

            $sql = "select * from test_tb";

            $dbData = $dbh->query($sql);
        }catch (PDOException $e) {
            print('接続不可:'.$e->getMessage());
            die();
        }

        $dbh = null;
    ?>

    <p>DB取得データ</p>
    <ul>
        <li>
            <?php 
            
                foreach ($dbData as $item) {
                    print($item['id']);
                    print(" | ");
                    print($item['name'].'<br>');
                }
            
            ?>
        </li>
    </ul>
</body>
</html>
ポイント
  • web-php / Dockerfile
    RUNを使用してパッケージ「pdo_mysql」をインストールし、有効化しています。
    COPYを使用してローカルに作成したphp.iniをコンテナ内にコピーする。

  • html / sqlTest.php
    PDO関数に渡す引数でhostの設定に関して、hostネームはdockerのコンテナ名になります。今回は、mysqlのコンテナを「db」という名称で構築しているため、host=dbとします。

LAMP環境を構築する

コンテナを作成する

以下のコマンドでコンテナを作成しましょう。

docker-compose up -d

コンテナが起動した状態で、すでにphp.iniの設定ファイルとpdoメソッドを利用するためのパッケージのインストールなどは完了しています。

mysqlにテストデータを用意する

次にデータベースにテスト用にデータを用意しましょう。mysqlを直接操作したいので、mysqlを立ち上げているコンテナに入ります。
コンテナへの入り方については、こちらの記事がわかりやすく書いてくださっています。
コンテナに入れたらmysqlにデータを用意していきます。

-- データベースを作成
create database test_db

-- テーブルを作成
create table test_tb (id int, name varchar(15));

-- データを追加
insert into test_tb values (1, 'taro');
確認

以下にアクセスするとphpでmysqlのデータを取得できていることが確認できます。

http://localhost:8080/sqlTest.php

今後の課題

Docker-Composeを使用してLaravel環境を構築する

参考文献