(1)通过实训平台进入到操作系统界面,在#后输入docker run -i -t -d --net=none ubuntu /bin/bash命令,启动一个/bin/bash容器,示例代码如图1所示:
(2)在#后输入docker ps -a命令,查看当前运行容器ID,在#后输入docker inspect -f ‘{{.State.Pid}}’ 3fa0fc99b961(为docker ps -a查找的ID),查看容器进程ID,示例代码如图2所示:
在#后输入mkdir -p /var/run/netns命令,创建网络命名空间,然后在#后输入ln -s /proc/11912/ns/net /var/run/netns/11912(为前面查看的容器进程ID)命令,示例代码如下:
[root@xxx ~]# mkdir -p /var/run/netns
[root@xxx ~]# ln -s /proc/11912/ns/net /var/run/netns/11912
(3)在#后输入yum install bridge-utils -y命令,安装brctl命令,示例代码执行如图3所示:
(4)通过在#后输入ip addr show docker0命令,检查桥接网卡地址信息,示例代码如图4所示:
(5)在#后输入以下命令,创建一对veth pair接口A和B,绑定A到网桥docker0,并启用它。示例代码如下:
[root@xxx ~]# ip link add A type veth peer name B
[root@xxx ~]# brctl addif docker0 A
[root@xxx ~]# ip link set A up
(6)在#后输入以下命令,将B放到容器的网络命名空间,命名为eth0,启动它并配置一个可用IP(桥接网段)和默认网关(网关为桥接网卡地址信息),pid=11912(为容器进程ID)示例代码如下:
[root@xxx ~]# pid=11912
[root@xxx ~]# ip link set B netns $pid
[root@xxx ~]# ip netns exec $pid ip link set dev B name eth0
[root@xxx ~]# ip netns exec $pid ip link set eth0 up
[root@xxx ~]# ip netns exec $pid ip addr add 172.17.0.99/16 dev eth0
[root@xxx ~]# ip netns exec $pid ip route add default via 172.17.0.1
(7)在#后输入ping 172.17.0.99 -c 4命令,进行通信测试,示例代码如图5所示:
(1)在#后输入docker run -d -P training/webapp python app.py命令,然后在#后输入docker ps -l命令,查看到本地主机32768端口被映射到了容器的5000端口。此时访问本机32768端口即可访问容器内Web应用提供的页面。示例代码如图6所示:
(2)在#后输入docker logs -f dreamy_easley(为容器名称)命令,查看应用信息,查看完毕后按CTRL+C组合键退出,示例代码如图7所示:
(3)在#后输入docker run -d -p 5000:5000 training/webapp python app.py命令,启动容器并将本地5000端口映射到容器的5000端口,然后在#后输入docker ps -l命令查看,示例代码如图8所示:
(4)在#后输入docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py命令,在#后输入docker ps -l命令查看,使用ip:hostPort:containerPort格式指定127.0.0.1的5001端口到容器的5000端口,示例代码如图9所示:
(5)在#后输入docker run -d -p 127.0.0.1::5000 training/webapp python app.py命令,在#后输入docker ps -l命令查看,使用ip::containerPort格式绑定127.0.0.1的任意端口到容器的5000端口,示例代码如图10所示:
(6)在#后输入docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py命令,在#后输入docker ps -l命令查看,使用udp标记来指定udp端口,示例代码如图11所示:
(7)在#后输入docker port dreamy_shockley 5000/udp(容器名字为docker ps -l查询)命令,查看当前映射的端口配置,可以查看到绑定的地址,示例代码如图12所示:
(8)在#后输入docker run -d -p 5002:5000 -p 3000:80 training/webapp python app.py命令,在#后输入docker ps -l命令查看,“-p”标记可以多次使用来绑定多个端口,示例代码如图13所示:
(1)在#后输入docker run -d --name db training/postgres命令,创建一个新的数据库容器,在#后输入docker ps -l命令查看启动的容器。示例代码如图14所示:
(2)在#后输入docker run -d -P --name web --link db:db training/webapp python app.py命令,创建一个web容器,并将它连接到db容器,在#后输入docker ps命令查看容器的连接。示例代码如图15所示:
可以看到自定义命名的容器db和web,db容器的names列有db也有web/db。这表示web容器链接到db容器,web容器将被允许访问db容器的信息。
(3)在#后输入docker run --rm --name web2 --link db:db training/webapp env命令,查看web容器的环境变量。示例代码如图16所示:
(1)在#后输入brctl show命令,查看网桥和端口连接信息。示例代码如图17所示:
(2)在#后输入docker run -i -t --rm centos /bin/bash命令,启动一个容器,然后在#后输入yum install iproute -y命令,安装ip命令。示例代码如图18所示、如图19所示:
(3)在#后输入ip addr show eth0命令,查看容器eth0网络信息,然后在#后输入ip route命令,查看容器默认网关信息,在#后输入exit命令,退出容器。网络信息与宿主机网络一致。示例代码如图20所示:
(4)在#后输入如下命令,将docker服务停止,删除docker0网桥,并创建bridge0网桥,给予网桥192.168.5.1/24的IP地址,输入代码如下:
[root@xxx ~]# service docker stop
[root@xxx ~]# ip link set dev docker0 down
[root@xxx ~]# brctl delbr docker0
[root@xxx ~]# brctl addbr bridge0
[root@xxx ~]# ip addr add 192.168.5.1/24 dev bridge0
[root@xxx ~]# ip link set dev bridge0 up
在#后输入ip addr show bridge0命令,查看创建网桥信息,示例代码如图21所示:
(5)在#后输入echo ’ {“bridge”: “bridge0”} ’ > /etc/docker/daemon.json命令,修改docker默认网桥,然后在#后输入systemctl start docker命令,启动docker服务,示例代码如下:
[root@xxx ~]# echo ’ {“bridge”: “bridge0”} ’ > /etc/docker/daemon.json
[root@xxx ~]# systemctl start docker
(6) 在#后输入docker run -d -it --name centos1 centos命令,启动一个容器,示例代码如下:
[root@xxx ~]# docker run -d -it --name centos1 centos
(7)在#后输入docker exec -it centos1 /bin/bash命令,进入容器中,然后在#后输入yum install net-tools -y命令,安装net-tools服务,示例代码如图22所示:
在#后输入ifconfig eth0命令,查看当前eth0网卡信息,和更改bridge0网桥的地址在同一个地址段中,在#后输入exit命令,退出容器命令行。示例代码如图23所示:
(8)创建一对peer接口,分别放到两个容器中,配置成点到点链路类型,启动两个容器,通过在#后输入以下命令,代码如下:
[root@xxx ~]# docker run -d -it --net=none --name centos2 centos /bin/bash
[root@xxx ~]# docker run -d -it --net=none --name centos3 centos /bin/bash
找到进程号,然后创建网络命名空间的跟踪文件,在#后输入以下命令,代码如下:
[root@xxx ~]# docker inspect -f ‘{{.State.Pid}}’ centos2
21020
[root@xxx ~]# docker inspect -f ‘{{.State.Pid}}’ centos3
21103[root@xxx ~]# ln -s /proc/21020/ns/net /var/run/netns/21020
[root@xxx ~]# ln -s /proc/21103/ns/net /var/run/netns/21103
创建一对peer接口,然后配置路由,在#后输入以下命令,代码如下:
[root@xxx ~]# ip link add A type veth peer name B
[root@xxx ~]# ip link set A netns 21020
[root@xxx ~]# ip netns exec 21020 ip addr add 10.1.1.1/32 dev A
[root@xxx ~]# ip netns exec 21020 ip link set A up
[root@xxx ~]# ip netns exec 21020 ip route add 10.1.1.2/32 dev A
[root@xxx ~]# ip link set B netns 21103
[root@xxx ~]# ip netns exec 21103 ip addr add 10.1.1.2/32 dev B
[root@xxx ~]# ip netns exec 21103 ip link set B up
[root@xxx ~]# ip netns exec 21103 ip route add 10.1.1.1/32 dev B
(9)在#后输入docker exec -it centos2 /bin/bash命令,进入容器中,然后在#后输入ping 10.1.1.2 -c 4命令,对两个容器直接创建的peer接口进行通信测试。示例代码如图25所示: