一. 實驗目的:
- 熟悉容器之間基本的網絡原理;
- 掌握容器之間互聯的方法;
二. 實驗環境:
Ubuntu16.04+Docker
三. 實驗內容:
- 練習容器之間互聯的方法;
四、 實驗練習:
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輕量級運行,沒有此命令,需要安裝,解決辦法:
- apt-get update更新索引
- apt-get install net-tools 安裝ifconfig命令
- 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