はじめに
Docker勉強メモ
- Docker勉強メモ① DockerインストールからHelloWorld
- Docker勉強メモ② Dockerイメージ作ってみる
- Docker勉強メモ③ Dockerfileを作ってDockerイメージ作成からコンテナ起動までやってみる
- Docker勉強メモ④ コンテナ間通信
- Docker勉強メモ⑤ ネットワーク通信 ←ココ
やること
他のEC2インスタンスからDockerコンテナへの通信確認
以下2つの場合で通信できることを確認する
大きな緑の●から▲までのネットワーク通信できることを確認する
準備:Dockerインストール
これまで(Docker勉強メモ①~④)と違うOS Linux2
を使う。
Linux2 : amzn2-ami-hvm-2.0.20200304.0-x86_64-gp2 (ami-052652af12b58691f)
EC2インスタンスを2つ(host01, host02)作成し、Dockerをインストールする
$ sudo yum update -y
$ sudo amazon-linux-extras install docker -y
$ sudo service docker start
$ ps -ef |grep docker
$ sudo usermod -a -G docker ec2-user
# -> 設定反映のため再接続
(オプション)必要なら以下もやる
# Dockerサービス自動起動
$ sudo systemctl enable docker
# docker-composeインストール
$ sudo curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
通信確認(1)
この通信を確認する
確認に必要な環境はこれ
# Dockerネットワーク作成
$ docker network create docnetHoge
# 作成したDockerネットワークを指定してDockerコンテナ起動
$ docker run -it -d --privileged --name containerA --network docnetHoge -p 10080:80 -d amazonlinux:latest
起動したDockerコンテナ containerA
はこのようになっている。
[ec2-user@ip-172-31-5-10 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6d137b5cbc9 amazonlinux:latest "/bin/bash" 11 seconds ago Up 10 seconds 0.0.0.0:10080->80/tcp containerA
Dockerコンテナ containerA
をWebサイトにするため、containerA
に入る
[ec2-user@ip-172-31-5-10 ~]$ docker exec -it containerA bash
bash-4.2#
containerA
の内部IPの確認と、簡易Webサーバを立てる
bash-4.2# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2 c6d137b5cbc9
bash-4.2# python -m SimpleHTTPServer 80
Serving HTTP on 0.0.0.0 port 80 ...
172.18.0.1 - - [24/Mar/2020 07:49:41] "GET / HTTP/1.1" 200 -
ホスト host01
で、Webサイトが開くことを確認 ↓
[ec2-user@ip-172-31-5-10 ~]$ curl http://localhost:10080/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href=".dockerenv">.dockerenv</a>
<li><a href="bin/">bin@</a>
<li><a href="boot/">boot/</a>
<li><a href="dev/">dev/</a>
<li><a href="etc/">etc/</a>
<li><a href="home/">home/</a>
<li><a href="lib/">lib@</a>
<li><a href="lib64/">lib64@</a>
:
:
ホスト host02
で、Webサイトが開くことを確認 ↓
[ec2-user@ip-172-31-7-186 ~]$ curl http://172.31.5.10:10080/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href=".dockerenv">.dockerenv</a>
<li><a href="bin/">bin@</a>
<li><a href="boot/">boot/</a>
<li><a href="dev/">dev/</a>
<li><a href="etc/">etc/</a>
:
:
# Dockerコンテナのホスト名の名前解決はできない(想定通り)
[ec2-user@ip-172-31-7-186 ~]$ curl http://containerA:10080/
curl: (6) Could not resolve host: containerA
通信できることを確認できた。
通信確認(2)
この通信を確認する
確認に必要な環境
host02 に Dockerコンテナ containerB
を起動する
$ docker network create docnetFuga --subnet 192.168.10.0/24
$ docker run -it -d --privileged --name containerB --network docnetFuga -p 10081:81 -d amazonlinux:latest
containerB
から、containerA
のWebサイトが開いた
bash-4.2# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
192.168.10.2 cc720822b8ff
bash-4.2# curl http://172.31.5.10:10080/
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
<title>Directory listing for /</title>
<body>
<h2>Directory listing for /</h2>
<hr>
<ul>
<li><a href=".dockerenv">.dockerenv</a>
<li><a href="bin/">bin@</a>
<li><a href="boot/">boot/</a>
<li><a href="dev/">dev/</a>
:
:
通信できることを確認できた。