Docker Stack
Outline:
- Basic Idea
- Commands
- docker-stack.yml
Docker Stack是Docker Compose的进化版, 是Docker原生的部署和管理多服务应用的方案, 默认集成在Docker引擎中, 且提供了简单的声明式接口对应用进行部署和全生命周期管理
Basic Idea
虽然是Docker Compose的进化版, 但是Stack是Docker原生的, 和Swarm一样
- 事实上, Docker Stack依赖于Docker Swarm, Stack将被部署到Swarm上
对应用的任何变更都应该通过Stack文件进行声明, 然后用docker stack deploy部署
- Stack文件是Stack的配置的唯一声明, 所有Stack相关的改动都要体现在Stack文件中
- 不要用命令来修改
Docker Stack不支持build, 意味着在部署Stack之前, 所有镜像必须提前build, 这一点不同于Docker Compose
具体细节就不赘述了, 用的时候再查
Commands
部署
docker stack deploy |
列出Stack
列出Swarm集群的全部Stack:
docker stack ls |
查看Stack详情
docker stack ps <stack> |
删除Stack
从Swarm中移除Stack
docker stack rm <stack> |
- 只会删除网络和服务, 不会删除密钥和卷
docker-stack.yml
Docker Stack根据Stack文件部署应用, 也就是docker-stack.yml
docker-stack.yml就是docker-compose.yml, 唯一的区别就是Docker Stack文件的version要大于3.0
- 二者文件格式相同
项目地址
version: "3.2" |
关键字
顶级关键字:
version: 代表Compose文件格式的版本号. 要应用于Stack, 需要 > 3.0servicesnetworks: 默认用overlay网络, 因为是Swarm模式secrets:external: 在Stack部署之前, 该密钥必须存在
网络
Docker Stack首先会检查并创建networks, 因为服务依赖于网络
默认情况下, overlay网络的控制层是加密的, 如果要加密数据层, 需要在Stack文件中driver_opts下指定encrypted: 'yes'
服务
服务只有一个必填的下级关键字image, 指定构建服务副本所需的镜像
其余下级关键字:
Docker: 指定Docker Registry, 默认是Docker Hubports: 定义端口映射, 注意由于是Swarm模式, 默认网络是Ingress模式,port项可以简写, 如果指定用Host模式, 则port项要写完整格式secrets: 定义了密钥, 不同于网络, 密钥必须已经在顶级关键字secrets下定义, 且必须在系统上已存在envirenment: 向容器中注入环境变量, 一般都将它们以密钥形式传递deploy: 定义部署约束, 比如节点ID, 节点名称, 节点角色, 还有更新约束等待- 更新约束就是
docker service uodate的那些参数,replicas之类
- 更新约束就是