docker-composeを使わずに複数コンテナを動作させてみる

# はじめに
Dockerの勉強がてら、複数のコンテナをネットワークで接続する環境を作ってみました。
docker-composeを使ったサンプルは多くありますが、今回はnetoworkとvolumeの理解のために、docker-composeを使わずに作ってみました。

# 出来上がりイメージ
こんな感じにMySQLとWordPressのコンテナを作って、ネットワークで接続します
![wordpress.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674934/1bec46b8-975b-bd8d-9066-d365c86ca5c3.png)

# やってみる

### ネットーワーク
```console:ネットワーク作成
$ docker network create wp_network01

45c7e17407c45a01b07e5ae20bc7cebfe4064c787286bc2bd8672408651193da
```
```console:ネットワークの一覧
$ docker network ls

NETWORK ID     NAME          DRIVER    SCOPE
45c7e17407c4   wp_network01  bridge    local
```

### ボリューム
```console:ボリューム作成
$ docker volume create db-data

db-data

$ docker volume create wp-data

wp-data
```
```console:ボリュームの一覧
$ docker volume ls

DRIVER    VOLUME NAME
local     db-data
local     wp-data
```
```console:ボリュームの詳細確認
$ 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コンテナ
```console: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は新方式をサポートしていないため）

```console: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コンテナ
```console: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

```console: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
```

### http://localhost:8080/ へアクセス
無事立ち上がりました！
あまり身についた感はないので、別途色々と試してみようと思います
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674934/0f5e8992-ea6a-a2e9-299c-ecd1573ecf14.png" width="600">