dockerコンテナのリンク機能を使用して他のコンテナと通信する

LINEで送る
Pocket

はじめに

docker01_logo

前回の記事では、「コンテナのボリュームをホストのボリュームと紐づける」手順について書いて行きましたが、今回はdockerコンテナのリンク機能を使用して、他のコンテナと通信する手順について書いて行きたいと思います。

環境

  • OS:CentOS  7.3.1611 (Core)
  • Kernel:3.10.0-514.21.2.el7.x86_64
  • docker-ce:17.03.1.ce-1.el7.centos.x86_64

 

手順

今回は、nginxとCentOSのコンテナを起動して、CentOSコンテナからnginxコンテナのテストページへ通信するところまでを実施したい思います。

 

nginxコンテナ起動

# docker run -d --name nginx_cont nginx
8a6105254935734775fea3bac913d83b99bab970fee98513e12af728cab39c63
#
  • -d : コンテナをバックグランドで起動
  • –name : コンテナに名前を付ける (後の手順で、通信先の名前として使用する)

コンテナ状態確認

# docker ps -a
CONTAINER ID IMAGE COMMAND                CREATED        STATUS        PORTS  NAMES
8a6105254935 nginx "nginx -g 'daemon ..." 26 seconds ago Up 25 seconds 80/tcp nginx_cont
#

nginxコンテナの起動は確認出来ました。

「NAMES」が「nginx_cont」となっている事より、コンテナに名前が付いている事も確認できます。

CentOSコンテナ起動・ログイン

# docker run -it --name centos_cont --link nginx_cont centos /bin/bash
[root@32afeca17ab5 /]#
  • -it <イメージ名> /bin/bash : コンテナを起動して、bashをログインシェルとしてログインする
  • –name : コンテナに名前を付ける
  • –link <コンテナ名> : 通信先のコンテナを指定する事で、コンテナ間通信が可能となる

プロンプトのホスト名が変わった事より、コンテナにログインした事も確認できます。

nginxコンテナへの通信確認

[root@32afeca17ab5 /]# curl nginx_cont
<!DOCTYPE html>
<html>
:
<body>
<h1>Welcome to nginx!</h1>
:
</body>
</html>
[root@32afeca17ab5 /]#

curlコマンドでnginxコンテナのコンテナ名を指定して、nginxのテストページが取得出来たことより、コンテナ間の通信が取れた事を確認出来ました。

 

では、この「–link」でnginxコンテナはCentOSコンテナにどんな情報を渡しているのかを見てみましょう。

コマンドは、CentOSコンテナにログインした状態で実行しています。

/etc/hosts の確認

[root@32afeca17ab5 /]# cat /etc/hosts | grep nginx_cont
172.17.0.2 nginx_cont 8a6105254935
[root@32afeca17ab5 /]#

nginxコンテナのIPアドレスが登録されています。

環境変数の確認

[root@32afeca17ab5 /]# env | grep NGINX_CONT
NGINX_CONT_PORT_80_TCP=tcp://172.17.0.2:80
NGINX_CONT_PORT_80_TCP_PORT=80
NGINX_CONT_PORT_80_TCP_PROTO=tcp
NGINX_CONT_PORT=tcp://172.17.0.2:80
NGINX_CONT_ENV_NGINX_VERSION=1.13.2-1~stretch
NGINX_CONT_ENV_NJS_VERSION=1.13.2.0.1.11-1~stretch
NGINX_CONT_PORT_80_TCP_ADDR=172.17.0.2
NGINX_CONT_NAME=/centos_cont/nginx_cont
[root@32afeca17ab5 /]#

nginxコンテナが公開しているポート番号/プロトコルが確認できます。

上記の2つより、CentOSコンテナからは、nginxコンテナのコンテナ名のみを意識するだけで、コンテナ間通信が可能となっています

 

まとめ

これで、コンテナのリンク機能を使用して、他のコンテナと通信する手順について確認出来ました。

この機能を使用することで、Webサーバで受けた通信をAPサーバに渡す事や、APサーバで使用するデータをDBサーバから取得すると言う事も、コンテナで可能となります。

 

次回以降では、コンテナイメージの作成について書いて行きたいと思います。

 

LINEで送る
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

17 + four =