容器互联实验

一. 实验目的:

  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

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