dockerswarm网络模式(详解Docker Swarm概念与用法)
dockerswarm网络模式
详解Docker Swarm概念与用法Docker Swarm是Docker公司开发的容器集群管理服务。从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装。
与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。但是它与docker-compose兼容的优点,可以弥补一切。对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择。
概念
Docker Swarm,主要包含以下概念:
- Swarm
- Node
- Stack
- Service
- Task
- Load balancing
Swarm本身就是“群”的意思,人群、蜂群。这里就是指计算机集群(cluster)在用Docker连接后的状态。docker swarm命令可以创建、加入、离开一个集群。
Node就是计算机节点,也可以认为是一个Docker节点。Node分为两类:Manager和Worker。一个Swarm至少要有一个Manager,部分管理命令只有在Manager上才能使用。两类Node都可以运行Service,但只有Manager上才能执行运行命令。比如,在Manager才能使用docker node命令可以查看、配置、删除Node。
Stack是一组Service,和docker-compose类似。默认情况下,一个Stack共用一个Network,相互可访问,与其它Stack网络隔绝。这个概念只是为了编排的方便。docker stack命令可以方便地操作一个Stack,而不用一个一个地操作Service。
Service是一类容器。对用户来说,Service就是与Swarm交互的最核心内容。Service有两种运行模式,一是replicated,指定一个Service运行容器的数量;二是global,在所有符合运行条件的Node上,都运行一个这类容器。docker service命令可以操作Swarm中的Service。
Task就是指运行一个容器的任务,是Swarm执行命令的最小单元。要成功运行一个Service,需要执行一个或多个Task(取决于一个Service的容器数量),确保每一个容器都顺利启动。通常用户操作的是Service,而非Task。
Load balancing即负载均衡,也包含反向代理。Swarm使用的是Ingress形式的负载均衡,即访问每个节点的某个Published端口,都可自动代理到真正的服务。大致原理如下图所示。
Replicated Mode
services: some-serivce: ... deploy: mode: replicated replicas: 3
默认情况下,mode就是replicated,所以这行可以省略。默认replicas数目为1,代表这个Service只启动1个容器。这个模式,可以按需启动多个服务,Swarm会自动调节,有时一个Node会启动多个容器。
Global Mode
services: some-serivce: ... deploy: mode: global placement: ...
所有可部署的Node,都部署一个。通过placement,可以限定满足条件的Node,而避免在不合适的Node进行部署。
操作
这里列出一些常用的具体操作。
创建第一个Node
docker swarm init --advertise-addr $IP
$IP是当前Node的外部可访问IP,便于其它Node寻址。
这样,一个Swarm就被初始化完成了,它仅有一个Manager节点。
添加新的Node到Swarm
在Manager节点,执行以下命令可查看到如何加入一个Node:
$ docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-ezs4fylj526e801b3cl0pojr5 10.174.28.52:2377 $ docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-164iqklrfv8o3t55g088hylyk 10.174.28.52:2377
在一个未加入任何Swarm的机器上,执行以上显示的命令docker swarm join --token ..., 即可成为这个Swarm的Manage或Worker节点。
设置节点Label
在Manager节点,可以对任意节点设置标签:
docker node update $node_name --label-add main=true
$node_name就是要设置节点的ID或HOSTNAME。Label是键值对形式,main=true中的main就是键、true就是值。
设置了Label以后,在Compose文件中就可以用placement中的constraints来对可用节点作出限制。
services: some-serivce: ... deploy: placement: constraints: - node.labels.main == true ...
以上配置,让some-service仅在Label被设置为main=true的节点,才能使用。
启动、停止服务
docker stack deploy $stack_name -c docker-compose.yaml -c other.yaml ...
$stack_name是Stack名称。可以用-c指定多个docker-compose文件,也可在相同Stack下分批次deploy多个文件。这些YAML文件的写法,和原先用docker-compose命令执行的没有本质区别,只是多加了以下独特配置,并且会忽略一些Swarm场景下不支持的配置。
推荐使用docker-compose文件来编排Stack,而非直接用docker service create来手工创建。详细配置项,可参考《Compose file version 3 reference | Docker Documentation》。
需要停止Stack的所有服务时,可以执行以下命令。
docker stack rm $stack_name
更新已运行服务的镜像
docker service update --image $image:$tag $service_name
以上就是详解Docker Swarm概念与用法的详细内容,更多关于Docker Swarm的资料请关注开心学习网其它相关文章!
- docker容器的创建启动和停止操作(docker版es、milvus、minio启动命令详解)
- 如何启动所有docker服务(docker 使用CMD或者ENTRYPOINT命令同时启动多个服务)
- 安全进入docker容器的方法(使用docker部署一个简单的c/c++程序的方法)
- docker如何解绑容器(如何进入、退出docker的container实现)
- docker部署kafka认证(docker-compose部署zk+kafka+storm集群的实现)
- docker打包镜像命令(docker 打包本地镜像,并到其他机器进行恢复操作)
- docker安装镜像失败(阿里云镜像安装docker报错的问题及解决方案)
- docker 各种用法(详解Docker commit的使用)
- docker怎样安装mysql8(docker-compose安装db2数据库操作)
- springboot怎么用docker(使用docker部署spring boot并接入skywalking的方法)
- 腾讯云docker安装elasticsearch(docker 启动elasticsearch镜像,挂载目录后报错的解决)
- docker中的mongodb(Docker mongoDB 4.2.1 安装并收集springboot日志的步骤详解)
- springboot项目部署到docker(IDEA 通过docker插件发布springboot项目的详细教程)
- docker 查看当前镜像(Docker 查看镜像信息的方法)
- docker启动命令大全(Docker常用命令Study03详解)
- dockerswarm滚动部署(使用Docker部署war包项目的实现)
- 越南没事(越南没事情做)
- 重庆旅游攻略(重庆旅游3-4天攻略最佳线路)
- 周杰伦演唱会门票(周杰伦演唱会门票多少钱一张2023)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
热门推荐
- svg怎么在html中显示(html svg生成环形进度条的实现方法)
- mysql常用数据模型(MySQL数据库基于sysbench实现OLTP基准测试)
- 图片和文字对齐
- SQL SERVER连接池
- php缓存技术学习(简单实用的PHP文本缓存类实例)
- sqlite删除数据(SQLite Delete详解及实例代码)
- 为什么使用vsftpd服务(带你了解vsftpd配置文件)
- html5如何设置标签(HTML5中在title标题标签里设置小图标的方法)
- sql server查看之前的代码(SQL Server简单实现数据的日报和月报功能)
- python dict 操作(Python中dict和set的用法讲解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9