如果您对DockerSwarm和dockerswarm集群感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解DockerSwarm的各种细节,并对dockerswarm集群进行深入的分析,此外还有
如果您对Docker Swarm和docker swarm集群感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Docker Swarm的各种细节,并对docker swarm集群进行深入的分析,此外还有关于29. docker swarm 创建 三个节点 swarm 的集群、35. docker swarm dockerStack 部署 投票应用、37. docker swarm docker service 的更新、Docker Compose 和 Docker Swarm 和 Docker Service的实用技巧。
本文目录一览:- Docker Swarm(docker swarm集群)
- 29. docker swarm 创建 三个节点 swarm 的集群
- 35. docker swarm dockerStack 部署 投票应用
- 37. docker swarm docker service 的更新
- Docker Compose 和 Docker Swarm 和 Docker Service
Docker Swarm(docker swarm集群)
一。架构
Dokcer swarm 主要有两部分组成:一个奇数的 manger 节点 的 a raft consensus group,和一组工作结点,工作结点之间使用的是流言网络协议 ,也叫做控制层面。下图对架构的阐述:
每个管理节点在它本地的 raft 存储都有 swarm 状态的所有信息,它们的通信方式使用的是同步的一种方式。
工作节点之间由于扩容的原因,使用是异步通信方式
二。创建 Docker Swarm
1. swarm 的初始化
xiodi@c720131:~$ sudo docker swarm init
Swarm initialized: current node (6h6a4hf307jil12pa891siaib) is now a manager.To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-08odkkfd4mui46wvxlehv0y5klis7z30q28mrp7pnw89y4a11y-0rvkmr0tikgulqjgl8h2g6xtw 192.168.20.131:2377
To add a manager to this swarm, run ''docker swarm join-token manager'' and follow the instructions.
2. 列出 swarm 的节点
xiodi@c720131:~$ sudo docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
6h6a4hf307jil12pa891siaib * c720131.xiodi.cn Ready Active Leader 18.05.0-ce
3. 检查节点的详细信息
xiodi@c720131:~$ sudo docker node inspect 6h6a4hf307jil12pa891siaib
[
{
"ID": "6h6a4hf307jil12pa891siaib",
"Version": {
"Index": 9
},
"CreatedAt": "2018-06-06T07:09:41.581326206Z",
"UpdatedAt": "2018-06-06T07:09:42.09767829Z",
"Spec": {
"Labels": {},
"Role": "manager",
"Availability": "active"
},
"Description": {
"Hostname": "c720131.xiodi.cn",
"Platform": {
"Architecture": "x86_64",
"OS": "linux"
},
"Resources": {
"NanoCPUs": 2000000000,
"MemoryBytes": 4143411200
},
"Engine": {
"EngineVersion": "18.05.0-ce",
"Plugins": [
{
"Type": "Log",
"Name": "awslogs"
},
{
"Type": "Log",
"Name": "fluentd"
},
{
"Type": "Log",
"Name": "gcplogs"
},
{
"Type": "Log",
"Name": "gelf"
},
{
"Type": "Log",
"Name": "journald"
},
{
"Type": "Log",
"Name": "json-file"
},
{
"Type": "Log",
"Name": "logentries"
},
{
"Type": "Log",
"Name": "splunk"
},
{
"Type": "Log",
"Name": "syslog"
},
{
"Type": "Network",
"Name": "bridge"
},
{
"Type": "Network",
"Name": "host"
},
{
"Type": "Network",
"Name": "macvlan"
},
{
"Type": "Network",
"Name": "null"
},
{
"Type": "Network",
"Name": "overlay"
},
{
"Type": "Volume",
"Name": "local"
}
]
},
"TLSInfo": {
"TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUWWC4eyklvnLS5Jg/voHIkWorxCIwCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTgwNjA2MDcwNTAwWhcNMzgwNjAxMDcw\nNTAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABO8UDtnIWogbHOVgdV2Gq7dqlrmGxiS9t2S53bciCJEcSZEARRdq2qEfGI3N\nDFksU70gOhMPTzYwyyqWUGlnZzCjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBQqIjWQ8OWpVx6ZKXrEyaV4OuaoQTAKBggqhkjO\nPQQDAgNIADBFAiA2OiJMd2OwuXFH4uQixic7TvCLRaemuLnkR4MXKdhJKAIhAP+Y\nf6FL0wZw/NVDRw3Z6lNDl9Wayv5lHwC6V36C9DpP\n-----END CERTIFICATE-----\n",
"CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh",
"CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7xQO2chaiBsc5WB1XYart2qWuYbGJL23ZLndtyIIkRxJkQBFF2raoR8Yjc0MWSxTvSA6Ew9PNjDLKpZQaWdnMA=="
}
},
"Status": {
"State": "ready",
"Addr": "192.168.20.131"
},
"ManagerStatus": {
"Leader": true,
"Reachability": "reachable",
"Addr": "192.168.20.131:2377"
}
}
]
三。使用 swarm 创建单个服务
(1)创建一个 stack 文件
version: "3.5"
services:
whoami:
image: training/whoami:latest
networks:
- test-net
ports:
- 81:8000
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
labels:
app: sample-app
environment: prod-southnetworks:
test-net:
driver: overlay
2. 进行部署 stack
xiodi@c720131:~/docker$ sudo docker stack deploy -c stack.yaml sample-stack
[sudo] password for xiodi:
Creating network sample-stack_test-net
Creating service sample-stack_whoami
3. 查看部署的 stack
xiodi@c720131:~/docker$ sudo docker stack ls
NAME SERVICES
sample-stack 1
4. 查看部署的服务
xiodi@c720131:~/docker$ sudo docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
t98tjpn7xpby sample-stack_whoami replicated 6/6 training/whoami:latest *:81->8000/tcp
5. 检查服务和它的任务
xiodi@c720131:~/docker$ sudo docker service ps sample-stack_whoami
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ib67sdpbu7xc sample-stack_whoami.1 training/whoami:latest ubuntu Running Running 3 minutes ago
3qhfu2lj4qis sample-stack_whoami.2 training/whoami:latest c720131.xiodi.cn Running Running 3 minutes ago
xdrxww29h2wi sample-stack_whoami.3 training/whoami:latest c720132.xiodi.cn Running Running 3 minutes ago
mtyc6cw65qu0 sample-stack_whoami.4 training/whoami:latest ubuntu Running Running 3 minutes ago
x8gtlzrqwm3j sample-stack_whoami.5 training/whoami:latest c720131.xiodi.cn Running Running 3 minutes ago
vfq7gksylhom sample-stack_whoami.6 training/whoami:latest c720132.xiodi.cn Running Running 3 minutes ago
6. 列出在该节点运行的容器
xiodi@c720131:~/docker$ sudo docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0cafe15b204c training/whoami:latest "/app/http" 5 minutes ago Up 5 minutes 8000/tcp sample-stack_whoami.2.3qhfu2lj4qisgk5akkskzqnop
42b4d5626c58 training/whoami:latest "/app/http" 5 minutes ago Up 5 minutes 8000/tcp sample-stack_whoami.5.x8gtlzrqwm3juduzonczhima1
stack---service--- 任务 -- 和容器对应关系如下图:
7. 获取服务的详细信息
xiodi@c720131:~/docker$ sudo docker service inspect sample-stack_whoami
[
{
"ID": "t98tjpn7xpbyryk7ikbtucwut",
"Version": {
"Index": 25
},
"CreatedAt": "2018-06-06T07:29:03.797319458Z",
"UpdatedAt": "2018-06-06T07:29:03.802084194Z",
"Spec": {
"Name": "sample-stack_whoami",
"Labels": {
"app": "sample-app",
"com.docker.stack.image": "training/whoami:latest",
"com.docker.stack.namespace": "sample-stack",
"environment": "prod-south"
},
"TaskTemplate": {
"ContainerSpec": {
"Image": "training/whoami:latest@sha256:4d54f5ea6d2c562ae96add2792e8d71a56b7613cbc4e7b8e20a4e4d3085bbaff",
"Labels": {
"com.docker.stack.namespace": "sample-stack"
},
"Privileges": {
"CredentialSpec": null,
"SELinuxContext": null
},
"StopGracePeriod": 10000000000,
"DNSConfig": {},
"Isolation": "default"
},
"Resources": {},
"RestartPolicy": {
"Condition": "any",
"Delay": 5000000000,
"MaxAttempts": 0
},
"Placement": {
"Platforms": [
{
"Architecture": "amd64",
"OS": "linux"
}
]
},
"Networks": [
{
"Target": "ojgp9mdhz2xaorsxca0g64zv2",
"Aliases": [
"whoami"
]
}
],
"ForceUpdate": 0,
"Runtime": "container"
},
"Mode": {
"Replicated": {
"Replicas": 6
}
},
"UpdateConfig": {
"Parallelism": 2,
"Delay": 10000000000,
"FailureAction": "pause",
"Monitor": 5000000000,
"MaxFailureRatio": 0,
"Order": "stop-first"
},
"RollbackConfig": {
"Parallelism": 1,
"FailureAction": "pause",
"Monitor": 5000000000,
"MaxFailureRatio": 0,
"Order": "stop-first"
},
"EndpointSpec": {
"Mode": "vip",
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 8000,
"PublishedPort": 81,
"PublishMode": "ingress"
}
]
}
},
"Endpoint": {
"Spec": {
"Mode": "vip",
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 8000,
"PublishedPort": 81,
"PublishMode": "ingress"
}
]
},
"Ports": [
{
"Protocol": "tcp",
"TargetPort": 8000,
"PublishedPort": 81,
"PublishMode": "ingress"
}
],
"VirtualIPs": [
{
"NetworkID": "1ov2xqk3ws0017wq9x1eo9sv3",
"Addr": "10.255.0.5/16"
},
{
"NetworkID": "ojgp9mdhz2xaorsxca0g64zv2",
"Addr": "10.0.0.5/24"
}
]
}
}
]
8. 获取服务的日志信息
xiodi@c720131:~/docker$ sudo docker service logs sample-stack_whoami
sample-stack_whoami.2.3qhfu2lj4qis@c720131.xiodi.cn | Listening on :8000
sample-stack_whoami.5.x8gtlzrqwm3j@c720131.xiodi.cn | Listening on :8000
sample-stack_whoami.3.xdrxww29h2wi@c720132.xiodi.cn | Listening on :8000
sample-stack_whoami.6.vfq7gksylhom@c720132.xiodi.cn | Listening on :8000
sample-stack_whoami.4.mtyc6cw65qu0@ubuntu | Listening on :8000
sample-stack_whoami.1.ib67sdpbu7xc@ubuntu | Listening on :8000
9. 协调至满意状态(在某个容器由于某原因不能提供服务时,swarm 会自动修复这种状态)
(1)在此删除其中一个实列。
xiodi@c720131:~$ sudo docker container rm -f sample-stack_whoami.2.3qhfu2lj4qisgk5akkskzqnop
sample-stack_whoami.2.3qhfu2lj4qisgk5akkskzqnop
10. 从第 9 步可以看到,docker-swarm 是可以自动恢复的。
11. 接下来演示一下停止掉一个 worker 节点,看会怎么样。
从上图可以看到,我们停止一个 worker 节点后,仍然能够自动恢复。
12. 删除服务或者 stack.
xiodi@c720131:~$ sudo docker stack rm sample-stack
Removing service sample-stack_whoami
Removing network sample-stack_test-net
四。使用 Docker swarm 部署多个服务 stack.
1. stack 文件内容如下
xiodi@c720131:~/docker$ cat pet-stack.yaml
version: "3.5"
services:
web:
image: fundamentalsofdocker/ch08-web:1.0
networks:
- pets-net
ports:
- 3000:3000
deploy:
replicas: 3
db:
image: fundamentalsofdocker/ch08-db:1.0
networks:
- pets-net
volumes:
- pets-data:/var/lib/postgresql/datavolumes:
pets-data:networks:
pets-net:
driver: overlay
2. 部署服务应用
xiodi@c720131:~/docker$ sudo docker stack deploy -c pet-stack.yaml pets
Creating network pets_pets-net
Creating service pets_db
Creating service pets_web
3. 在 pets stack 列出所有的任务
xiodi@c720131:~/docker$ sudo docker stack ps pets
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
99uuyw2m5fbc pets_web.1 fundamentalsofdocker/ch08-web:1.0 c720132.xiodi.cn Running Running about a minute ago
8key67a3aaai pets_db.1 fundamentalsofdocker/ch08-db:1.0 c720131.xiodi.cn Running Running about a minute ago
nkogzxahoxhq pets_web.2 fundamentalsofdocker/ch08-web:1.0 ubuntu Running Running about a minute ago
6230n44cvt04 pets_web.3 fundamentalsofdocker/ch08-web:1.0 c720131.xiodi.cn Running Running about a minute ago
4. 请求本机的 3000 端口,校验部署的服务
29. docker swarm 创建 三个节点 swarm 的集群
1.使用 vagrant 部署 三台 centos/7 的 环境
###Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.require_version ">= 1.6.0"
boxes = [
{
:name=>"docker-host",
:eth1=>"192.168.205.10",
:mem=>"1024",
:cpu=>"1",
:port=>"8888"
},
{
:name=>"docker-node1",
:eth1=>"192.168.205.11",
:mem=>"1024",
:cpu=>"1",
:port=>"8889"
},
{
:name=>"docker-node2",
:eth1=>"192.168.205.12",
:mem=>"1024",
:cpu=>"1",
:port=>"8890"
}
]
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
boxes.each do |opts|
config.vm.define opts[:name] do |config|
config.vm.hostname = opts[:name]
config.vm.network "forwarded_port", guest: 80, host: opts[:port]
config.vm.provider "vmware_fusion" do |v|
v.vmx["memsize"] = opts[:mem]
v.vmx["numvcpus"] = opts[:cpu]
end
config.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", opts[:mem]]
v.customize ["modifyvm", :id, "--cpus", opts[:cpu]]
end
config.vm.network :private_network, ip: opts[:eth1]
end
end
config.vm.synced_folder "./labs", "/home/vagrant/labs"
config.vm.provision "shell", privileged: true, path: "./setup.sh"
end
2.编写 setup.sh
###setup.sh
#/bin/sh
# install some tools
sudo yum install -y wget
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum makecache
sudo yum -y update
sudo yum install -y git vim gcc glibc-static telnet bridge-utils
# install docker
curl -fsSL get.docker.com -o get-docker.sh
sh get-docker.sh
# start docker service
sudo groupadd docker
sudo usermod -aG docker vagrant
sudo systemctl start docker
rm -rf get-docker.sh
sudo tee /etc/docker/daemon.json <<-''EOF''
{
"registry-mirrors": ["https://v2ltjwbg.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker version
3.创建labs 文件夹 并启动容器
mkdir lables
vagrant up
4. 进去 host 节点
vagrant ssh docker-host
声明 manager 节点
docker swarm init --advertise-addr=192.168.205.10
只需要 在其他节点运行这段代码 即可 进入这个节点
5. 进入node1节点 并 加入 swarm 集群
进入docker-node1 节点
vagrant ssh docker-node1
运行刚刚生成的代码即可加入 swarm 集群
docker swarm join --token SWMTKN-1-29cjw98xafo5454juq28ldear34aafbp1n616wilrnjl0q92jz-dt02qoe4nhe98mf6jon9rukca 192.168.205.10:2377
在 host 节点查看集群节点情况
docker-host 下
docker node ls
docker-node2 节点同理
6. 在 docker-machine 上进行 swarm 安装
docker-machine create swarm-manager
docker-machine create swarm-node1
docker-machine create swarm-node2
同理 加入
7. 在 labs.play-with-docker.com
常见三个虚拟主机即可运行上面的命令即可
35. docker swarm dockerStack 部署 投票应用
1. 编写 docker-compose.yml
# docker-compose.yml
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
db-data:
2. 启动 service 并 查看 service 的状态
docker stack deploy vote -c=docker-compose.yml
docker stack ls
docker stack services vote
docker stack ps vote
3. 对 vote_vote service 进行拓展
docker service stack scale vote_vote=3
4. 访问
访问 192.168.205.10:5000 进行投票
访问 192.168.205.10:5001 查看投票情况
访问 192.168.205.10:8080 查看容器 部署情况
37. docker swarm docker service 的更新
在 service 运行的情况下 进行更新
1. 创建 名为 demo 的 overlay 网络
docker network create -d overlay demo
2. 创建 python-flask-demo:1.0 服务
映射 本地的 8080 端口 到 容器的 5000 端口
docker service create --name web --publish 8080:5000 --network demo xiaopeng163/python-flask-demo:1.0
3. 查看运行的服务器
docker service ps web
4. 横向拓展 web 应用
docker service scale web=2
5. shell 循环请求 web
sh -c "while true;do curl 127.0.0.1:8080 && sleep 1; done"
6. 更新 service image
docker service update --image xiaopeng163/python-flask-demo:2.0 web
7. 查看容器详情
docker service ps web
8. 更新 service 端口映射 将 外部访问端口 8080 变换 8888
docker service update --publish-rm 8080:5000 --publish-add 8888:5000 web
9. docker-compose 文件更新
docker stack deploy wordpress -c=docker-compose.yml
Docker Compose 和 Docker Swarm 和 Docker Service
Docker Compose
介绍
通过yml文件配置,高效管理多个docker,启停
中文文档
https://www.jb51.cc/manual/view/36129.html
安装
# 慢
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 国内镜像
$ sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
授权文件
$ sudo chmod +x /usr/local/bin/docker-compose
测试
$ docker-compose --version
docker-compose version 1.27.4, build 1110ad01
卸载
sudo rm /usr/local/bin/docker-compose
测试使用(官方给的)
1创建文件夹
$ mkdir composetest
$ cd composetest
2写测试程序Python。app.py
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
3创建py文件依赖文件requirements.txt
flask
redis
4创建Dockerfile文件
FROM python:3.7-alpine
workdir /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
copY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
copY . .
CMD ["flask", "run"]
5创建docker-compose.yml
# version: "3.9" 需要版本对应
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
6使用Compose构建并运行应用程序
docker-compose up
# 后台运行
# docker-compose up -d
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-87feppxX-1608950922543)(C:\Users\admin\AppData\Local\Temp\1608866566146.png)]
- docker images 自动下载依赖镜像
- 默认服务名: 文件名 _ 服务名 _ num(集群副本数量)
- 创建docker compose自己默认网络,并将所有启动的容器添加到网络中
- 在同一网络下可以直接使用域名访问
停止
# 前端运行使用 ctrl + c 停止
# 后台运行使用
docker-compose stop
yml文件规则
version: "3" # docker-compose核心版本
services: # 服务
fw: # 服务名称
image: redis # 服务配置
ports: # 服务配置2
- "5000:5000"
depends_on: # 依赖(启动顺序)
- fw2
- redis
..... # 容器启动的所有配置
fw2:
image: # 服务配置
官方文档 https://docs.docker.com/compose/compose-file/compose-file-v2/
测试开源程序(官方给的)
创建工作文件夹 my_wordpress/
创建docker-compose.yml
version: '3.3'
services:
db:
image: MysqL:5.7
volumes:
- db_data:/var/lib/MysqL
restart: always
environment:
MysqL_ROOT_PASSWORD: somewordpress
MysqL_DATABASE: wordpress
MysqL_USER: wordpress
MysqL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
restart: always
environment:
wordpress_DB_HOST: db:3306
wordpress_DB_USER: wordpress
wordpress_DB_PASSWORD: wordpress
wordpress_DB_NAME: wordpress
volumes:
db_data: {}
后台运行
docker-compose up -d
Docker Swarm
- 集群
- 必须有两个或两个以上主节点才能运行
[root@centos3 ~]# docker swarm --help
Usage: docker swarm COMMAND
Manage Swarm
Commands:
ca 管理根CA
init 初始化集群
join 加入集群
join-token 创建加入令牌
leave 离开集群
unlock 解锁群
unlock-key 管理解锁密钥
update 更新集群
Run 'docker swarm COMMAND --help' for more information on a command.
1初始化一个集群
docker swarm init [OPTIONS]
名字,简写 | 默认 | 描述 |
---|---|---|
–advertise-addr | 通告地址(格式:<ip | interface>:端口) | |
–autolock | 假 | 启用管理器自动锁定(需要解锁密钥才能启动停止的管理器) |
–availability | active | 节点的可用性(“活动”|“暂停”|“漏”) |
–cert-expiry | 2160h0m0s | 节点证书的有效期(ns | us | ms | s | m | h) |
–data-path-addr | 用于数据路径流量的地址或接口(格式:<ip | interface>) | |
–dispatcher-heartbeat | 5S | 调度员心跳周期(ns | us | ms | s | m | h) |
–external-ca | 一个或多个证书签名端点的规格 | |
–force-new-cluster | 假 | 强制从当前状态创建一个新的群集 |
–listen-addr | 0.0.0.0:2377 | 监听地址(格式:<ip | interface>:端口) |
–max-snapshots | 0 | 要保留的附加木筏快照的数量 |
–snapshot-interval | 10000 | Raft快照之间的日志条目数 |
–task-history-limit | 5 | 任务历史保留限制 |
# 初始化集群
docker swarm init --advertise-addr 192.168.0.191
2加入一个节点
docker swarm join [OPTIONS] HOST:PORT
名字,简写 | 默认 | 描述 |
---|---|---|
–advertise-addr | 通告地址(格式:<ip | interface>:端口) | |
–availability | active | 节点的可用性(“活动”|“暂停”|“漏”) |
–data-path-addr | 用于数据路径流量的地址或接口(格式:<ip | interface>) | |
–listen-addr | 0.0.0.0:2377 | 监听地址(格式:<ip | interface>:端口) |
–token | 进入群的令牌 |
# 例如加入一个节点
# 令牌SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2
docker swarm join --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2 192.168.0.191:2377
3获取令牌
docker swarm join-token [OPTIONS] (worker|manager)
# 工作令牌
docker swarm join-token worker
# 管理令牌
docker swarm join-token manager
查看节点
# 查看节点
docker node
Docker Service
docker service COMMAND
命令 | 描述 |
---|---|
docker service create | 创建一项新服务 |
docker service inspect | 显示一项或多项服务的详细信息 |
docker service logs | 获取服务或任务的日志 |
docker service ls | 列出服务 |
docker service ps | 列出一项或多项服务的任务 |
docker service rm | 删除一项或多项服务 |
docker service scale | 扩展一个或多个复制服务 |
docker service update | 更新服务 |
1创建服务
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
名字,简写 | 默认 | 描述 |
---|---|---|
–config | 指定配置以暴露给服务 | |
–constraint | 展示位置限制 | |
–container-label | 容器标签 | |
–credential-spec | 托管服务帐户的凭证规范(仅限Windows) | |
–detach,-d | 真正 | 立即退出,而不是等待服务收敛 |
–dns | 设置自定义DNS服务器 | |
–dns-option | 设置DNS选项 | |
–dns-search | 设置自定义DNS搜索域 | |
–endpoint-mode | 要人 | 端点模式(vip或dnsrr) |
–entrypoint | 覆盖图像的默认入口点 | |
–env,-e | 设置环境变量 | |
–env-file | 读入环境变量文件 | |
–group | 为容器设置一个或多个补充用户组 | |
–health-cmd | 运行以检查运行状况的命令 | |
–health-interval | 运行检查之间的时间(ms | s | m | h) | |
–health-retries | 0 | 需要报告不健康的连续失败 |
–health-start-period | 在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段 | |
–health-timeout | 允许一次检查运行的最长时间(ms | s | m | h) | |
–host | 设置一个或多个自定义主机到IP映射(主机:IP) | |
–hostname | 容器主机名 | |
–label, -l | 服务标签 | |
–limit-cpu | 限制cpu | |
–limit-memory | 0 | 限制记忆 |
–log-driver | 记录驱动程序的服务 | |
–log-OPT | 记录驱动程序选项 | |
–mode | 复制 | 服务模式(复制或全局) |
–mount | 将文件系统挂载附加到服务 | |
–name | 服务名称 | |
–network | 网络附件 | |
–no-healthcheck | 假 | 禁用任何容器指定的HEALTHCHECK |
–no-resolve-image | 假 | 不要查询注册表来解析图像摘要和支持的平台 |
–placement-PREF | 添加展示位置首选项 | |
–publish,-p | 将端口发布为节点端口 | |
–quiet,-q | 假 | 抑制进度输出 |
–read-only | 假 | 将容器的根文件系统挂载为只读 |
–replicas | 任务数量 | |
–reserve-cpu | 预留cpu | |
–reserve-memory | 0 | 保留内存 |
–restart-condition | 满足条件时重新启动(“none”|“on-failure”|“any”)(默认为“any”) | |
–restart-delay | 重启尝试之间的延迟(ns | us | ms | s | m | h)(默认5秒) | |
–restart-max-attempts | 放弃前的最大重启次数 | |
–restart-window | 用于评估重新启动策略的窗口(ns | us | ms | s | m | h) | |
–rollback-delay | 0 | 任务回滚之间的延迟(ns | us | ms | s | m | h)(默认值为0) |
–rollback-failure-action | 回滚失败的操作(“暂停”|“继续”)(默认“暂停”) | |
–rollback-max-failure-ratio | 0 | 在回滚期间容忍的失败率(默认0) |
–rollback-monitor | 0 | (ns | us | ms | s | m | h)(默认5秒)每个任务回滚之后的持续时间 |
–rollback-order | 回滚顺序(“start-first”|“stop-first”)(默认“stop-first”) | |
–rollback-parallelism | 1 | 同时回滚的任务的最大数量(0一次全部回滚) |
–secret | 指定泄露给服务的秘密 | |
–stop-grace-period | 强制杀死一个容器之前等待的时间(ns | us | ms | s | m | h)(默认10秒) | |
–stop-signal | 停止容器的信号 | |
–tty, -t | 假 | 分配一个伪TTY |
–update-delay | 0 | 更新之间的延迟(ns | us | ms | s | m | h)(默认为0) |
–update-failure-action | 更新失败的操作(“暂停”|“继续”|“回滚”)(默认“暂停”) | |
–update-max-failure-ratio | 0 | 更新期间容许的失败率(默认0) |
–update-monitor | 0 | (ns | us | ms | s | m | h)(默认5秒)每个任务更新后的持续时间 |
–update-order | 更新顺序(“start-first”|“stop-first”)(默认为“stop-first”) | |
–update-parallelism | 1 | 同时更新的最大任务数(0个一次全部更新) |
–user,-u | 用户名或UID(格式:<名称| uid>:<组| gid>) | |
–with-registry-auth | 假 | 向注册代理发送注册表认证详细信息 |
–workdir,-w | 容器内的工作目录 |
# 例如,启动一个Nginx服务,暴露8080端口
docker service create -p 8080:80 --name Nginx01 Nginx
# docker run 容器启动,单机版本
# docker service 服务启动,支持扩缩容器
# 查看服务
docker service ps Nginx01
# 查看副本
docker service ls
# 查看详情
docker service inspect Nginx01
2更新服务
docker service update [OPTIONS] SERVICE
名字,简写 | 默认 | 描述 |
---|---|---|
–args | 服务命令参数 | |
–config-add | 添加或更新服务上的配置文件 | |
–config-RM | 删除配置文件 | |
–constraint-add | 添加或更新展示位置约束 | |
–constraint-RM | 删除约束 | |
–container-label-add | 添加或更新容器标签 | |
–container-label-rm | 用钥匙取出容器标签 | |
–credential-spec | 托管服务帐户的凭证规范(仅限Windows) | |
–detach,-d | 真 | 立即退出,而不是等待服务收敛 |
–dns-add | 添加或更新自定义DNS服务器 | |
–dns-option-add | 添加或更新DNS选项 | |
–dns-option-rm | 删除一个DNS选项 | |
–dns-rm | 删除自定义的DNS服务器 | |
–dns-search-add | 添加或更新自定义DNS搜索域 | |
–dns-search-rm | 删除一个DNS搜索域 | |
–endpoint-mode | 端点模式(vip或dnsrr) | |
–entrypoint | 覆盖图像的默认入口点 | |
–env-add | 添加或更新环境变量 | |
–env-RM | 删除一个环境变量 | |
–force | 假 | 即使没有更改需要,也强制更新 |
–group-add | 向容器添加一个附加的补充用户组 | |
–group-RM | 从容器中删除先前添加的补充用户组 | |
–health-cmd | 运行以检查运行状况的命令 | |
–health-interval | 运行检查之间的时间(ms | s | m | h) | |
–health-retries | 0 | 需要报告不健康的连续失败 |
–health-retries | 在重新计数到不稳定(ms | s | m | h)之前,容器初始化的开始时间段 | |
–health-timeout | 允许一次检查运行的最长时间(ms | s | m | h) | |
–host加 | 添加或更新自定义主机到IP映射(主机:IP) | |
–host-RM | 删除自定义的主机到IP映射(主机:IP) | |
–hostname | 容器主机名 | |
–image | 服务图片标签 | |
–label-add | 添加或更新服务标签 | |
–label-RM | 用钥匙去除标签 | |
–limit-cpu | 限制cpu | |
–limit-memory | 0 | 限制记忆 |
–log-driver | 记录驱动程序的服务 | |
–log-OPT | 记录驱动程序选项 | |
–mount-add | 添加或更新服务上的装载 | |
–mount-RM | 通过目标路径移除一个安装 | |
–network加 | 添加一个网络 | |
–network-RM | 删除网络 | |
–no-healthcheck | 假 | 禁用任何容器指定的HEALTHCHECK |
–no-resolve-image | 假 | 不要查询注册表来解析图像摘要和支持的平台 |
–placement-PREF-ADD | 添加展示位置首选项 | |
–placement-PREF-RM | 删除展示位置偏好设置 | |
–publish相加 | 添加或更新已发布的端口 | |
–publish-RM | 通过目标端口删除发布的端口 | |
–quiet,-q | 假 | 抑制进度输出 |
–read-only | 假 | 将容器的根文件系统挂载为只读 |
–replicas | 任务数量 | |
–reserve-cpu | 预留cpu | |
–reserve-memory | 0 | 保留内存 |
–restart-condition | 条件满足时重新启动(“none”|“on-failure”|“any”) | |
–restart-delay | 重启尝试之间的延迟(ns | us | ms | s | m | h) | |
–restart-max-attempts | 放弃前的最大重启次数 | |
–restart-window | 用于评估重新启动策略的窗口(ns | us | ms | s | m | h) | |
–rollback | 假 | 回退到先前的规范 |
–rollback-delay | 0 | 任务回滚之间的延迟(ns | us | ms | s | m | h) |
–rollback-failure-action | 回滚失败的操作(“暂停”|“继续”) | |
–rollback-max-failure-ratio | 0 | 在回滚期间容忍的失败率 |
–rollback-monitor | 0 | 每个任务回滚后监视失败的持续时间(ns | us | ms | s | m | h) |
–rollback-order | 回滚顺序(“start-first”|“stop-first”) | |
–rollback-parallelism | 0 | 同时回滚的任务的最大数量(0一次全部回滚) |
–secret-add | 添加或更新服务的秘密 | |
–secret-RM | 去掉一个秘密 | |
–stop-grace-period | 强制杀死一个容器之前的等待时间(ns | us | ms | s | m | h) | |
–stop-signal | 停止容器的信号 | |
–tty, -t | 假 | 分配一个伪TTY |
–update-delay | 0 | 更新之间的延迟(ns | us | ms | s | m | h) |
–update-failure-action | 更新失败的操作(“暂停”|“继续”|“回滚”) | |
–update-max-failure-ratio | 0 | 更新期间容错的失败率 |
–update-monitor | 0 | (ns | us | ms | s | m | h)每个任务更新后的持续时间 |
–update-order | 更新顺序(“start-first”|“stop-first”) | |
–update-parallelism | 0 | 同时更新的最大任务数(0个一次全部更新) |
–user,-u | 用户名或UID(格式:<名称| uid>:<组| gid>) | |
–with-registry-auth | 假 | 向注册代理发送注册表认证详细信息 |
–workdir,-w | 容器内的工作目录 |
# 为 Nginx01 创建 10 个副本
docker service update --replicas 10 Nginx01
# 或 使用 scale 命令
docker service scale Nginx01=10
移除服务
docker service rm Nginx01
关于Docker Swarm和docker swarm集群的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于29. docker swarm 创建 三个节点 swarm 的集群、35. docker swarm dockerStack 部署 投票应用、37. docker swarm docker service 的更新、Docker Compose 和 Docker Swarm 和 Docker Service的相关信息,请在本站寻找。
本文标签: