Dockerのコンテナ間通信

一つのコンテナでは一つの機能を動かす構成にする場合が多い
コンテナ間での通信が必要になる

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

### Dockerネットワークの作成
Dockerネットワークを作成してコンテナ間通信できるようにする
$ sudo docker network create wordpress-network
$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
31273346499c bridge bridge local
4871671c00c4 host host local
a83a0f7dda37 none null local
947b80aea44c wordpress-network bridge local
※bridgeネットワークはDNS設定がされていないため、名前解決ができずネットワーク通信ができない。
// Dockerネットワーク詳細
$ sudo docker network inspect wordpress-network

### ネットワークを指定してコンテナを起動
// mysql5.7
$ sudo docker run –name mysql –network wordpress-network -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
// wordpress
$ sudo docker run –name wordpress –network wordpress-network -e WORDPRESS_DB_PASSWORD=my-secret-pw -p 8080:80 -d wordpress
http://192.168.33.10:8080/wp-admin/install.php

※MySQLのコンテナに接続できるようにするためには
$ sudo docker run –name mysql –network wordpress-network -p 13306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7

「–link」オプションはレガシー機能
sudo docker run –name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
sudo docker run –name some-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw –link some-mysql:mysql -d -p 8080:80 wordpress

### Nginx、Tomcatコンテナでのコンテナ間通信
$ mkdir tutorial
$ cd tutorial
$ mkdir nginx
$ mkdir tomcat
$ cd nginx
$ sudo vi Dockerfile

FROM nginx:latest

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

$ mkdir files
$ cd files
$ sudo vi tomcat.conf

server {
    location /tomcat/ {
         proxy_pass http://tomcat-1:8080/;
    }
}

// Nginxイメージ作成
$ cd ..
$ sudo docker build -t nginx-tomcat:1 .

### Docker network作成、コンテナ起動
$ sudo docker network create tomcat-network
$ sudo docker rm 5093
$ sudo docker run –name tomcat-1 –network tomcat-network -d tomcat:1
$ sudo docker run –name nginx-tomcat-1 –network tomcat-network -p 10080:80 -d nginx-tomcat:1
http://192.168.33.10:10080/tomcat/