- 一、Docker Swarm简介
- 1.简介
- 2.Docker Swarm 优点
- 3.docker swarm 相关概念
- 二、Docker Swarm实践
- 需提前安装好
- 1.创建Swarm集群
- 初始化集群:docker swarm init
- 根据提示在其他docker节点上执行命令:(其他节点必须先安装好docker服务并启动)
- 查看集群
- 2.保证docker服务正常运行
- 3.分发证书
- 三、docker stack部署
- 1.解析和默认拉取仓库(配置harbor仓库)
- server1配置成haobor网络仓库
- 导入镜像
- 2.创建集群服务:
- 3.实现负载均衡
- 4.弹性伸缩
- 4.1滚动更新
- 命令方式,需提前创建好集群和部署好监控
- 4.2下载镜像
- 5.创建集群,并监控
- 6.浏览器查看监控
- 7.更新
- 8.回滚
- 四、Portainer可视化
- 1.下载图形服务,导入到harbor仓库
- 新建项目,导入镜像
- 2.启动图形
- 启动成功
- 浏览器查看
一、Docker Swarm简介
1.简介
- Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
- Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。
- Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
- Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。
2.Docker Swarm 优点
任何规模都有高性能表现
灵活的容器调度
服务的持续可用性
和 Docker API 及整合支持的兼容性
Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。
3.docker swarm 相关概念
- 节点分为管理 (manager) 节点和工作 (worker) 节点
任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。 - 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
需提前安装好
主机 | ip | 服务 | 权限 |
server1 | 172.25.15.1 | haobor、docker | 网络仓库 |
server2 | 172.25.15.2 | docker | 管理端 |
server3 | 172.25.15.3 | docker | 客户端 |
server4 | 172.25.15.4 | docker | 客户端 |
1.创建Swarm集群
初始化集群:docker swarm init
[root@server2 ~]# docker swarm init #初始化集群
Swarm initialized: current node (g8o5171683sfwozlf93c0ks2e) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@server2 ~]#
根据提示在其他docker节点上执行命令:(其他节点必须先安装好docker服务并启动)
## server3
[root@server3 ~]# docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377 #加入集群
This node joined a swarm as a worker.
## server4
[root@server4 ~]# docker swarm join --token SWMTKN-1-4b7mohh0nx2k0nvqxsqanywz9iqkinajv8hsyh0e84brodg92r-5k4jq4ezk2ffchj913i5lta1r 172.25.15.2:2377 #加入集群
This node joined a swarm as a worker.
查看集群
[root@server2 ~]# docker node ls
2.保证docker服务正常运行
[root@server1 ~]# cd /etc/sysctl.d
[root@server1 sysctl.d]# ls
99-sysctl.conf docker.conf
[root@server1 sysctl.d]# vim docker.conf
[root@server1 sysctl.d]# cat docker.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
[root@server1 sysctl.d]# scp docker.conf server3:/etc/sysctl.d/
docker.conf 100% 79 112.7KB/s 00:00
[root@server1 sysctl.d]# scp docker.conf server4:/etc/sysctl.d/
docker.conf 100% 79 112.3KB/s 00:00
[root@server1 sysctl.d]#
3.分发证书
### server2、3、4都要有证书
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# ls
certs.d daemon.json key.json
[root@server1 docker]# scp -r certs.d server2:/etc/docker/
ca.crt 100% 2106 3.8MB/s 00:00
[root@server1 docker]# scp -r certs.d server3:/etc/docker/
ca.crt 100% 2106 1.2MB/s 00:00
[root@server1 docker]# scp -r certs.d server4:/etc/docker/
ca.crt 100% 2106 2.1MB/s 00:00
[root@server1 docker]#
1.解析和默认拉取仓库(配置harbor仓库)
### server 2、3、4都要有
[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# vim daemon.json
[root@server1 docker]# vim daemon.json
[root@server1 docker]# cat daemon.json
{
"registry-mirrors" : ["https://reg.westos.org"] #配置默认仓库为re.westos.org
}
[root@server1 docker]# scp daemon.json server2:/etc/docker/
daemon.json 100% 52 81.2KB/s 00:00
[root@server1 docker]# scp daemon.json server3:/etc/docker/
daemon.json 100% 52 57.5KB/s 00:00
[root@server1 docker]# scp daemon.json server4:/etc/docker/
daemon.json 100% 52 69.1KB/s 00:00
server1配置成haobor网络仓库
[root@server1 ~]# ls
auth convoy.tar.gz harbor nginx.tar
busybox.tar game2048.tar harbor-offline-installer-v1.10.1.tgz rhel7.tar
compose get-docker.sh lxcfs-2.0.5-3.el7.centos.x86_64.rpm
convoy haproxy.tar mario.tar
[root@server1 ~]# cd harbor
[root@server1 harbor]# ls
common docker-compose.yml harbor.yml LICENSE
common.sh harbor.v1.10.1.tar.gz install.sh prepare
[root@server1 harbor]# ./install.sh #脚本运行安装haorbor仓库
导入镜像
[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/images/
lftp 172.25.15.250:/pub/images> get myapp.tar #下载镜像
15931392 bytes transferred
lftp 172.25.15.250:/pub/images> exit
[root@server1 ~]# ls
auth convoy.tar.gz harbor myapp.tar
busybox.tar game2048.tar harbor-offline-installer-v1.10.1.tgz nginx.tar
compose get-docker.sh lxcfs-2.0.5-3.el7.centos.x86_64.rpm rhel7.tar
convoy haproxy.tar mario.tar
[root@server1 ~]# docker load -i myapp.tar #导入镜像
d39d92664027: Loading layer 4.232MB/4.232MB
8460a579ab63: Loading layer 11.61MB/11.61MB
c1dc81a64903: Loading layer 3.584kB/3.584kB
68695a6cfd7d: Loading layer 4.608kB/4.608kB
05a9e65e2d53: Loading layer 16.38kB/16.38kB
a0d2c4392b06: Loading layer 7.68kB/7.68kB
Loaded image: ikubernetes/myapp:v1
Loaded image: ikubernetes/myapp:v2
[root@server1 ~]# docker tag ikubernetes/myapp:v1 reg.westos.org/library/myapp:v1 #修改名称,打标签
[root@server1 ~]# docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2 #修改名称,打标签
[root@server1 ~]# docker push reg.westos.org/library/myapp:v1 #传入网络仓库
[root@server1 ~]# docker push reg.westos.org/library/myapp:v2 #传入网络仓库
2.创建集群服务:
命令解释:
docker service create 命令创建一个服务
–name 服务名称命名为 my_cluster
–network 指定服务使用的网
络模型
–replicas 设置启动的示例数为3
[root@server2 ~]# docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1 #创建以myapp:v1为镜像的集群,数量为三
xt6qchju7zs8g1bw6z1i1uh60
overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
verify: Service converged
[root@server2 ~]#
[root@server2 ~]# docker service ps webservice #查看
3.实现负载均衡
[root@server2 ~]# curl 172.25.15.2/hostname.html
31aa6f55230f
[root@server2 ~]# curl 172.25.15.2/hostname.html
9d7c1b78c2fd
[root@server2 ~]# curl 172.25.15.2/hostname.html
bb7968ebac81
[root@server2 ~]# curl 172.25.15.2/hostname.html
31aa6f55230f
[root@server2 ~]# curl 172.25.15.2/hostname.html
9d7c1b78c2fd
[root@server2 ~]# curl 172.25.15.2/hostname.html
bb7968ebac81
4.弹性伸缩
4.1滚动更新
命令方式,需提前创建好集群和部署好监控
- docker service update --image httpd --update-parallelism 2 --update-delay 5s my_cluster
- –image 指定要更新的镜像
- –update-parallelism 指定最大同步更新的任务数
- –update-delay 指定更新间隔
4.2下载镜像
[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/images/
lftp 172.25.15.250:/pub/images> get visualizer.tar #下载图像监控软件包
167856640 bytes transferred
lftp 172.25.15.250:/pub/images> exit
[root@server1 ~]# ls
auth convoy.tar.gz harbor myapp.tar
busybox.tar game2048.tar harbor-offline-installer-v1.10.1.tgz nginx.tar
compose get-docker.sh lxcfs-2.0.5-3.el7.centos.x86_64.rpm rhel7.tar
convoy haproxy.tar mario.tar visualizer.tar
[root@server1 ~]# docker load -i visualizer.tar #导入镜像
[root@server1 ~]# docker tag dockersamples/visualizer:latest reg.westos.org/library/visualizer:latest #打标签,修改名称
[root@server1 ~]# docker push reg.westos.org/library/visualizer:latest #导入仓库
5.创建集群,并监控
[root@server2 ~]# vim docker-compose.yml
[root@server2 ~]# cat docker-compose.yml
[root@server2 ~]# docker stack deploy -c docker-compose.yml mycluster #运行脚本创建集群,并添加监控
Creating service mycluster_web
Updating service mycluster_visualizer (id: 840iwj37i2tg5756gxdtx51g0)
[root@server2 ~]# docker stack ps mycluster
6.浏览器查看监控
7.更新
8.回滚
1.下载图形服务,导入到harbor仓库
[root@server1 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/docker
cd ok, cwd=/pub/docker
lftp 172.25.15.250:/pub/docker> mirror portainer/ #下载图形服务
Total: 1 directory, 3 files, 0 symlinks
New: 3 files, 0 symlinks
86588866 bytes transferred
lftp 172.25.15.250:/pub/docker> exit
[root@server1 ~]# ls
auth get-docker.sh myapp.tar
busybox.tar haproxy.tar nginx.tar
compose harbor portainer
convoy harbor-offline-installer-v1.10.1.tgz rhel7.tar
convoy.tar.gz lxcfs-2.0.5-3.el7.centos.x86_64.rpm visualizer.tar
game2048.tar mario.tar
[root@server1 ~]# cd portainer/
[root@server1 portainer]# docker load -i portainer.tar #导入镜像
dd4969f97241: Loading layer 278kB/278kB
e7260fd2a5f2: Loading layer 73.85MB/73.85MB
Loaded image: portainer/portainer:latest
[root@server1 portainer]# docker load -i portainer-agent.tar #导入镜像
1f0ac9aec537: Loading layer 2.048kB/2.048kB
0cf0d1d03535: Loading layer 12.15MB/12.15MB
Loaded image: portainer/agent:latest
[root@server1 portainer]#
新建项目,导入镜像
[root@server1 portainer]# docker tag portainer/agent:latest reg.westos.org/portainer/agent:latest #打标签,修改名称
[root@server1 portainer]# docker push reg.westos.org/portainer/portainer:latest #导入到网络仓库
[root@server1 portainer]# docker push reg.westos.org/portainer/agent:latest #导入到网络仓库
2.启动图形
## 下载服务包
[root@server2 ~]# lftp 172.25.15.250
lftp 172.25.15.250:~> cd pub/docker/
lftp 172.25.15.250:/pub/docker> mirror portainer/
Total: 1 directory, 3 files, 0 symlinks
New: 3 files, 0 symlinks
86588866 bytes transferred
lftp 172.25.15.250:/pub/docker> exit
[root@server2 ~]# ls
busybox.tar convoy docker-compose.yml portainer
compose convoy.tar.gz nginx.tar
[root@server2 ~]# cd portainer/
[root@server2 portainer]# docker stack deploy -c portainer-agent-stack.yml portainer #启动图形
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer
[root@server2 portainer]#
启动成功
浏览器查看