Docker 17.06 引入了 Swarm 服务配置,它允许你在服务的镜像或者运行的容器外部存储非敏感信息,比如配置文件.这样保证了镜像的通用性,而无需将配置文件绑定到容器或使用环境变量来配置.
Configs 是安装在容器的文件系统中,而不是使用 RAM 磁盘.
Configs 可以随时添加或删除,服务可以共享一个配置.
Configs 可以与 Environments 或 Labels 结合使用,以获得最大的灵活性.
提醒:Docker Configs 仅对 Swarm 服务有效,对独立的容器是无用的.如需使用,可以启动 1 个副本的服务来使用 Docker Config.
►Docker Config 基本操作
友情提示:"需 Swarm Manager 权限才能操作 !"1,创建配置
用法
docker config create[参数] CONFIG file | -
参数
简写 参数 默认值 描述
-l --label 配置标签2,配置列表
用法
docker config ls[参数]
参数
简写 参数 默认值 描述
-f --filter 按条件过滤输出
--format GO 模板转化
-q --quiet 仅展示 ID3,配置详情
用法
docker config inspect[参数] CONFIG[CONFIG...]
参数
简写 参数 默认值 描述
-f --format GO 模板转化
--pretty 以人性化的格式打印信息4,配置删除
用法
docker config rm CONFIG[CONFIG...]
5,Docker Compose file 示例
version: "3.3"
services:
redis:
image: redis:latest
deploy:
replicas: 1
configs:
- my_config
- my_other_config
configs:
my_config:
file: ./my_config.txt
my_other_config:
external: true
提醒:仅 version 3.3 + 可用
详细: https://docs.docker.com/compose/compose-file/#configs
► Swarm 对 Config 的管理
在 Swarm 中添加一个 Config 时,Docker 通过 TLS 连接把 Config 发送给 Swarm Manager.这个 Config 经过加密后,存储在 Raft 日志中,而且整个 Raft 日志会被复制到其他 Manager 中,确保 Config 的高可用性.
在新创建的或正在运行的服务添加 Config 时,Config 将作为文件安装到容器中,文件路径默认为 linux 容器中的 /<config-name>.
可以在任何时候通过更新服务的方式授权其他的 Config 或移除已有的
Config 访问权.
如果节点是 Swarm Manager,或者正在运行服务任务已被授权访问这个 Config,那么这个节点才能访问这个配置.当容器任务停止运行时,共享给它的 Config 将从该容器的内存文件系统中卸载,并从节点的内存刷新.
如果一个节点运行了一个带 Config 的任务容器,在它失去与 Swarm 的连接后,这个任务容器仍然可以访问其 Config,但只有在节点重新连接到 Swarm 时才能接收更新.
正在运行的服务正在使用的 Config 不能删除.想要在不中断正在运行的服务的情况下删除配置可以参考 《Rotate a config》 .
为了更容易地更新或回退 Config,可以考虑在 Config Name 中添加版本号或日期.
如需更新 Stack ,可以更改 Compose file,然后重新运行
docker stack deploy - c < new - compose - file > <stack - name >
.如果 Compose file 使用新的 Config ,那么 services 将开始使用这些配置.
注意:配置是不可变的,所以无法更改现有服务的文件,可以创建一个新的 Config 来使用不同的文件.
► 示例一:在服务中添加 Config
1,创建配置
echo "This is a config" | docker config create my - config -
2,创建 redis 服务,使用 my-config 配置
docker service create--name redis--config my - config redis
3,查看容器所在的节点
docker service ps redis
4,查看配置内容
docker exec $(docker ps--filter name = redis - q) cat / my - config
► 示例二:配置 Nginx 首页
1,新建一个 html 页面 index.html
<html>
<head><title>Hello Docker</title></head>
<body>
<p>Hello Docker! This is a docker config page.</p>
</body>
</html>
2,创建配置 homepage
docker config create homepage index.html
3,创建 Nginx 配置文件 site.conf
server {
listen 80;
location / {
root / usr / share / nginx / html;
index index.html index.htm;
}
}
4,创建配置 nginx_config
docker config create nginx_config site.conf
5,创建 Nginx 服务
docker service create \
--name nginx \
--config source=nginx_config,target=/etc/nginx/conf.d/site.conf \
--config source=homepage,target=/usr/share/nginx/html/index.html \
--publish published=3000,target=80 \
nginx
6,验证 Nginx 服务配置
来源: http://www.jianshu.com/p/1e6828fd8947