Docker勉強メモ④ コンテナ間通信

## はじめに

Docker勉強メモ
- [Docker勉強メモ① DockerインストールからHelloWorld](https://qiita.com/zgw426/items/c0687bdfd3c58eaaac33)
- [Docker勉強メモ② Dockerイメージ作ってみる](https://qiita.com/zgw426/items/b480ae298e1f92cf1418)
- [Docker勉強メモ③ Dockerfileを作ってDockerイメージ作成からコンテナ起動までやってみる](https://qiita.com/zgw426/items/bea786da9128af30937f)
- [Docker勉強メモ④ コンテナ間通信](https://qiita.com/zgw426/items/bb42f6bd17707de354b9) **←ココ**
- [Docker勉強メモ⑤ ネットワーク通信](https://qiita.com/zgw426/items/9a76f48edb6f7e34dffe)

## やること

コンテナ間通信やってみる。

コンテナ間通信をする方法は2つ
- Dockerネットワークを作成してコンテナ名で接続できるようにする
- 「--link」オプションを使用する

「--link」オプションは、レガシーで削除の可能性あり、なので本記事ではスルー

## 豆知識

Docker のインストールは、自動的に３つのネットワークを作成
ネットワーク確認 : `docker network ls`
docker0 と表示されるブリッジ（ bridge ）ネットワーク
docker run --net=<ネットワーク名> と指定しないとdocker0になる
docker0情報は、ホストでifconfigで確認できる

## コンテナ間通信 : Dockerネットワーク

Dockerネットワーク（bridgeタイプ）を作成

```console:ホスト
$ docker network create wordpress-network
```


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

```console:ホスト
$ docker run --name mysql --network wordpress-network -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
$ docker run --name wordpress --network wordpress-network -e WORDPRESS_DB_PASSWORD=my-secret-pw -p 8080:80 -d wordpress
```

・DBとWebサーバのコンテナを作る
・同じネットワーク `wordpress-network` を指定する
・MySQLのコンテナ名は「mysql」とする
　↑WordPressのDockerイメージは、MySQLへの接続先の指定のホスト名が「mysql」だから
→これで、WordPressコンテナ（wordpress）からMySQLコンテナ（mysql）に向けて通信可になる


ポート指定の注意点

```console:ホスト
$ docker run --name mysql --network wordpress-network -p 13306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
```

図にするとこんな感じのはず

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/565ca394-711c-1530-d107-bd23a0ee9a3a.png)


## Dockerイメージを用いてコンテナ間で通信

次は、こんなの作ってみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274270/2b0f8beb-a304-6742-0352-b455f787d4d0.png)


※Dockerイメージを用いてコンテナ間で通信するためには、定義ファイルなどに接続先としてコンテナ名を指定しておくことが必要

```
[centos@ip-172-31-0-62 ~]$ mkdir nginx
[centos@ip-172-31-0-62 ~]$ touch nginx/Dockerfile
[centos@ip-172-31-0-62 ~]$ mkdir nginx/files
[centos@ip-172-31-0-62 ~]$ touch nginx/files/tomcat.conf
[centos@ip-172-31-0-62 ~]$ mkdir tomcat
[centos@ip-172-31-0-62 ~]$ touch tomcat/Dockerfile
[centos@ip-172-31-0-62 ~]$ mkdir tomcat/files
[centos@ip-172-31-0-62 ~]$ cd tomcat/files
[centos@ip-172-31-0-62 ~]$ wget http://ftp.riken.jp/net/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz
```

```dockerfile:nginx/Dockerfile
FROM nginx:latest

RUN rm -f /etc/nginx/conf.d/default.conf
COPY ./files/tomcat.conf /etc/nginx/conf.d/
```

```conf:nginx/files/tomcat.conf
server {
    location /tomcat/ {
        proxy_pass    http://tomcat-1:8080/;
    }
}
```

```dockerfile:tomcat/Dockerfile
FROM centos:latest
RUN yum install -y java
ADD files/apache-tomcat-9.0.31.tar.gz /opt/
CMD [ "/opt/apache-tomcat-9.0.31/bin/catalina.sh", "run" ]
```

```console:ホスト
[centos@ip-172-31-0-62 ~]$ tree
.
├── nginx
│   ├── Dockerfile
│   └── files
│       └── tomcat.conf
└── tomcat
    ├── Dockerfile
    └── files
        └── apache-tomcat-9.0.31.tar.gz
```

Nginxイメージ、Tomcatイメージの作成


```console:ホスト
$ cd ${SOME_DIR}/nginx
$ docker build -t nginx-tomcat:1 .
$ cd ${SOME_DIR}/tomcat
$ docker build -t tomcat:1 .
```

```console:ホスト
[centos@ip-172-31-0-62 tomcat]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx-tomcat        1                   1e137080691f        14 minutes ago      127MB
tomcat              1                   5ad4b2b915cf        3 hours ago         523MB
　・
　・
```

Dockerネットワーク作成、コンテナ起動

```console:ホスト
$ docker network create tomcat-network
$ docker run --name tomcat-1 --network tomcat-network -d tomcat:1
$ docker run --name nginx-tomcat-1 --network tomcat-network -p 10080:80 -d nginx-tomcat:1
```

```console:ホスト
[centos@ip-172-31-0-62 tomcat]$ docker ps -a
                                            CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                   NAMES
ab41de63e013        nginx-tomcat:1      "nginx -g 'daemon of…"   11 seconds ago      Up 10 seconds       0.0.0.0:10080->80/tcp   nginx-tomcat-1
4949f5632a5a        tomcat:1            "/opt/apache-tomcat-…"   20 seconds ago      Up 19 seconds                               tomcat-1
```

ホストから以下サイトを開ければ、nginx経由でtomcatのサイトが開けたことになる
http://localhost:10080/tomcat/