实验报告
目录
一、 课堂练习
do
二、 课后作业
2. cgroups资源限制练习
4. 描述4种网络模式各自的特点
Host模式
Container模式
None模式
5. docker run容器网络类型练习
一、 课堂练习
代码:
vi eatcpu.sh
#! /bin/bash
i=0;
while true
do
i=i+1;
done
运行截图:
代码:
chmod +x eatcpu.sh
./eatcpu.sh
运行截图:
代码:
top
运行截图:
代码:
yum install libcgroup-tools
运行截图:
代码:
cgcreate -g cpu:/mylimit
ls /sys/fs/cgroup/cpu/mylimit/
cat /sys/fs/cgroup/cpu/mylimit/cpu.cfs_period_us
cat /sys/fs/cgroup/cpu/mylimit/cpu.cfs_quota_us
echo 50000 > /sys/fs/cgroup/cpu/mylimit/cpu.cfs_quota_us
cat /sys/fs/cgroup/cpu/mylimit/cpu.cfs_quota_us
运行截图:
代码:
echo 3022 >/sys/fs/cgroup/cpu/mylimit/tasks
运行截图:
代码:
cgdelete -g cpu:/mylimit
运行截图:
代码:
ps -ef | grep docker
运行截图:
代码:
docker run --net=none -it busybox sh
/ # ip a
运行截图:
二、 课后作业
题目:
1. 修改hpe_app_image的源文件,增加一个index2.html,构建后运行访问网页,验证结果。
过程:
1、查看hpe_app_image的id
2、进入该容器
3、找到存放html的位置并新建一个html文件
4、写一个简单的网页index2.html,保存并退出
5、在浏览器中输入网址localhost:8080/app/index2.html,即可得到之前写的网站。
题目:
2. cgroups资源限制练习
Ø 启动两个脚本进程,将两个脚本进程的ID都写入同一个cgroup的tasks里会是什么结果?
Ø 容器的CPU使用被限制为100m( millicores千分之一)=100/1000=0.1核心
Ø 限制容器只能使用128Mi内存
过程:
第1问:
1、写两个死循环进程
2、启动两个进程,可以看到它们的pid
3、将两个进程id都写入tasks中,结果也很好预见:对于该tasks的操作将同时对这两个进程操作,这两个进程均分同一个核,比如这里总数是10w,限制为1w,故两个进程cpu占用总数为1w。
第2问:
4、将容器的CPU使用被限制为100m,可以看到cpu占用率显著下降
第3问:
5、在memory中新建一个mylimit文件夹
6、将两个进程加入到tasks中去
7、限制内存为128M
题目:
3. 查找资料,在docker run的参数设置容器只能使用0.5Core CPU
过程:
题目:
4. 描述4种网络模式各自的特点
解答:
Host模式
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
Container模式
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
None模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
Birdge模式
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
题目:
5. docker run容器网络类型练习
Ø host模式:使用--net=host指定,查看容器的IP地址
Ø container模式:使用--net=container:mysql指定连接到mysql容器,查看容器的IP地址
过程:
第1问:
第二问:
1、开启MySQL
2、连接并查看ip
题目:
6. 用docker network命令,列出虚机上默认安装的几个docker网络 ,并解释这些网络
过程:
解释:
Ø 57ab1d84f3ff:以bridge方式连接webserver1,mysql,在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上,从而获得网络连接
Ø 8a790fc2c2c1:启动容器的时候使用host模式,此处并没有容器以此方法连接网络
Ø 88f018179554:Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。
题目:
7. 创建一个名为mynet的network,创建一个名为mybox的busybox容器,先用ifconfig查看此容器的网口,然后新开一个SHELL,运行命令将mybox容器接入mynet的网络里,查看容器网口的变化并说明
过程:
1、创建名为mynet的network
2、创建名为mybox的busybox容器
3、查看网关
4、连接mybox到mynet
5、查看网关,发现多了一个eth1,网关地址为mynet的地址
题目:
8. 创建名为mybox2的容器,也连接到mynet的网络里,试试运行ping mybox,是否能ping通,并解释返回的结果
过程:
1、创建mybox2
2、连接至mynet
3、进入mybox容器ping mybox2发现可以ping通
解释:
由于两个busybox在都在mynet下,所以可以相互ping通。
题目:
9. 创建第三个名为mybox3的容器。第四个名为mybox4的容器,
确保mybox3可以跟mybox1互通,不能跟mybox2 与mybox4互通,
同时mybox2与mybox4互通。
最后阐述你对docker network的理解和感受
过程:
1、创建mybox4
2、创建一个mybox3到mybox1的桥
3、通过mybox3to1连接mybox3和mybox1
4、将mybox4加入mynet
5、查看现在的容器情况
6、进入mybox3,发现能ping通的只有mybox1
7、进入mybox4发现只有mybox3无法ping通,其余情况也是一样,实验完成,符合要求。
理解和感受:
Docker net是一个非常实用的工具,它能实现不同容器之间的通信需求。对于一些公开的容器,可以加入到共同的net中去,对于一些独立的连接则可以通过自定义bridge来进行。