文章目录
Docker Stack
概念
- 技术由来:Docker Swarm在大规模场景下的多服务部署和管理是一件很难的事情,为解决此问题,产生了Docker stack,
Docker Stack基于Docker Swarm之上来完成对多服务进行部署和管理的 - 实现方式:通过使用与Compose一样的yml文件中定义应用,然后通过
docker stack deploy
命令完成部署和管理 - 体系结构:Stack 位于 Docker 应用层级的最顶端。Stack 基于服务进行构建,而服务又基于容器
- Stack与Compose区别:
- Docker Stack不支持
bulid
指令,使用的镜像必须是构建好的,而Docker Compose可以使用,相对而言Docker Compose更适合开发使用 - Docker Stack是集成在Docker引擎中的,直接使用命令即可,而Docker Compose 则是一个Python项目,使用Docker API规范操作容器
- Docker Stack不支持version 2的yml文件,至少version 3以上。而Docker Compose 对version 2或3都可以处理
- Docker Stack 更适合处理多服务也能处理单机服务,而Docker Compose 仅能处理单机服务,所以Docker Stack 可以把Docker Compose的工作都处理了,占据了主导地位。
- Docker Stack不支持
命令
[root@node1 reg.mydocker.com]# docker stack --help
#格式
Usage: docker stack [OPTIONS] COMMAND
#Docker stack任务管理
Manage Docker stacks
#选项
Options:
--orchestrator string Orchestrator to use (swarm|kubernetes|all)|选择协调器是swarm还是k8s或者2者
#子命令
Commands:
deploy Deploy a new stack or update an existing stack| 加载一个新的stack任务或者更新某一stack任务
ls List stacks|显示所有stack任务的列表
ps List the tasks in the stack|列出某一个stack的详细任务
rm Remove one or more stacks|删除一个或者多个stack任务
services List the services in the stack|列出某一个stack的所有服务
Docker stack 实践
实践环境
主机 | IP | 作用 |
---|---|---|
node1 | 192.168.27.11 | 安装有Docker(18.09.6)、集群管理节点、可访问私有仓库 |
node2 | 192.168.27.12 | 安装有Docker(18.09.6)、集群工作节点、可访问私有仓库 |
node3 | 192.168.27.13 | 安装有Docker(18.09.6)、集群工作节点、可访问私有仓库 |
repository | 192.168.27.12 | 搭建有harbor私有仓库,作为集群操作中的镜像使用仓库 |
实践过程
部署一个简单服务
官方compose文件模板:https://docs.docker.com/compose/compose-file/
- 制作一个yml文件,开启一个web服务,使用nginx容器,生成3个副本,自定义卷与网络
[root@node1 stack]# vim docker-stack.yml
version: '3'
services:
web:
image: library/nginx
ports:
- "80:80"
volumes:
- web-data:/usr/share/nginx/html
networks:
- vm_net
deploy:
replicas: 3
volumes:
web-data:
networks:
vm_net:
- stack 运行、查看、测试
[root@node1 stack]# docker stack deploy -c docker-stack.yml my_cluster
prots Additional property prots is not allowed
[root@node1 stack]# vim docker-stack.yml
[root@node1 stack]# docker stack deploy -c docker-stack.yml my_cluster
Creating network my_cluster_vm_net
Creating service my_cluster_web
[root@node1 stack]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
e0eo4mb2xnxa my_cluster_web replicated 3/3 nginx:latest *:80->80/tcp
[root@node1 stack]# docker service ps my_cluster_web
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
uvq3ayobwam1 my_cluster_web.1 nginx:latest node1 Running Running 17 seconds ago
ar53a9v7o94t my_cluster_web.2 nginx:latest node3 Running Running 16 seconds ago
ulji2jzh25qq my_cluster_web.3 nginx:latest node2 Running Running 16 seconds ago
[root@node1 stack]# curl 192.168.27.11
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {