Docker Swarm集群搭建
1、介绍
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具。Docker 1.12 内嵌了 swarm mode 集群管理模式。
2、准备
2.1、Docker 安装及配置
Swarm集群端口, Docker Swarm集群开放了三个端口: 2377端口, 用于集群管理通信 7946端口, 用于集群节点之间的通信 4789端口, 用于overlay网络流量
1、在实现docker swarm集群之前,我肯定是需要多台服务器实现集群的,这里我准备了3台服务器,且操作系统都是CentOS 7.3,IP分别是:
10.90.1.173 // ser1
10.90.1.103 // ser2
10.90.1.102 // ser3
2、3台服务器上分别执行以下命令,安装docker
[root@yksv001173 ~]# yum search docker
[root@yksv001173 ~]# yum -y install docker
3、docker 服务的几个简单命令:
[root@yksv001173 ~]# systemctl start docker //启动docker服务
[root@yksv001173 ~]# systemctl stop docker //停止docker服务
[root@yksv001173 ~]# systemctl restart docker // 重启docker服务
[root@yksv001173 ~]# systemctl status docker // 查看docker服务状态
[root@yksv001173 ~]# systemctl enable docker // 开机启动docker服务
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@yksv001173 ~]# systemctl disable docker // 取消开机启动docker服务
备注:3个节点执行步骤一样
4、添加私有镜像仓库源,分别在3个服务器的/etc/docker/daemon.json 文件中添加以下内容:
[root@yksv001173 ~]# vim /etc/docker/daemon.json
{ "insecure-registries":["registry.xxxxxx.com:5000"] }
registry.xxxxxx.com:5000为你的私有仓库的ip
备注:3个节点执行步骤一样
2.2、Docker 升级
2.2.1、卸载旧版本(跳过)
执行以下命令卸载旧版本docker
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
2.2.2、docker ce 安装(跳过)
1、安装yum-utils包
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
2、更新 docker-ce稳定版的yum源
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
3、安装docker-ce
yum install docker-ce
4、查看其它可安装的docker-ce源
yum list docker-ce --showduplicates | sort -r
2.3、swarm 安装
3台服务器分别安装好docker,并启动docker服务之后,下面要分别在3台服务器的docker上拉取swarm镜像:
[root@yksv001173 ~]# docker pull swarm
[root@yksp001103 ~]# docker pull swarm
[root@yksp001102 ~]# docker pull swarm
2.4. 防火墙
另外,为了方便,这里将服务器的防火墙全都关闭了。
firewall -cmd --state //查看防火墙状态
systemctl stop firewalld // 关闭防火墙
systemctl start firewalld //开启防火墙
systemctl disable firewalld //禁止防火墙开机启动
成功之后,我们的准备工作就做完了。接下来就要建立集群了。
3、建立集群
我们有3个服务器作为集群的3个节点,其中,ser1, ser2作为manager节点,ser3 作为worker节点。
3.1、初始化集群
**语法: **
docker swarm init [OPTIONS]
**Options: **
- --advertise-addr: 多网卡的情况下,指定需要使用的ip
- --listen-addr: 指定监听的 ip 与端口
- --availability: 节点的有效性("active"|"pause"|"drain")
Active:集群中该Node可以被指派Task
Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行
Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上
示例
[root@yksv001173 ~]# docker swarm init --advertise-addr 10.90.1.173 --listen-addr 10.90.1.173:2377
Swarm initialized: current node (nkdt3dm6upwitbxmi33byio7u) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-9w6njph286adym2dvk4xtfd6d \
10.90.1.173:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@yksv001173 ~]#
3.2、添加节点
语法
docker swarm join [OPTIONS] HOST:PORT
Options
- --token: 所需加入集群的token
- --advertise-addr: 多网卡的情况下,指定需要使用的ip
- --listen-addr: 指定监听的 ip 与端口
- --availability: 节点的有效性("active"|"pause"|"drain")
Active:集群中该Node可以被指派Task
Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行
Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上
3.2.1、manager节点
首先要获取manager的token,在ser1上执行以下命令:
[root@yksv001173 ~]# docker swarm join-token manager
然后执行以下命令,将ser2服务器作为manager节点加入集群
[root@yksp001103 ~]# docker swarm join \
--advertise-addr 10.90.1.103 \
--listen-addr 10.90.1.103:2377 \
--token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-br62zeo51n33vx7rc0717ddmi \
10.90.1.173:2377
Error response from daemon: rpc error: code = 14 desc = grpc: the connection is unavailable
报错,看下端口通不通
[root@yksp001103 ~]# telnet 10.90.1.173 2377
Trying 10.90.1.173...
telnet: connect to address 10.90.1.173: No route to host
[root@yksp001103 ~]#
不通,发现是10.90.1.173的防火墙是开启的
[root@yksv001173 ~]# getenforce
Enforcing
[root@yksv001173 ~]# setenforce 0 ---->临时关闭
[root@yksv001173 ~]# getenforce
Permissive
[root@yksv001173 ~]# /usr/sbin/sestatus -v
[root@yksv001173 ~]# vim /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
SELINUXTYPE=targeted
修改完成之后重启服务器生效。
未关闭防火墙之前的记录
[root@yksv001173 ~]# iptables-save
# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019
*nat
:PREROUTING ACCEPT [113:14041]
:INPUT ACCEPT [1:84]
:OUTPUT ACCEPT [2:152]
:POSTROUTING ACCEPT [2:152]
:DOCKER - [0:0]
:OUTPUT_direct - [0:0]
:POSTROUTING_ZONES - [0:0]
:POSTROUTING_ZONES_SOURCE - [0:0]
:POSTROUTING_direct - [0:0]
:POST_public - [0:0]
:POST_public_allow - [0:0]
:POST_public_deny - [0:0]
:POST_public_log - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A PREROUTING -j PREROUTING_direct
-A PREROUTING -j PREROUTING_ZONES_SOURCE
-A PREROUTING -j PREROUTING_ZONES
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT -j OUTPUT_direct
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.18.0.0/16 ! -o docker_gwbridge -j MASQUERADE
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -j POSTROUTING_direct
-A POSTROUTING -j POSTROUTING_ZONES_SOURCE
-A POSTROUTING -j POSTROUTING_ZONES
-A DOCKER -i docker_gwbridge -j RETURN
-A DOCKER -i docker0 -j RETURN
-A POSTROUTING_ZONES -o ens192 -g POST_public
-A POSTROUTING_ZONES -g POST_public
-A POST_public -j POST_public_log
-A POST_public -j POST_public_deny
-A POST_public -j POST_public_allow
-A PREROUTING_ZONES -i ens192 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
COMMIT
# Completed on Fri May 10 09:48:11 2019
# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019
*mangle
:PREROUTING ACCEPT [94508:77994638]
:INPUT ACCEPT [69063:75012854]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [50595:3429177]
:POSTROUTING ACCEPT [50595:3429177]
:FORWARD_direct - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direct - [0:0]
:POSTROUTING_direct - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A PREROUTING -j PREROUTING_direct
-A PREROUTING -j PREROUTING_ZONES_SOURCE
-A PREROUTING -j PREROUTING_ZONES
-A INPUT -j INPUT_direct
-A FORWARD -j FORWARD_direct
-A OUTPUT -j OUTPUT_direct
-A POSTROUTING -j POSTROUTING_direct
-A PREROUTING_ZONES -i ens192 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
COMMIT
# Completed on Fri May 10 09:48:11 2019
# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019
*security
:INPUT ACCEPT [63356:74467437]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [50595:3429177]
:FORWARD_direct - [0:0]
:INPUT_direct - [0:0]
:OUTPUT_direct - [0:0]
-A INPUT -j INPUT_direct
-A FORWARD -j FORWARD_direct
-A OUTPUT -j OUTPUT_direct
COMMIT
# Completed on Fri May 10 09:48:11 2019
# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019
*raw
:PREROUTING ACCEPT [94508:77994638]
:OUTPUT ACCEPT [50595:3429177]
:OUTPUT_direct - [0:0]
:PREROUTING_ZONES - [0:0]
:PREROUTING_ZONES_SOURCE - [0:0]
:PREROUTING_direct - [0:0]
:PRE_public - [0:0]
:PRE_public_allow - [0:0]
:PRE_public_deny - [0:0]
:PRE_public_log - [0:0]
-A PREROUTING -j PREROUTING_direct
-A PREROUTING -j PREROUTING_ZONES_SOURCE
-A PREROUTING -j PREROUTING_ZONES
-A OUTPUT -j OUTPUT_direct
-A PREROUTING_ZONES -i ens192 -g PRE_public
-A PREROUTING_ZONES -g PRE_public
-A PRE_public -j PRE_public_log
-A PRE_public -j PRE_public_deny
-A PRE_public -j PRE_public_allow
COMMIT
# Completed on Fri May 10 09:48:11 2019
# Generated by iptables-save v1.4.21 on Fri May 10 09:48:11 2019
*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [701:75587]
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
:FORWARD_IN_ZONES - [0:0]
:FORWARD_IN_ZONES_SOURCE - [0:0]
:FORWARD_OUT_ZONES - [0:0]
:FORWARD_OUT_ZONES_SOURCE - [0:0]
:FORWARD_direct - [0:0]
:FWDI_public - [0:0]
:FWDI_public_allow - [0:0]
:FWDI_public_deny - [0:0]
:FWDI_public_log - [0:0]
:FWDO_public - [0:0]
:FWDO_public_allow - [0:0]
:FWDO_public_deny - [0:0]
:FWDO_public_log - [0:0]
:INPUT_ZONES - [0:0]
:INPUT_ZONES_SOURCE - [0:0]
:INPUT_direct - [0:0]
:IN_public - [0:0]
:IN_public_allow - [0:0]
:IN_public_deny - [0:0]
:IN_public_log - [0:0]
:OUTPUT_direct - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j INPUT_direct
-A INPUT -j INPUT_ZONES_SOURCE
-A INPUT -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker_gwbridge -j DOCKER
-A FORWARD -o docker_gwbridge -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker_gwbridge ! -o docker_gwbridge -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A FORWARD -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A FORWARD -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j DROP
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i docker_gwbridge -o docker_gwbridge -j DROP
-A OUTPUT -j OUTPUT_direct
-A DOCKER-ISOLATION -i docker0 -o docker_gwbridge -j DROP
-A DOCKER-ISOLATION -i docker_gwbridge -o docker0 -j DROP
-A DOCKER-ISOLATION -j RETURN
-A FORWARD_IN_ZONES -i ens192 -g FWDI_public
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -o ens192 -g FWDO_public
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ACCEPT
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A INPUT_ZONES -i ens192 -g IN_public
-A INPUT_ZONES -g IN_public
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
COMMIT
# Completed on Fri May 10 09:48:11 2019
[root@yksv001173 ~]#
然后关闭防火墙
[root@yksv001173 ~]# systemctl stop firewalld.service
现在在重新加入一下
[root@yksp001103 ~]# docker swarm join \
> --advertise-addr 10.90.1.103 \
> --listen-addr 10.90.1.103:2377 \
> --token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-br62zeo51n33vx7rc0717ddmi \
> 10.90.1.173:2377
Error response from daemon: can't initialize raft node: rpc error: code = 2 desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = 14 desc = grpc: the connection is unavailable
[root@yksp001103 ~]#
解决方案:把10.90.1.103的防火墙也关闭
[root@yksp001103 ~]# docker swarm join \
> --advertise-addr 10.90.1.103 \
> --listen-addr 10.90.1.103:2377 \
> --token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-br62zeo51n33vx7rc0717ddmi \
> 10.90.1.173:2377
This node joined a swarm as a manager.
3.2.2、worker节点
首先要获取worker的token,在ser1上执行以下命令:
[root@yksv001173 ~]# docker swarm join-token worker
然后执行以下命令,将ser3服务器作为worker节点加入集群:
[root@yksp001102 ~]# systemctl stop firewalld.service
[root@yksp001102 ~]# iptables-save
[root@yksp001102 ~]# docker swarm join \
> --advertise-addr 10.90.1.102 \
> --listen-addr 10.90.1.102:2377 \
> --token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-9w6njph286adym2dvk4xtfd6d \
> 10.90.1.173:2377
This node joined a swarm as a worker.
[root@yksp001102 ~]#
3.3、查看节点
以下命令只能在manager节点上执行
查出集群的节点列表
语法
docker node ls [OPTIONS]
Options
1、--filter , -f: 根据条件筛选查询结果
示例
[root@yksv001173 ~]# docker node ls
现在集群已经搭建完成!!!
3.4、修改节点
以下命令只能在manager节点上执行
3.4.1、节点降级
将manager节点(10.90.1.103)降为worker
语法
docker node demote NODE [NODE...]
示例
[root@yksv001173 ~]# docker node demote yksp001103
Manager yksp001103 demoted in the swarm.
节点降级成功!!!
3.4.2、节点升级
将worker节点提升为manager
语法
docker node promote NODE [NODE...]
示例
[root@yksv001173 ~]# docker node promote yksp001103
Node yksp001103 promoted to a manager in the swarm.
3.4.3、修改节点参数
语法
docker node update [OPTIONS] NODE
Options
1、--availability: 节点的有效性("active"|"pause"|"drain")
Active:集群中该Node可以被指派Task
Pause:集群中该Node不可以被指派新的Task,但是其他已经存在的Task保持运行
Drain:集群中该Node不可以被指派新的Task,Swarm Scheduler停掉已经存在的Task,并将它们调度到可用的Node上
2、--role: 节点角色(“worker”|“manager”)
示例
[root@yksv001173 ~]# docker node update --availability Active yksv001173
3.5. 退出节点
3.5.1、docker node rm
从集群中移除一个或多个节点(manager 节点执行)
语法
docker node rm [OPTIONS] NODE [NODE...]
Options
1、--force , -f: 强制从集群中删除节点
示例
[root@yksv001173 ~]# docker node rm -f yksp001102
3.5.2、docker swarm leave
退出集群(在需要退出的节点上面执行)
语法
docker swarm leave [OPTIONS]
Options
--force , -f: 强制从集群中删除节点
示例
[root@yksp001102 ~]# docker swarm leave
现在把10.90.1.102节点加入进去
[root@yksv001102 ~]# docker swarm join \
--advertise-addr 10.90.1.102 \
--listen-addr 10.90.1.102:2377 \
--token SWMTKN-1-0nvju9ip7q5k0s99lhd0f0w54wugucs7m5mkt0ep1kjwxnqu4a-9w6njph286adym2dvk4xtfd6d \
10.90.1.173:2377
4、应用部署
4.1、创建服务
语法
docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]
Options
1、--detach , -d: 指定容器运行于前台还是后台,默认为false
2、--name: 服务名称
3、--network: 网络连接
4、--publish , -p: 端口映射
5、--env , -e: 设置环境变量
6、--tty , -t: 分配tty设备,该可以支持终端登录
7、--mount: 文件挂载
8、--replicas: 指定任务数量
示例
[root@yksv001173 ~]# docker service create --replicas 3 -p 8080:80 --name api_131 \
--mount type=bind,source=/storage/apiapp_log,destination=/go/src/logs \
--mount type=bind,source=/root/apiapp/app.conf,destination=/root/app.conf \
--mount type=bind,source=/root/apiapp/run_application.sh,destination=/root/run_application.sh \
-e RUN_MODE=Production \
-t registry.youkeshu.com:5000/nginx:php7.1v3
提示mount挂载有问题。
解决方案:没有找到解决方案
创建服务2
[root@yksv001173 docker_project]# pwd
/root/docker_project
[root@yksv001173 docker_project]# vim docker-compose.yml
version: "3"
services:
web:
image: registry.xxxxxx.com:5000/nginx:php7.1v3
deploy:
replicas: 2
restart_policy:
condition: on-failure
ports:
- "8090:80"
networks:
- "net"
volumes:
- "mydata:/var/www"
networks:
net:
volumes:
mydata:
创建stack
[root@yksv001173 docker_project]# docker stack deploy -c docker-compose.yml web
创建服务3
[root@yksv001173 ~]# docker service create --replicas 2 -p 8091:80 --name nginx_test registry.youkeshu.com:5000/nginx:php7.1v3
查看详细信息
[root@yksv001173 ~]# docker service ps --no-trunc nginx_test
解决方案:
[root@yksv001173 ~]# cd /usr/libexec/docker
[root@yksv001173 docker]# ln -s docker-runc-current docker-runc
[root@yksv001103 docker]# ln -s docker-runc-current docker-runc
[root@yksv001102 docker]# ln -s docker-runc-current docker-runc
4.2、修改服务
4.2.1、修改服务参数
语法
docker service update [OPTIONS] SERVICE
Options
1、--detach , -d: 指定容器运行于前台还是后台
2、--env-add: 增加环境变量
3、--env-rm: 删除环境变量
4、--mount-add: 增加文件挂载
5、--mount-rm: 通过目标路径删除文件挂载
6、--network-add: 增加网络设置
7、--network-rm: 移除网络设置
8、--publish-add: 增加端口映射
9、--publish-rm: 通过目标端口移除端口映射
10、--replicas: 修改任务数量
示例
现在将该api_131的任务数量修改为2个
[root@yksv001173 ~]# docker service update --replicas 2 api_131
4.2.2、修改任务数量
虽然通过docker service update命令也可以修改任务数量,但是docker还提供了一个修改任务数量的命令。
该命令可以修改一个或多个服务的任务数量
语法
docker service scale SERVICE=REPLICAS [SERVICE=REPLICAS...]
示例
docker service scale ser1=3 ser2=5
[root@yksv001173 ~]# docker service scale api_131=3
4.3、查看服务
4.3.1、查看服务列表
manager节点执行
语法
docker service ls [OPTIONS]
Options
1、--filter , -f: 过滤条件
示例
docker service ls --filter name=redis
[root@yksv001173 ~]# docker service ls --filter name=api_131
4.3.2、查看任务列表
manager执行,可查看一个或多个服务的任务列表
语法
docker service ps [OPTIONS] SERVICE [SERVICE...]
Options
1、--filter , -f: 过滤条件
示例
docker service ps api_131
[root@yksv001173 ~]# docker service ps api_131
4.3.3、查看服务详情
manager执行,可查看一个或多个服务的详细情况
语法
docker service inspect [OPTIONS] SERVICE [SERVICE...]
Options
1、--pretty: 格式化输出信息
示例
[root@yksv001173 ~]# docker service inspect api_131
4.4、删除服务
manager 执行,删除一个或多个服务
语法
docker service rm SERVICE [SERVICE...]
示例
[root@yksv001173 ~]# docker service rm api_131
4.5、查看服务日志
manager执行,查看服务或任务的日志
语法
docker service logs [OPTIONS] SERVICE|TASK
Options
- --follow , -f: 跟随输出
- --tail: 显示最新的N条日志
- --since: 显示从某个时间开始的所有日志
- --timestamps , -t: 显示时间戳
示例
[root@yksv001173 ~]# docker service log -f api_131
引申:
1、创建可视化Portainer.io管理界面
[root@yksv001173 ~]# docker service create \
--name portainer \
--publish 9000:9000 \
--constraint 'node.role == manager' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
portainer/portainer \
-H unix:///var/run/docker.sock
登录10.90.1.173:9000,然后创建用户:admin,创建密码:xxxxxx
继续在集群主控节点上部署可视化的visualizer服务
# 可以非常直观的显示整个Swarm集群的信息、状态、运行的容器等
[root@yksv001173 ~]# docker service create \
--name=viz \
--publish=8088:8080/tcp \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
manomarks/visualizer
# 访问方法: http://4台机器的任何一个ip:8088
没有镜像,解决方案:更换镜像
[root@yksv001173 ~]# docker service update --image clarenceb/visualizer viz
浏览器访问10.90.1.173:8088
5、问题及解决
(1)、container ingress-sbox is already present in sandbox ingress sbox
错误
错误
集群部署的时候,节点无法启动容器,且报错:container ingress-sbox is already present in sandbox ingress sbox,这个时候可能是因为docker的SELinux配置问题。
解决办法:编辑文件/etc/sysconfig/docker,若不存在该文件,则添加文件。添加以下内容:
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false' if [ -z "${DOCKER_CERT_PATH}" ]; then DOCKER_CERT_PATH=/etc/docker fi
(2)、connection is unavailable
错误
错误
添加集群节点的时候报如上图的错误。可能有两个原因,第一,查看下防火墙的问题,需要配置防火墙,或者暴力一点直接关闭防火墙,另外一个原因就是检查下你的ip是不是输错了。我因为ip敲错了,困惑了很久。
(3)、invalid mount
错误
错误
节点机器起容器的时候报上图的错,请仔细检查挂载的目录是否存在。
以上就是Docker Swarm集群部署及应用部署的全部内容,不足之处请大家提出宝贵意见!!!