Docker中的网络与数据管理
一、Docker网络管理
1.1 Docker默认网络管理
1.客户端通过网络管理指令进行查看
2.创建并启动容器
3.使用网络查看指令查看网络详情
1.2 Docker自定义bridge网络
1.使用create命令创建一个名为isolated_nw的自定义网络
2.使用该自定义网络启动一个容器
3.通过docker inspect nwtest指令查看启动后的容器网络详情
4.为容器添加网络管理,查看详情
5.断开网络容器连接
6.移除自定义网络
1.3 容器之间的网络通信
1.3.1创建容器
1.创建两个使用默认的bridge网络的容器
2.创建一个使用自定义的isolated_nw网络
3.为container2容器新增一个自定义的isolated_nw网络连接
1.3.2 容器地址查看
4.查看container2的地址
5.查看container1的地址
6.查看container3的地址
1.3.3 容器通信测试
7.在container1中ping验证container3,结果不通
8.进入container2通过ping IP地址来验证容器1和容器3的连通性
9.在容器2中通过ping容器1和容器3的名称验证连通性,结果只有容器3可以正常通信
二、Docker Swarm集群
2.1 环境搭建
环境要求:
(1)准备3台Ubuntu系统主机(即用于搭建集群的3个Docker机器),每台机器上都需安装Docker并且可以连接网络,同时要求Docker版本都必须是1.12及以上,因为老版本不支持Docker Swarm
(2) 集群管理节点Docker机器的IP地址必须固定,集群中的所有节点都能够访问该管理节点
(3)集群之间必须使用相应的协议并保证一下端口可用:
- 用于集群管理通信的TCP端口2377
- TCP和UDP端口7946,用于节点间的通信
- UDP端口4789,用于覆盖网络流量
1.manager1主机(IP:192.168.10.117)
2.worker1主机(IP:192.168.10.118)
3.worker2主机(IP:192.168.10.119)
2.2 创建Docker Swarm集群
1.在manager1的docker机器上创建Docker Swarm集群
2.在管理节点上查看集群节点信息
3.修改目录权限
2.3 向Docker Swarm集群添加工作节点
1.在worker1节点上添加工作节点
2.在worker2节点上添加工作节点
3.再次在管理节点上查看集群节点信息
2.4 向Docker Swarm集群部署服务
1.使用Docker Hub上自带的alpine镜像部署集群服务
2.5 查看Docker Swarm集群中的服务
1.查看部署服务的具体详情
2.查看指定服务在集群节点上的分配和运行情况
2.6 更改集群Docker Swarm集群服务副本数量
1.更改副本数量为5
2.查看副本服务在3个节点上的具体分配和运行情况
3.在各个节点的运行情况
2.7 删除服务
1.删除不需要的服务
2.验证服务是否删除成功
2.8 访问服务
1.查看网络列表
2.在manager1上,创建以overlay为驱动的自定义网络
3.在manager1节点上,再次部署服务
4.查看服务的两个服务副本运行情况
5.外界访问服务
三、Volumes数据卷管理
3.1 volumes数据卷使用
3.1.1 创建并管理数据卷
1.创建一个名为my-vol的数据卷
2.查看数据卷
3.核查数据卷
4.删除数据卷
3.1.2 启动容器并加载数据卷
1.查看本机容器和数据卷
2.确认查看本机Docker文件系统中的容器和数据卷
3.启动容器并挂载数据卷
4.再次查看本机容器和数据卷列表
5.检查容器详情
6.再次确认本机Docker文件系统中的容器和数据卷
四、错误及解决方案
错误一:
容器进行网络通信时,进入容器container2,通过ping容器1和容器3的名称进行测试。
container1和container2在同一个默认的bridge网络管理下,可以通过IP相互通信,不能通过名称进行通信。
container2和container3在同一个自定义的isolated_nw网络管理下,这两个容器应该可以通过IP和名称相互通信。
但是,在验证时,container2和container3不能通过名称正常通信,出现了错误。如图:
解决方案:
由于虚拟机的网络设置,没有连通外网,所以两容器之间不能通过名称通信。配置好网络,通过ping www.baidu.com可以正常访问外网,使用docker restart container1/2/3重启容器,再次在container2中ping容器3的名称,可以正常通信。如图:
问题二:
为了方便,借助Xshell工具连接虚拟机后进行命令输入。但是在连接时,出现了不能连接到虚拟机的问题。
解决方案:
首先,查询虚拟机的静态IP地址,在本地物理机中ping虚拟机Ubuntu的IP地址,可以正常通信。接着,使用service ssh status命令查看ssh服务是否启动,查询结果显示没有该服务。原来是Ubuntu中默认未安装ssh服务。
于是通过apt-get install openssh-server命令安装ssh服务。出现了如下报错:
解决方案
根据报错信息分析可知,是需要安装的插件版本与某些依赖版本不兼容所导致。于是,更新软件包。如图:
或者通过命令更新:
此时再通过apt-get install openssh-server命令进行安装ssh服务成功,如图:
启动ssh服务,连接Xshell成功。
问题三:
在执行安装ssh服务命令时,由于重复执行多次,出现了进程占用,即无法获得锁的报错,如图:
解决方案:
进程占用导致目录被锁,所以将锁定的文件目录删除即可。如图:
问题四:
虚拟机连接Xshell时需要改成net8的同一网段IP,但修改之后无法连接外网。
解决方案:
1.首先,查看本地net8网卡的IP
2.将虚拟机网卡改为net8连接模式
3.在/etc/network/interfaces配置文件中修改静态IP地址,如图:
4.在/etc/resolvconf/resolv.conf.d/head配置文件中添加dns地址8.8.8.8
5.在虚拟网络编辑器中配置nat模式及IP
6.在界面右上角的网络设置处编辑连接
7.编辑以太网的有线连接
8.按下图配置想要使用的静态IP地址及其网关信息
9.以百度网址为例,进行ping验证,可以正常通信,说明可以正常访问外网