容器互聯實驗

一. 實驗目的:

  1. 熟悉容器之間基本的網絡原理;
  2. 掌握容器之間互聯的方法

二. 實驗環境:

Ubuntu16.04+Docker

三. 實驗內容:

  1. 練習容器之間互聯的方法

四、 實驗練習:

1.安裝網橋管理工具,並且查看網橋設備

(1)安裝網橋管理工具

apt-get install -y bridge-utils

如果找不到,先使用apt-cache search bridge查找

(2)查看網橋設備

sudo brctl show

(3)開啓一個容器

docker run -it --name test1 ubuntu:14.04 /bin/bash

進入docker,如果用ifconfig命令查看docker網絡情況,如果找不到命令command not found,因爲docker輕量級運行,沒有此命令,需要安裝,解決辦法:

  1. apt-get update更新索引
  2. apt-get install net-tools 安裝ifconfig命令
  3. apt-get install iputils-ping 安裝ping命令

(4)用ctrl+p+q退出但是保持容器的繼續運行,並且查看網橋設備

sudo brctl show

2.查看在默認情況下,在同一宿主機中運行的所有容器都是互聯的。

環境準備:用於測試docker鏡像的dockerfile

FROM ubuntu:14.04

RUN apt-get install -y ping

RUN apt-get update

RUN apt-get install -y nginx

RUN apt-get install -y curl

EXPOSE 80

CMD /bin/bash

構建鏡像 docker build -t catherine2005/cct .

測試:

(1)啓動一個容器cct1

docker run -it --name cct1 catherine2005/cct

(2)查看ip地址,

ifconfig

(3)啓動nginx

nginx

(4)ctrl+p+q轉到後臺

(5)啓動一個容器cct2

docker run -it --name cct2 catherine2005/cct

(6)查看ip地址

ifconfig

(7)此時使用ping命令,查看是否能夠ping通cct1

(8)使用curl http://172.17.0.8 ,看看ngnix服務有沒有正常啓動

(9)停止容器cct1,並且啓動一個新的容器test1

(10)重啓容器cct1,並查看容器內的ip地址,發現變化了

docker restart cct1

docker attach cct1

ifconfig

這說明docker不可靠,因爲每次重啓都可能導致ip地址發生變化。我的沒變化,我的比較可靠,哈哈哈。

3.創建第個容器時,將第個容器link到第一個容器中,這樣第個容器訪問第個容器時利用名字就能訪問

(1)啓動一個新容器cct3,並且使用link選項關聯cct1,別名爲webtest

docker run -it --name cct3 --link=cct1:webtest catherine2005/cct

(2)使用ifconfig命令查看自己的ip

(3)使用ping命令來看看容器cct1的別名webtest是否可以ping通

(4)查看一下環境變量,可以看到大量以WEBTEST*開頭的環境變量,這些環境變量是在容器啓動時,由docker添加的。

env  

(5)查看自己的環境映射

cat /etc/hosts

(6)Ctrl+p+q可以轉後臺

(7)重啓docker服務

service docker restart

(8)重啓容器cct1,cct2,cct3

docker restart cct1 cct2 cct3

(9)重新進入容器cct3

docker attach cct3

(10)使用ping命令來看看容器cct1的別名webtest是否可以ping通

(11)再次查看一下自己的環境變量

env

(12)查看自己的環境映射

cat /etc/hosts

4.拒絕容器之間的互聯

編輯docker默認配置文件

sudo vi /etc/default/docker

在其中加上 :DOCKER_OPTS="--icc=false"

(1)在/etc/systemd/system/multi-user.target.wants/docker.service 這個文件中加入和修改一下內容,在[Service]下添EnvironmentFile=-/etc/default/docker,在ExecStart=/usr/bin/docker daemon -H fd://後面加入$DOCKER_OPTS   

注意: fd://和$DOCKER_OPTS  不是連着的,需要有空格

(2)再次加載daemon

 systemctl daemon-reload

(3)重啓docker服務

 systemctl restart docker

(4)檢查配置已修改

ps -ef | grep docker

(5)啓動兩個容器

sudo docker start cct1 cct2

(6)# 在cct1容器中ping容器cct2的IP(不可ping通)

sudo ping <cct2-ip>

5.允許端口映射訪問

(1)# 使用filter表查看網絡訪問規則

sudo iptables -t filter -L -n

(2)啓動一個容器,並且指定容器開放的端口

docker run -it -p 80 --name cct5 catherine2005/cct

(3)在容器內部啓動nginx

(4)Ctrl+p+q轉到後臺

(5)使用ifconfig查看本機的ip 192.168.126.133

(6)查看容器映射主機的端口docker port cct5

(7)在本機上,curl http://127.0.0.1:32768(剛剛映射出來的端口號)

(8)使用iptables查看規則變化

sudo iptables -L -n

允許外部ip訪問這個內部機器

(9)使用ifconfig查看虛機的IP地址

(10)換臺虛擬機,使用下列命令查看cct5是否可以查看

curl 192.168.126.133:32768

第二臺虛擬機

如果本來沒有安裝curl,如何安裝?

sudo apt-get update

sudo apt install curl

6.阻止外部對容器的訪問

(1)啓動一個容器cct6

docker run -it --name cct6 -p 80 catherine2005/cct

(2)在容器內部啓動nginx

(3)查看cct6的ip地址,假設爲172.17.0.7

(4)Ctrl+p+q轉到後臺

(5)使用ifconfig查看本機的ip 192.168.126.133

(6)查看端口docker port cct6,假設爲32769

(7)# 查看第二臺虛擬機的ip地址

ifconfig

(8)建立規則,阻止ip地址爲192.168.126.132的ip訪問172.17.0.7(我們剛剛建立的容器的ip),使用tcp協議,設置端口爲80

sudo iptables -I DOCKER -s 192.168.137.131 -d 172.17.0.5 -p TCP --dport 80 -j DROP

(9)查看規則是否正確

(10)換臺虛擬機,使用下列命令查看cct6是否可以查看

curl 192.168.126.133:32769

無法查看

但是可以查看curl 192.168.126.133:32768

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章