LoginSignup
21
26

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-24

はじめに

Docker勉強メモ
- Docker勉強メモ① DockerインストールからHelloWorld
- Docker勉強メモ② Dockerイメージ作ってみる
- Docker勉強メモ③ Dockerfileを作ってDockerイメージ作成からコンテナ起動までやってみる
- Docker勉強メモ④ コンテナ間通信 ←ココ
- Docker勉強メモ⑤ ネットワーク通信

やること

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

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

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

豆知識

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

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

Dockerネットワーク(bridgeタイプ)を作成

ホスト
$ docker network create wordpress-network

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

ホスト
$ 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)に向けて通信可になる

ポート指定の注意点

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

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

image.png

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

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

image.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
nginx/Dockerfile
FROM nginx:latest

RUN rm -f /etc/nginx/conf.d/default.conf
COPY ./files/tomcat.conf /etc/nginx/conf.d/
nginx/files/tomcat.conf
server {
    location /tomcat/ {
        proxy_pass    http://tomcat-1:8080/;
    }
}
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" ]
ホスト
[centos@ip-172-31-0-62 ~]$ tree
.
├── nginx
│   ├── Dockerfile
│   └── files
│       └── tomcat.conf
└── tomcat
    ├── Dockerfile
    └── files
        └── apache-tomcat-9.0.31.tar.gz

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

ホスト
$ cd ${SOME_DIR}/nginx
$ docker build -t nginx-tomcat:1 .
$ cd ${SOME_DIR}/tomcat
$ docker build -t tomcat:1 .
ホスト
[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ネットワーク作成、コンテナ起動

ホスト
$ 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
ホスト
[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/

21
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
26