1.1. Docker默认的bridge网络管理
在进行Docker安装时,Docker就会自动创建三种网络。客户端可以通过网络管理指令进行查看,具体操作指令如下。
(其中bridge是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加到这两个网络时不能与外界网络通信)
(1)创建并启动容器
$docker run -itd --name=networktest ubuntu #该指令在后台启动了一个镜像名称为ubuntu的容器,并为启动后的容器命名为networktest
执行后我们可以使用 $docker images 和 $docker ps 分别查看镜像和容器的运行情况
$docker network inspect bridge
$ docker network create --driver bridge isloated_nw
#--drive 用于指定网络驱动类型,isolated_nw为新创建的网络名称。
$docker network ls #可用于查看新网络是否创建成功
$docker run --network=isolated_nw -itd --name=nwtest busybox
#执行上述指令后,会创建一个名为nwtest的容器,可看到--network参数指定了网络连接为isolated_nw
$docker inspect nwtest 可用于查看启动后容器的网络详情
#名为nwtest的容器使用的只有i自定义的isolated_nw一种网络管理方式,我们还可以添加默认的bridge模式到该容器,命令如下:
$docker network connect bridge nwtest
然后再次使用inspect查看网络详情,效果如下:
$docker network disconnect isolated_nw nwtest
注:一个容器可以添加若干网络,但当使用断开网络指令后,虽然容器还在运行,但容器内的应用将无法被外界访问。
(此处因为后面还要用到故先不断开,下一步也不移除。有需要时再使用这两命令)
(5)移除自定义网络
docker network rm isloated_nw
$docker run -itd --name=container1 busybox
$docker run -itd --name=container2 busybox
$docker run --network=isloated_nw -itd --mname=container3 busybox
(3)为container2容器新增一个自定义的isolated_nw网络连接
(4)容器地址查看
使用docker attach +容器名先查看各容器的网络地址
$docker attach container2 #进入container2使用ifconfig查看网络
用CTRL+p+q退出容器
注:每次重启后网络都会自动重新分配而发生变化,下面我的是重启后验证网络发生了点变化,有点不对应可忽略。
(5)容器通信测试
进入容器后使用ping -w 4 +IP或+容器名来查看已验证通信情况
(从上图可以看出,在container1内部不管是使用"ping IP"还是"ping 容器名称"都无法连通container3。这也就验证了两个容器不在同一个网络环境下,无法通信的判断。)
(从上图可以看出,在container2内部可以使用"ping IP"的命令同时连通container1和container3。)
(从上图可以看出,在container2内部可以使用"ping 容器名称"的命令可以连通container3,而连接container1错误。)
结论:
不同容器之间想要相互通信必须在同一个网络环境下;使用默认bridge网络管理的容器可以使用容器IP进行通信,但无法使用容器名称进行通信;而使用自定义网络的管理则同时使用容器IP和容器名称进行通信。
2.1. Docker Swarm使用
在/etc/hostname下可修改主机名称
(1)环境搭建
主机地址 | IP地址 |
---|---|
manager1 | 192.168.1.113 |
worker1 | 192.168.1.114 |
worker2 | 192.168.1.115 |
(2)创建Docker Swarm集群
(上述第一条命令执行后,Docker就会自动在IP为192.168.1.113的主机上(即manager1)创建一个Swarm集群,并将该IP地址的主机设置为集群管理节点。)
(3)向Docker Swarm集群添加工作节点
在worker1和worker2主机上执行在管理节点生成的token
(4)向Docker Swarm集群部署服务
上述部署服务指令中各参数具体说明如下:
docker service create指令:用于在Swarm集群中创建一个基于alpine镜像的服务。
replicas参数:指定了该服务只有一个副本实例。
name参数:指定创建成功后的服务名称为helloworld。
ping docker.com指令:表示服务启动后执行的命令。
(5)查看Docker Swarm集群中的服务
$docker service ls #查看当前集群中的服务列表信息
$docker service inspect helloworld #查看部署的服务具体详情
$docker service ps helloworld #查看指定服务在集群节点上的分配和运行情况
(6)更改Docker Swarm集群服务副本数量
(7)访问服务
上述命令在集群管理节点manager1上,执行命令查看网络列表。从结果可以看出,与非集群环境下的Docker网络相比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。在集群中发布任务时,如果没有指定网络,那么默认都是使用名为ingress网络连接的,而在实际开发中,则会使用自定义的overlay驱动网络进行服务管理。
在集群管理节点manager1上创建以overlay为驱动的自定义网络。
在manager1上,再次部署服务
上述部署服务指令中各参数具体说明如下:
network参数用于指定服务使用自定义的overlay驱动网络连接。
name参数:指定服务启动后的名称。
publish参数:用于映射对外服务端口。
replicas指令:用于指定该服务的副本数量。
nginx表示是基于nginx镜像构建的服务。
在manager1上使用docker service ps my-web指令看服务的两个服务副本运行情况
外界可通过IP+8080端口访问服务
3.1 Valumes数据卷使用
(1)创建并查看核查数据卷
(2)启动容器并加载数据卷
查看本机系统中的容器和数据卷
启动并挂载容器
再次查看本机容器和数据卷列表
查看容器详情
再次确认本机Docker文件系统中的容器和数据卷(root用户下)