Docker for Macでさくっとコンテナ間通信

Contents


はじめに

お試しでWordPressとMySQLのコンテナを作成したとき、--linkオプションを使ってWordPressコンテナとMySQLコンテナ間の通信を可能にしていたが、実はこれはレガシー機能らしく、
Dockerネットワークを作成してコンテナ間通信させるのが推奨とされているらしい。Dockerネットワークを作成するメリットはDNSが設定されるため、コンテナ名で名前解決ができることみたい。
今回も細かいことはすっとばして、簡単に体験してみるのが目的。

 

Dockerネットワークの作成

WordPressとMySQL間の通信用にDockerネットワーク「wp-network」を作成。

$ docker network create wp-network

「wp-network」が作成されたことを確認。

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1e77dc96ef6c        bridge              bridge              local
39ceb5045065        host                host                local
a266b0b7d53a        none                null                local
1f3468ea6fcf        wp-network          bridge              local

1番上の「bridge」はデフォルトのDockerネットワークです。名前解決ができないため、コンテナ間通信をするときは--linkオプションを使うか、自動で割り当てられるIPアドレスを指定する必要があります。

作成成したDockerネットワークの詳細確認

$ docker network inspect wp-network
[
    {
        "Name": "wp-network",
        "Id": "1f3468ea6fcfe9fb5cf25bef268f5611f1dc616c8884158b2e4551365fdf8a8d",
        "Created": "2018-08-09T17:33:28.602968112Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

 

Dockerネットワークを指定してコンテナ起動

今回は下の「Dockerネットワークを使ったコンテナの作成」でコンテナ起動します。

-linkオプションををつかったコンテナ作成

$ docker run --name dev-mysql57 -e MYSQL_ROOT_PASSWORD=<パスワード> -d mysql:5.7
$ docker run --name dev-wordpress --link dev-mysql57:mysql -p 8080:80 -d wordpress

Dockerネットワークを使ったコンテナの作成
※MySQLのコンテナ名はWordPressが「mysql」で接続するようなので「mysql」で指定。

$ docker run --name mysql --network wp-network -e MYSQL_ROOT_PASSWORD=<パスワード> -d mysql:5.7
$ docker run --name dev-wordpress --network wp-network -e WORDPRESS_DB_PASSWORD=<パスワード> -p 8080:80 -d wordpress

作成したコンテナの確認。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
2d90feabd633        wordpress           "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:8080->80/tcp   dev-wordpress
00c18f92e45c        mysql:5.7           "docker-entrypoint.s…"   3 minutes ago       Up 3 minutes        3306/tcp               mysql

http://127.0.0.1:8080 でWordPressの画面が表示されればOK。

 

参考

Docker入門(第五回)〜コンテナ間通信〜