LoginSignup
1
1

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勉強メモ⑤ ネットワーク通信 ←ココ

やること

他のEC2インスタンスからDockerコンテナへの通信確認
以下2つの場合で通信できることを確認する

image.png

大きな緑の●から▲までのネットワーク通信できることを確認する

準備:Dockerインストール

これまで(Docker勉強メモ①~④)と違うOS Linux2 を使う。
Linux2 : amzn2-ami-hvm-2.0.20200304.0-x86_64-gp2 (ami-052652af12b58691f)

EC2インスタンスを2つ(host01, host02)作成し、Dockerをインストールする

image.png

host01
$ 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
# -> 設定反映のため再接続

(オプション)必要なら以下もやる

host01
# 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)

この通信を確認する

image.png

確認に必要な環境はこれ

image.png

host01
# Dockerネットワーク作成
$ docker network create docnetHoge
# 作成したDockerネットワークを指定してDockerコンテナ起動
$ docker run -it -d --privileged --name containerA --network docnetHoge -p 10080:80 -d amazonlinux:latest

起動したDockerコンテナ containerA はこのようになっている。

host01
[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に入る

host01
[ec2-user@ip-172-31-5-10 ~]$ docker exec -it containerA bash
bash-4.2# 

containerAの内部IPの確認と、簡易Webサーバを立てる

containerA
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サイトが開くことを確認 ↓

host01
[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サイトが開くことを確認 ↓

host02
[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)

この通信を確認する

image.png

確認に必要な環境

image.png

host02 に Dockerコンテナ containerB を起動する

host02
$ 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サイトが開いた

containerB
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>
 :
 :

通信できることを確認できた。

1
1
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
1
1