【Docker】Docker ~ WordPress ~

■ はじめに

https://dk521123.hatenablog.com/entry/2022/01/14/102719
https://dk521123.hatenablog.com/entry/2022/02/22/000000

の続き。

今回は、もう少し難易度があがり、複数の コンテナでやりとりする例として
WordPress を立ち上げるハンズオンをやってみる。
おさらいの意味で、Redmine もやってみる(基本同じ。以下の関連記事を参照のこと)。

https://dk521123.hatenablog.com/entry/2023/01/09/000000

Dockerはあまり実務で使わないので、結構、いい勉強になる。

補足1:元ネタとなった図書館で借りた本

目次

【0】目的
 1)全体の流れ
【1】ネットワークの作成
 1)コマンド例
【2】MySQLコンテナ作成
 1)構文
 2)コマンド例
【3】WordPressコンテナ作成
 1)構文
 2)コマンド例 
【4】動作確認
 1)コンテナ稼働の確認
 2)ブラウザによる確認
【5】後始末
 1)コマンド例

【0】目的

* 今回の学習目的として、複数コンテナ(MySQL & WordPress)
 を入れて運用する必要があるので、以下を学べる
~~~~~~
[1] Dockerネットワーク作成/削除
[2] 複数コンテナの連携
[3] Dockerコンテナ作成/削除(復習として)
[4] dockerコマンド(復習として)
~~~~~~

1)全体の流れ

【1】ネットワークの作成
【2】MySQLコンテナ作成
【3】WordPressコンテナ作成
【4】動作確認
【5】後始末

【1】ネットワークの作成

* WordPressは、以下で構成される
~~~~~~~
 [1] WordPressコンテナ
 [2] DBコンテナ(今回の場合、「MySQLコンテナ」)
~~~~~~~

* 「[1] WordPressコンテナ」⇒「[2] DBコンテナ」へアクセスする必要があるのだが
 そのためには、仮想的なネットワークを作り、双方のコンテナを所属させることで
 コンテナ間の通信が可能になる
 => docker network の詳細については、以下の関連記事を参照のこと

Docker ~ 基本編 / docker network ~
https://dk521123.hatenablog.com/entry/2022/04/30/000000

1)コマンド例

# クライアントとデーモン API の両方が、少なくとも 1.21 が必要
docker network create wordpress-network
# 「33b17...」的な文字列(ネットワークID)が表示されるはず

# 作成失敗して削除したい場合
# docker network rm wordpress-network

# 確認
docker network ls

<Output>
NETWORK ID     NAME                  DRIVER    SCOPE
33b17...   wordpress-network   bridge    local

【2】MySQLコンテナ作成

1)構文

docker container run
--name <Container Name>
# d:バックグラウンドで実行
# i: コンテナにキーボードを繋ぐ
# t: 特殊キーを使用可能にする
-dit
# 【1】で設定したネットワークを指定
# (今回の場合「wordpress-network」)
--net <Network Name>
# ポートの設定(任意)
-p <物理マシンのポート>:<コンテナのポート(MySQL 3306)>
# MySQLの環境変数の設定
-e MYSQL_DATABASE=<Database>
-e MYSQL_USER=<User Name>
-e MYSQL_PASSWORD=<User password>
-e MYSQL_ROOT_PASSWORD=<Roo user password>
# 対象コンテナのイメージ : MySQL
mysql
# MySQL設定
--character-set-server=<文字コード(e.g. 'utf8mb4')>
--collation-server=<照合順序(e.g. 'utf8mb4_unicode_ci')>
--default-authentication-plugin=<認証方式 (e.g. 'mysql_native_password')>

2)コマンド例

# MySQLコンテナ作成例
docker container run \
--name mysql-for-wordpress \
-dit \
--net wordpress-network \
-p 13306:3306 \
-e MYSQL_DATABASE=wordpress_db \
-e MYSQL_USER=wordpress_admin \
-e MYSQL_PASSWORD=password \
-e MYSQL_ROOT_PASSWORD=root_password \
mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--default-authentication-plugin=mysql_native_password

【3】WordPressコンテナ作成

1)構文

docker container run
--name <Container Name>
# d:バックグラウンドで実行
# i: コンテナにキーボードを繋ぐ
# t: 特殊キーを使用可能にする
-dit
# 【1】で設定したネットワークを指定
# (今回の場合「wordpress-network」)
--net <Network Name>
# ポートの設定
-p <物理マシンのポート>:<コンテナのポート(Apache HTTP 80)>
# WordPressの環境変数の設定
-e WORDPRESS_DB_HOST=<DB container name (今回の場合「mysql-for-wordpress」)>
-e WORDPRESS_DB_NAME=<DB name (今回の場合「wordpress_db」)>
-e WORDPRESS_DB_USER=<User name (今回の場合「wordpress_admin」)>
-e WORDPRESS_DB_PASSWORD=<DB user password (今回の場合「password」)>
# 対象コンテナのイメージ : WordPress
wordpress

2)コマンド例

# WordPressコンテナ作成例
docker container run \
--name helloworld_wordpress \
-dit \
--net wordpress-network \
-p 18080:80 \
-e WORDPRESS_DB_HOST=mysql-for-wordpress \
-e WORDPRESS_DB_NAME=wordpress_db \
-e WORDPRESS_DB_USER=wordpress_admin \
-e WORDPRESS_DB_PASSWORD=password \
wordpress

【4】動作確認

1)コンテナ稼働の確認

コマンド例

# コンテナ稼働の確認(2つのコンテナが「STATUS: Up」だったらOK)
docker container ps

<Output>
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
44a28...   wordpress   "docker-entrypoint.s…"   53 seconds ago   Up 51 seconds   0.0.0.0:18080->80/tcp, :::18080->80/tcp                  helloworld_wordpress
33b17...   mysql       "docker-entrypoint.s…"   17 minutes ago   Up 17 minutes   33060/tcp, 0.0.0.0:13306->3306/tcp, :::13306->3306/tcp   mysql-for-wordpress

2)ブラウザによる確認

* ブラウザで以下のURLにアクセス
 => WordPress の画面がでてきたらOK

http://localhost:18080/

【5】後始末

* 具体的には、以下を行う
 [1] コンテナ停止
 [2] コンテナ削除
 [3] イメージ削除
 [4] ネットワーク削除

1)コマンド例

[1] コンテナ停止

# docker container stop <Container Name>
docker container stop helloworld_wordpress
docker container stop mysql-for-wordpress

[2] コンテナ削除

# docker container rm <Container Name>
docker container rm helloworld_wordpress
docker container rm mysql-for-wordpress

# 確認
docker ps -a

[3] イメージ削除

# docker image rm <Image Name>
docker image rm wordpress
docker image rm mysql

# 確認
docker image ls

[4] ネットワーク削除

# docker network rm <Network Name>
docker network rm wordpress-network

# 確認
docker network ls

関連記事

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
Docker ~ 基本編 / docker network ~
https://dk521123.hatenablog.com/entry/2022/04/30/000000
Docker ~ GO言語 ~
https://dk521123.hatenablog.com/entry/2022/01/14/102719
Docker ~ Webサーバ ~
https://dk521123.hatenablog.com/entry/2022/02/22/000000
Docker ~ Redmine
https://dk521123.hatenablog.com/entry/2023/01/09/000000
Docker ~ LAMP
https://dk521123.hatenablog.com/entry/2023/01/12/000000