■ はじめに
https://dk521123.hatenablog.com/entry/2022/01/14/102719
https://dk521123.hatenablog.com/entry/2022/02/22/000000
https://dk521123.hatenablog.com/entry/2022/04/29/000000
の続き。 今回は、LAMP(Linux/Apache/MySQL/PHP)環境を Dockerfile/Docker composeで環境構築してみる。
目次
【1】ファイル構造 1)Dockerfile と Docker Composeについて 【2】Dockerfile 1)Dockerfileを単体で動かしてみる 2)後片付け 【3】compose.yml 【4】その他ファイル 1)index.php 【5】動作確認 1)起動する 2)確認 3)後片付け
【1】ファイル構造
+ Dockerfile + compose.yml + htdocs + index.php
1)Dockerfile と Docker Composeについて
Dockerfileも使う必要がある場合
* Docker composeでは対応できないケース * 詳細な設定をしたいケース
今回の必要性
* PHPからMySQLに接続するためのライブラリが必要で 接続環境を作るため
【2】Dockerfile
FROM php:8.2.5-apache # extension RUN apt-get update \ && docker-php-ext-install pdo_mysql
1)Dockerfileを単体で動かしてみる
[1] 作成したDockerイメージをビルドする
docker image build . -t lamp-demo # 確認 docker images
作成したDockerイメージを起動する
docker container run -d -p 8080:80 lamp-demo # 確認 docker container ps -a
2)後片付け
Step1:コンテナ名またはコンテナIDを調べる
docker container ps -a
CONTAINER ID IMAGE ...
75c7385c81ac lamp-demo ...
Step2:コンテナ停止
# [構文] docker container stop [ContainerName / ContainerID] docker container stop 75c7385c81ac
Step3: コンテナの削除
# [構文] docker container rm [ContainerName / ContainerID] docker container rm 75c7385c81ac # 確認 docker container ps -a
Step4: Dockerイメージの削除
# [構文] docker image rm [DockerImageName] docker image rm lamp-demo # 確認 docker images
【3】compose.yml
version: "3.8" # service services: # web web: build: . container_name: web volumes: - ./htdocs:/var/www/html ports: - "8080:80" depends_on: - mysql # phpmyadmin phpmyadmin: image: phpmyadmin container_name: phpmyadmin environment: PMA_HOST: mysql ports: - "8081:80" depends_on: - mysql # db mysql: image: mysql:8.0.28 platform: linux/x86_64 container_name: db ports: - "3306:3306" volumes: - mysql_db:/var/lib/mysql # - ./config/mysql/data:/var/lib/mysql # - ./config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf environment: MYSQL_ROOT_PASSWORD: password TZ: 'Asia/Tokyo' # volumes volumes: mysql_db: {}
【4】その他ファイル
1)index.php
<?php try { $db = new PDO('mysql:host=mysql;dbname=mysql', 'root', 'password'); $message = 'Hello, world. Connected to MySQL'; print $message; } catch (PDOException $e) { $message = 'Failed to connect MySQL(' . $e->getMessage() . ')'; print $message; } ?>
【5】動作確認
1)起動する
docker compose up -d
2)動作確認
[1] phpmyadmin
* phpmyadmin を確認するために、以下のURLにアクセスする + user name: root + user passowrd: password
* PHP / Apache を確認するために、以下のURLにアクセスする => 「Hello, world. Connected to MySQL」が表示されたらOK
[3] わざと間違えての動作確認
1) index.php を以下のように異なるパスワード「NGpassword」を設定する ~~~~ try { $db = new PDO('mysql:host=mysql;dbname=mysql', 'root', 'NGpassword'); ~~~~ 2) 「docker compose up -d --build」で再度立ち上げ直す 3) 以下のURLにアクセスする => 「Failed to connect MySQL(SQLSTATE[HY000] [1045] Access denied for user ...」 が表示されたらOK
[4] MySQLを接続する
# 方法1:直接繋ぐ sudo apt install mysql-client-core-8.0 mysql -u root -ppassword -h 127.0.0.1 mysql> \q Bye # 方法2:Docker内部に接続し、コンテナ内から接続 # docker container exec -it <MySQLのコンテナ名> bash docker container exec -it db bash mysql -u root -ppassword -h 127.0.0.1 mysql> \q Bye # 方法3:phpmyadmin から接続する
3)後片付け
# 一括停止する docker compose down # 停止する # docker compose stop docker compose ps # 削除 docker compose rm
関連記事
Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2017/09/23/235818
Docker ~ Linux / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2018/04/10/234030