您的位置:首页 > 运维架构 > Docker

Docker中的网络与数据管理

2020-03-05 21:18 253 查看

Docker网路管理

一、Docker默认网络管理

在进行Docker安装时,Docker就会自动创建三种网络。客户端可以通过网路管理指令进行查看。
$ docker network ls

注:如果只是测试单节点的集群,直接使用docker swarm init指令即可。

执行上述指令后,Docker会自动在IP为192.168.10.2的机器上(即manager1机器上)创建一个Swarm集群,并将该IP地址的机器设置为集群管理节点。
Docker中默认的三种网络分别为bridge、host、none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能而host和none属于无网络,容器添加到这两个网络时不能与外界网络通信。

1、创建并启动容器

$ docker run -itd --name=networktest ubuntu

2、使用网络查看指令查看网络详情

$ docker network inspect bridge

该指令用于查看名称为bridge的网络详情,需要指明网络名称或者网络ID。执行上述指令后就会显示出bridge网络的所有详细信息,其中包括了默认的bridge网络管理方式启动的名称为networktest的容器。
注:这里介绍的三种网络bridge、host、none都是在非集群环境下Docker提供的默认网络,而在Docker Swarm集群环境下,除了这三种默认网络外,Docker还提供了docker_gwbridge和ingress两种默认网络。

二、自定义网络介绍

虽然Docker提供的默认网络的使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义网络进行容器管理。在Docker中,可以自定义bridge网络、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器的完全定制和控制。

1.Bridge network(桥接网络)

为了保证容器的安全性,我们可以使用基于bridge的驱动创建新的bridge网络,这种基于bridge驱动的自定义网络可以较好地实现容器隔离。
注:这种用户自定义的基于bridge驱动的网络对于单主机的小型网络环境管理是一个不错的选择,但对于大型的网络环境管理(如集群)就需要考虑使用自定义overlay集群网络。

2、Overlay network in swarm mode(Swarm集群中的覆盖网络)

在Docker Swarm集群环境下可以创建基于overlay驱动的自定义网络。为了保证安全性,Swarm集群使自定义的overlay网络只适用于需要服务的集群中的节点,而不会对外部其他服务或者Docker自己开放。

3、Custom network plugin(定制网络插件)

如果前面几种自定义网络都无法满足需求时,就可以使用Docker提供的插件来自定义网络驱动插件。自定义网络插件会在Docker进程所在的主机上作为另一个运行进程。
自定义网络驱动插件其他插件遵循相同的限制和安装规则,所有插件都使用Docker提供的插件API,并且有一个包含安装、启动、停止、和激活的生命周期。由于自定义网络插件使用较少,所以了解就好。

三、自定义bridge网络

1、创建自定义网络

$ docker network create --driver bridge isolated_nw

执行上述指令可以创建一个基于bridge驱动的名称为isolated_nw的网络。其中–driver(可简写为-d)用于指定网络驱动类型,isolated_nw就是新创建的网络名称。
注:–driver bridge可以省略,省略时Docker会默认使用基于bridge驱动来创建新的网络。
创建完网络可以查看创建网络是否成功:
$ docker network ls

注:除docker network ls指令外,还可以使用docker network inspect指令查看新建网络详情信息。

2、使用自定义网络启动容器

$ docker run --network=isolated_nw -itd --name=nwtest busybox

执行上述指令后,会创建一个名为nwtest的容器,指令中的–network参数指定了该容器的网络连接为自定义的ioslated_nw。
$docker inspect nwtest


该指令可以查看启动后的容器网络详情,来核查其网络管理方式。

3、为容器添加网络管理

名为nwtest的容器使用的只有自定义的isolated_nw一种网络管理方式,我们还可以继续为该容器添加其他网路管理方式。
$ docker network connect bridge nwtest


执行上述指令会为nwtest添加另一种默认的bridge网络管理方式。nwtest拥有两种网络管理方式,分别是bridge网络和自定义的isolated_nw网络

4、断开容器网络连接

$ docker network disconnect isolated_nw nwtest

在使用时也需要指定网络名称和容器名称

5、移除自定义网络

当不需要某个网络时,可以将该网络移除,但在移除网络之前,一定要将所有与该网络连接的容器断开。
$ docker network rm isolated_nw
执行上述指令后,就可以移除名为isolated_nw的自定义网络。当网络移除成功后,会返回网络名称。
$ docker network ls验证网络是否移除成功。

四、容器之间的网络通信

1、创建容器

(1)、创建两个使用默认的bridge网络的容器

$ docker run -itd --name=container1 busybox
$ docker run -itd --name=container2 busybox

(2)、创建一个使用自定义的isolated_nw网络(需要预先创建)的容器

$ docker run --network=isolated_nw -itd --name=container3 busybox

(3)、为container2容器新增一个自定义的isolated_nw网络连接

$ docker network connect isolated_nw container2

2、容器地址查看

$ docker attach container*
# ifconfig



在container2容器内部有两个网卡eth0和eth1容器
提示:当使用docker attach指令进入容器内部后,可以在终端使用exit命令或使用快捷键Ctrl+p+q组合键退出当前容器,只不过在使用exit退出容器后,该容器就会停止运行,而使用Ctrl+p+q组合键退出当前容器后,该容器会持续运行。

3、容器通信测试

# ping -w 4 容器名称(或容器IP地址)

结论:不同容器之间需要相互通信必须在同一个网络环境下,使用默认bridge网络管理的容器可以使用容器IP地址进行通信,但无法使用容器名称进行通信;而使用自定义网络管理的容器则同时可以使用容器IP地址和容器名称进行通信。
多学一招:默认网络管理下使用–link参数通过容器名称进行通信
$ docker run -itd --name=container4 --link container1:c1 busybox



执行上述指令后会新建并启动一个名为container4的容器,指令中的-itd用于指定后台交互式运行,–name用于指定生成容器的名称,而–link container1:c1则将新建的container4容器连接到了container1容器,且为container1容器定义了别名c1.
这种使用–link参数创建的默认网络下的容器就可以使用容器名称或别名与指定连接的容器进行通信了。这里的container4可以使用容器名称container1或别名c1与container1进行通信,但容器container1仍不可以使用容器名与container4进行通信。

Docker Swarm集群

一、Docker Swarm概述

Docker Swarm是一个用于创建和管理Docker集群的工具。

Docker Swarm集群的主要特点:
1、方便创建和管理集群
2、可扩展
3、可实现期望的状态调节
4、集群多主机网络自动扩展管理
5、提供服务发现功能
6、可实现负载均衡
7、安全性强
8、支持延迟更新和服务回滚

二、Docker Swarm使用

1、环境搭建

(1)、准备三台Ubuntu系统主机(即用于搭建集群的3个Docker机器),每台机上都需要安装Docker并且可以连接网络,同时要求Docker版本都必须是1.12及以上,因为老版本不支持Docker Swarm。
(2)、集群管理节点Docker机器的IP地址必须固定,集群中的所有节点都可以访问该管理节点。
(3)、集群之间必须使用相应的协议并保证其以下端口可用:
①、用于集群管理通信的TCP端口2377
②、TCP和UDP端口7946,用于节点间的通信
③、UDP端口4789,用于覆盖网络流量
例:三台机器主机名称分别为manager1(作为管理节点),worker1(作为工作节点)、worker2(作为工作节点)。
(4)、三台机器ip地址分配
①、manage1:192.168.10.6
②、worker1:192.168.10.7
③、worker2:192.168.10.8

2、地址配置





注:查看xshell是否安装:ps -ef |grep ssh |grep -v grep

3、创建Docker Swarm集群

(1)、在名为manager1的Docker机器上创建Docker Swarm集群

$ docker swarm init --advertise-addr 192.168.10.6

执行上述指令后,Docker会自动在IP为192.168.10.2的机器上(即manager1机器上)创建一个Swarm集群,并将该IP地址的机器设置为集群管理节点。
注:如果只是测试单节点的集群,直接使用docker swarm init指令即可。

(2)、查看集群节点信息

$ docker node ls

4、向Docker Swarm集群添加工作节点

(1)、启动另外两台Docker机器,打开终端

$ docker swarm join --token SWMTKN-1-5kzlnkbvplhhyapqw12fsvu37rgv7j0x8ouer478tcu4dlv85z-3akbxlomz0kn949q7bh8bwzst 192.168.10.6:2377


注:上述指令中的–token参数表示向指定集群中加入工作节点的认证信息。在进行学习中一定要使用自己在前面创建Docker Swarm集群时返回的向集群中添加工作节点的指令,而不是使用本指令。如果忘记可以用“docker swarm join-token worker”指令查看。

(2)、查看集群节点信息

$ docker node ls

5、向Docker Swarm集群部署服务

$ docker service create --replicas 1 --name helloworld alpine ping docker.com

上述指令参数具体说明:
docker service create 指令:用于在Swarm集群中创建一个基于alpine镜像服务。
–replicas参数:指定了该服务只有一个副本实例。
–name参数:指定创建成功后的服务名称为helloworld。
ping docker.com指令:表示服务启动后后执行的命令。
docker Swarm集群中的服务管理与容器操作基本类似,只不过服务管理指令是以“docker service”开头,而容器管理指令是以“docker container”开头。个别指令除外,如–replicas。

6、查看Docker Swarm集群中的服务

(1)、查看当前集群中的服务列表信息

$ docker service ls

(2)、查看部署得服务具体详情

$ docker service inspect helloworld

(3)、查看指定服务在集群节点上的分配和运行情况

$ docker service ps helloworld

7、更改Docker Swarm集群服务副本数量

在集群中部署的服务,如果只运行一个副本,就无法体现出集群的优势,并且一旦该机器或副本崩溃,该服务将无法访问,所以通常一个服务会启动多个服务副本。
$ docker service scale helloworld=5

$ docker service ps helloworld

执行上述的命令可以看出helloworld服务的五个副本实例被随机分配到了manager1、worker1、worker2这三个节点上运行,并且它们的状态都是Running,表示服务正常运行。
注:在集群环境下,服务副本是随机均衡的分配到不同节点上的。另外,由于有些镜像较大,所以其它工作节点在拉取镜像运行服务实例时可能需要一定时间,这时该服务副本就会处于Preparing状态。

8、删除服务

$ docker service rm helloworld

注:执行上述指令删除服务后,在集群中有该服务副本运行的节点上,这些服务副本仍需要一定时间清除,此时可以使用“docker ps”查看具体清除情况

9、访问服务

(1)、在管理节点manager1上查看网络列表

$ docker network ls

注:与非集群环境下的Docker网络相比,Docker Swarm集群网络列表中分别增加了一个以bridge和overlay为驱动的网络。在集群中发布服务时,如果没有指定网络,那么默认都是使用名为ingress网络连接的,而在实际开发中,则会使用自定义的overlay驱动网络进行服务管理。

(2)、在集群管理节点manager1上,创建以overlay为驱动的自定义网络

$ docker network create
–driver overlay
my-multi-host-network


上述指令以overlay为驱动创建了一个名为my-multi-host-network的网络。

(3)、在集群管理节点manager1上,再次部署服务

$ docker service create
–network my-multi-host-network
–name my-web
–publish 8080:80
–replicas 2
nginx


上述指令中,–network参数用于指定服务使用自定义的overlay驱动网络my-multi-host-network连接;–name参数用于指定服务启动后的名称;–publish(也可以用-p)参数用于映射对外服务端口;–replicas参数用于指定该服务的副本数量;nginx表示是基于nginx镜像构建的服务。

(4)、在集群管理节点manager1上,查看服务的两个服务副本运行情况

$ docker service ps my-web

注:由于是随机分配的,实际操作中显示可能与上图不同,也可能分配到其他两台节点机器上。

(5)、外界访问服务

IP+8080



当在任意节点上访问服务时,都可以正常访问部署的服务。这是由于集群负载均衡器将请求路由到一个活动容器,从而实现容器内部服务的正常访问,这也体现了Docker Swarm负载均衡这一特点。

Docker数据管理

一、Docker数据存储管理

二、Docker数据存储方式

Volumes数据卷管理

一、Volumes数据卷的优势

二、Volumes数据卷使用

1、创建并管理数据卷

(1)、创建数据卷

$ docker volume create my-vol

(2)、查看数据卷

$ docker volume ls

(3)、核查数据卷

$ docker volume inspect my-vol

(4)、删除数据卷

$ docker volume rm my-vol

当删除成功后会返回该数据卷名称

2、启动容器并加载数据卷

(1)、查看本机容器和数据卷

$ docker ps -a或**$ docker volume ls**

注:为了避免后续示例演示的干扰,如果机器上已经存在容器和数据卷,最好将已经存在的容器和数据卷删除。

(2)、确认查看本机Docker文件系统中的容器和数据卷

现将用户切换到root用户,然后进入“/var/lib/docker”目录下,再查看信息

(3)、启动容器并挂载数据卷

$ docker run -d
-it
–name devtest
–mount source=myvol,target=/app
busybox:latest


$ docker run -d
-it
–name devtest2
-v myvol:/app
busybox:latest


(4)、再次查看本机容器和数据卷列表

$ docker ps 或$ docker volume ls

(5)、检查容器详情

$ docker inspect 5d40a5fe3635或a4e409c66d1a

(6)、再次确认本机Docker文件系统中的容器和数据卷

出现的问题与解决方法

1、出现的问题

解决方法

删除之前做的所有容器和数据卷

  • 点赞
  • 收藏
  • 分享
  • 文章举报
﹏ℳ๓陌゛雨涵ℳ๓﹏ 发布了2 篇原创文章 · 获赞 1 · 访问量 538 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: