はじめに
Dockerの勉強がてら、複数のコンテナをネットワークで接続する環境を作ってみました。
docker-composeを使ったサンプルは多くありますが、今回はnetoworkとvolumeの理解のために、docker-composeを使わずに作ってみました。
出来上がりイメージ
こんな感じにMySQLとWordPressのコンテナを作って、ネットワークで接続します
やってみる
ネットーワーク
ネットワーク作成
$ docker network create wp_network01
45c7e17407c45a01b07e5ae20bc7cebfe4064c787286bc2bd8672408651193da
ネットワークの一覧
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
45c7e17407c4 wp_network01 bridge local
ボリューム
ボリューム作成
$ docker volume create db-data
db-data
$ docker volume create wp-data
wp-data
ボリュームの一覧
$ docker volume ls
DRIVER VOLUME NAME
local db-data
local wp-data
ボリュームの詳細確認
$ docker volume inspect db-data
[
{
"CreatedAt": "2022-08-20T00:40:11Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/db-data/_data",
"Name": "db-data",
"Options": {},
"Scope": "local"
}
]
$ docker volume inspect wp-data
[
{
"CreatedAt": "2022-08-20T00:40:18Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/wp-data/_data",
"Name": "wp-data",
"Options": {},
"Scope": "local"
}
]
MySQLコンテナ
MySQLコンテナ作成と起動
$ docker run --restart=always --name mysql01 -dit --net=wp_network01 -v db-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=db -e MYSQL_USER=user -e MYSQL_PASSWORD=pass mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
Unable to find image 'mysql:latest' locally
latest: Pulling from library/mysql
32c1bf40aba1: Pull complete
3ac22f3a638d: Pull complete
~~(省略)~~
857b301f5e480b5eaca2b5f968597ca5d3ca0483153c0473e5d267dc8ae51a74
- オプション一覧
オプション | 意味合い | 設定値 |
---|---|---|
--restart | 再起動オプション | always |
--net | ネットワーク名(作成したネットワーク名を指定) | wp_network01 |
-v | ボリューム名(作成したボリューム名:コンテナ内のディレクトリ) | db-data:/var/lib/mysql |
--name | MySQLコンテナ名 | mysql01 |
-e MYSQL_ROOT_PASSWORD | MySQLのrootパスワード | root |
-e MYSQL_DATABASE | MySQLのデータベース名 | db |
-e MYSQL_USER | MySQLのユーザ名 | user |
-e MYSQL_PASSWORD | MySQLのパスワード | pass |
- 引数一覧
引数 | 設定値 | 意味合い |
---|---|---|
--character-set-server | utf8mb4 | 文字コードをUTF-8にする |
--collation-server | utf8mb4_unicode_ci | 照合順序をUTF-8にする |
--default-authentication-plugin | mysql_native_password | 認証方式を旧式にする(WordPressは新方式をサポートしていないため) |
MySQLコンテナの起動確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
857b301f5e48 mysql "docker-entrypoint.s…" 31 seconds ago Up 30 seconds 3306/tcp, 33060/tcp mysql01
WordPressコンテナ
WordPressコンテナ作成と起動
$ docker run --restart=always --name wordpress01 -dit --net=wp_network01 -v wp-data:/var/www/html -p 8080:80 -e WORDPRESS_DB_HOST=mysql01 -e WORDPRESS_DB_NAME=db -e WORDPRESS_DB_USER=user -e WORDPRESS_DB_PASSWORD=pass wordpress
Unable to find image 'wordpress:latest' locally
latest: Pulling from library/wordpress
1efc276f4ff9: Pull complete
3239fd0772e9: Pull complete
~~(省略)~~
74151d1d4ea6f2c606d65d42a7a40f3e8421a074b00744cf799b8c711d28ad06
- オプション一覧
オプション | 意味合い | 設定値 |
---|---|---|
--restart | 再起動オプション | always |
--net | ネットワーク名(作成したネットワーク名を指定) | wp_network01 |
-v | ボリューム名(作成したボリューム名:コンテナ内のディレクトリ) | wp-data:/var/www/html |
--name | WordPressコンテナ名 | wordpress01 |
-p | ポート番号 | 8080:80 |
-e WORDPRESS_DB_HOST | DBのコンテナ名(作成したMySQLのもの) | mysql01 |
-e WORDPRESS_DB_NAME | DBの名称(作成したMySQLのもの) | db |
-e WORDPRESS_DB_USER | DBのユーザ名(作成したMySQLのもの) | user |
-e WORDPRESS_DB_PASSWORD | DBのパスワード(作成したMySQLのもの) | pass |
WordPressコンテナの起動確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74151d1d4ea6 wordpress "docker-entrypoint.s…" 4 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp wordpress01
857b301f5e48 mysql "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 3306/tcp, 33060/tcp mysql01