Docker | Docker上にLAMP環境を構築する ~ Docker Compose / Apache / MySQL / PHP

Docker | Docker上にLAMP環境を構築する ~ Docker Compose / Apache / MySQL / PHP

こんにちは!今回はDocker上にLAMP環境を構築していきたいと思います。

構成

LAMP(ランプ)は「OS:Linux」「Web:Apache」「DB:MySQL」「言語:PHP」といったオープンソースソフトウェアの構成を指します。

LAMPのほかにも、MAMPやXAMPPなどがあります。

いずれもDocker Hubにイメージが提供されているため、それぞれのDockerコンテナを生成し(1プロセス=1コンテナの考えに基づく)、Docker Composeでそれぞれを繋ぎ合わせます。

手順

今回利用するDocker Imageは以下の通りです。

・PHP(& Apache) [Link]

 → PHPイメージ内にApacheが内包されているため、PHPのイメージをPullする。

・MySQL [Link]

①DockerCompose用のフォルダを作成する

適当な場所で良いですが、今回はDドライブ直下に作成します。

このフォルダ名が、docker-compose実行後のcompose名になります。

mkdir dockerlamp
cd dockerlamp

以下のようなフォルダ構成にします。

D:
└─ dockerlamp
    └─ docker-compose.yml

②作成したフォルダに docker-compose設定ファイルを作成する

yml(ヤムル)ファイルを作成します。

docker-compose.yml ↓

#----------------------------
# Docker Composeの系を指定
# 3系のDocker Composeを使用
#----------------------------
version: '3.7'

#----------------------------
#下記サービスが共有で利用するフォルダ
#----------------------------
volumes:
   share_data:

#----------------------------
# サービスを記載する
# 例)php: や db: など。適当(わかりやすい)な文字ならOK
#----------------------------
services:
    #----------------------------
    #1:DBの設定
    #----------------------------
    mysql:
        #1) pullするイメージを記載( :latestで最新)
        image: mysql:5.7
   
        #2) 作成するコンテナ名を指定
        container_name:
            LAMP_DB

        #3) サーバ再起動後でも、コンテナを自動起動する
        restart:
            always

        #4) MYSQLのユーザ設定
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=test_db
            - MYSQL_USER=test_user
            - MYSQL_PASSWORD=test_password
        
        #5) 共有データ領域(share_data)をマウントする
        volumes:
            - share_data:/var/lib/mysql

        #6) 通信ポートを指定(<Client側から接続する際のPort>:<Container側のPort>)
        ports:
            - 3306:3306

    #----------------------------
    #2:PHP 及び Apache の設定
    #----------------------------
    php:
        #1) 連携させるサービスを記載
        depends_on:
            - mysql    

        #2) pullするイメージを記載( :latestで最新)
        image:
            php:7.4.8-apache

        #3) 作成するコンテナ名を指定
        container_name:
            LAMP_php
        
        #4) サーバ再起動後でも、コンテナを自動起動する
        restart:
            always        

        #5) 通信ポートを指定(<Client側から接続する際のPort>:<Container側のPort>)
        ports:
            - 8080:80

③docker-composeを起動する

docker-compose up -d --build

Dockerコンテナが生成されたことを確認しました。

接続テスト ~Apache起動テスト~

この状態で「http://localhost:8080」に接続してみます。

現在、index.htmlが存在しないため、このような表示になります。

1)index.phpを作成してApacheの挙動を確認する

Dockerコンテナ「LAMP_php」のターミナルに接続します。

↓現在の場所
# pwd 
/var/www/html

↓vimが入っていないのでインストール
# apt-get update
# apt-get install vim

↓index.phpを作成(touch index.phpからvimで編集でも可)
# vim index.php

2)index.phpを編集する

index.phpの中身↓

<?php
 phpinfo();
?>

では改めて「http://localhost:8080」に接続します。

接続テスト ~DB接続テスト~

PHPコンテナからDBコンテナに接続します。

上記のDBコンテナ設定情報の一部は以下の通りです。

#4) MYSQLのユーザ設定
environment:
    - MYSQL_ROOT_PASSWORD=root
    - MYSQL_DATABASE=test_db
    - MYSQL_USER=test_user
    - MYSQL_PASSWORD=test_password

1)mySQLコンテナのターミナルに接続し、mySQLを起動

mysqlを起動します。

mysql -u test_user -p 
>> Enter password: 「test_password」を入力

2)テーブルを作成する

試行用として以下のようなテーブルを作成します。

mysql> Create Table test_db.test_table(id int, name varchar(10));
mysql> Insert into test_db.test_table values(1,'Apple');
mysql> Insert into test_db.test_table values(2,'Banana');

データが準備できました。

mysql> select * from test_db.test_table;
+------+--------+
| id | name |
+------+--------+
| 1 | Apple |
| 2 | Banana |
+------+--------+
2 rows in set (0.01 sec)

3)php.iniを設定

PHPコンテナに戻り、Mysqlと接続するための準備を行います。

php.iniが格納されるべきフォルダに移動したのち、php.ini-developmentをコピーします。

cd /usr/local/etc/php
cp php.ini-development php.ini

4)PDOのmysqlをインストールする

apt-getではインストールが出来ず詰まっていたのですが、どうやら以下のコマンドで入手するようです。

docker-php-ext-install pdo_mysql

4)PHPからデータ取得→表示を行う

PHPコンテナに戻り、/var/www/html フォルダの配下に「test.php」を作成します。

↓test.php

<?php
    $dsn = 'mysql:host=mysql;dbname=test_db;';
    $db = new PDO($dsn, 'test_user', 'test_password');

    $sql = 'SELECT * FROM test_db.test_table;';
    $stmt = $db->prepare($sql);
    $stmt->execute();
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
    var_dump($result);
?>

5)ブラウザから接続確認

http://localhost:8080/test.php に接続します。

以下のような出力結果が得られ、DBと接続できたことを確認しました。

まとめ

今回は Docker Composeを用いて「LAMP」環境を作成してみました。

Apacheやphpの細かな設定は省いていますが、大まかな動きは確認できました!

ではまた!

本日のAmazonおすすめ_Top10

2022-11-26 23:06:28時点