1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-03-20

はじめに

前回の記事では、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環境を構築する

参考文献

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?