dockerswarm指定ip_dockerswarm(⼀)⼊门--搭建⼀个简单
的swarm集
概述
Docker Swarm是容器的集管理⼯具。它的主要特性:
集成于Docker Engine的集管理⼯具。
分布式设计。从⼀个image⽣成整个集。⼀个docker swarm下的不同node,可以分布于同⼀,或不同的物理设备上。
灵活调度。按需启动或关闭容器。
⾼可⽤性。⽀持监控容器状态,如果容器崩溃,可以⾃动重启容器。
⽀持多样的⽹络配置。⽀持overlay、macvlan、bridge、host等⽹络形式。
服务发现。
负载均衡。
加密传输。默认基于TLS实现容器间的交互,实现加密传输。
升级回退。⽀持动态升级容器,如果升级后的容器运⾏不正常,可⾃动回退到上⼀版本。
主要概念
node(节点)
每个docker node都是docker engine的实例(可以理解成,每个docker node即是安装了docker环境的PC),可分为manager和worker两类。
manager node:
给worker nodes分配任务(task)。
识别worker nodes的状态,调度容器。
worker node
执⾏manager mode分配的任务(task)。
service(服务)与task(任务)
Docker Swarm通过⼀个YAML格式的⽂件,定义了⽣产环境(in production)中的Docker container⾏为。此⽂件包含对services定义、运⾏、扩容。
service可以理解为是"containers in production"。它是⼀个swarm系统中最关键的定义。 ⼀个service只能运⾏⼀个image,但是可以运⾏出同⼀个image的多个containers。
⼀个task是swarm调度的最⼩单位,它运⾏于manager或worker nodes上。它即对应service中的⼀个container实例。它包含: ⼀个container container启动后运⾏的指令
搭建⼀个Docker Swarm
环境准备
准备两个虚拟机,⼀个作为manager,⼀个作为worker。两个虚拟机间能ping通。并且要求以下端⼝开放访问:2377,2946。
创建Swarm
在manager设备上,创建swarm,同时配置⼀下manager的ip。
$ docker swarm init --advertise-addr 192.168.154.135
Swarm initialized: current node (78ayx9kk6n3qr4gcn05nmuvzg) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-523lnlcl8xbol5hmg4aab6ur2g2flmdx5zxb31qzj8r8ty0mbo-bhfp0yf7er2vysftf753s3rz5 192.168.154.135:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
通过docker info确认⼀下swarm已经创建。
$ docker info
Client:
Debug Mode: false
Server:
Containers: 5
Running: 0
Paused: 0
Stopped: 5
...
Swarm: active
NodeID: 78ayx9kk6n3qr4gcn05nmuvzg
Is Manager: true
ClusterID: ommhsz8xug6ltvauyusfn3vsp
Managers: 1
Nodes: 1
Default Address Pool: 10.0.0.0/8
SubnetSize: 24
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
...
通过docker node ls确认docker node信息。
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
78ayx9kk6n3qr4gcn05nmuvzg * ubuntu Ready Active Leader 19.03.5
把worker nodes加⼊swarm
在上⼀步创建swarm时,docker提⽰了加⼊此swarm应执⾏的命令。在worker node上执⾏这些命令。
$ docker swarm join --token SWMTKN-1-523lnlcl8xbol5hmg4aab6ur2g2flmdx5zxb31qzj8r8ty0mbo-bhfp0yf7er2vysftf753s3rz5 192.168.154.135:2377 This node joined a swarm as a worker.
如果你没有记录下这个加⼊swarm的命令,可以在manager node上执⾏docker swarm join-token worker以重新获取命令。
再回到manager节点上,查看当前swarm的成员。
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
78ayx9kk6n3qr4gcn05nmuvzg * ubuntu Ready Active Leader 19.03.5
lugs1vyy3o6z3dvnpytkxf6yi ubuntu Ready Active 19.03.5
创建并部署⼀个service
在manager节点上,创建⼀个service。
docker service create --replicas 1 --name helloworld alpine ping docker
参数解释:
--replicas:service运⾏的实例个数
--name: 命名service为helloword
alpine ping docker: 定义此service为,在 Alpine Linux容器中,执⾏ping docker
docker service ls确认⼀下:
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
uyxa5ye0061k helloworld replicated 1/1 alpine:latest
在执⾏了docker service create之后,此service即是已经被拆解成task执⾏了。通过以下命令可以查看它的执⾏状态。这⾥不具体展开了。
docker service inspect --pretty <SERVICE-ID>
docker service ps <SERVICE-ID>
docker ps可以查看在当前node上执⾏的task。此service当前在manager node上执⾏。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1f880ea0a72 alpine:latest "ping docker" 16 minutes ago Up 15 minutes 3hwti4wmj5p6zyqe8yi03
service缩容与扩容
docker service scale可以修改⼀个serivce衍⽣出的副本数量,也就是task数量。通过以下命令将helloworld扩容到5个task。
$ docker service scale helloworld=5
helloworld scaled to 5
overall progress: 5 out of 5 tasks
1/5: running [==================================================>]
2/5: running [==================================================>]
3/5: running [==================================================>]
4/5: running [==================================================>]
5/5: running [==================================================>]
verify: Service converged
查看service在各nodes上的运⾏情况
$ docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
crxx3hwti4wm helloworld.1 alpine:latest ubuntu Running Running 55 minutes ago
1kej5h5qmkvt helloworld.2 alpine:latest ubuntu-2 Running Running about a minute ago
u7i09cvrv7sj helloworld.3 alpine:latest ubuntu-2 Running Running about a minute agodocker重启容器命令
glipqhq70jo7 _ helloworld.3 alpine:latest ubuntu-2 Shutdown Shutdown 8 minutes ago
x9qkewnqf2fa helloworld.4 alpine:latest ubuntu Running Running about a minute ago
vwkke0hvmxk8 _ helloworld.4 alpine:latest ubuntu-2 Shutdown Shutdown 8 minutes ago
dsyijxuant14 helloworld.5 alpine:latest ubuntu-2 Running Running about a minute ago
ku0o7qg243tl _ helloworld.5 alpine:latest ubuntu-2 Shutdown Shutdown 8 minutes ago
删除service
执⾏docker service rm删除service。
$ docker service rm helloworld
helloworld
若⼲秒后,此service衍⽣出的task也都停⽌运⾏。
$ docker service ps helloworld
no such service: helloworld
最后,欢迎访问⼩耸的博客#docker系列教程。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论