diff --git a/SUMMARY.md b/SUMMARY.md index fb4d7c7..507fbe9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -86,6 +86,7 @@ * [部署服务](swarm_mode/deploy.md) * [使用 compose 文件](swarm_mode/stack.md) * [管理敏感数据](swarm_mode/secret.md) + * [管理配置信息](swarm_mode/config.md) * [安全](security/README.md) * [内核命名空间](security/kernel_ns.md) * [控制组](security/control_group.md) diff --git a/swarm_mode/config.md b/swarm_mode/config.md new file mode 100644 index 0000000..f34343c --- /dev/null +++ b/swarm_mode/config.md @@ -0,0 +1,52 @@ +## 在 Swarm 集群中管理配置数据 + +在动态的、大规模的分布式集群上,管理和分发配置文件也是很重要的工作。传统的配置文件分发方式(如配置文件放入镜像中,设置环境变量,volume 动态挂载等)都降低了镜像的通用性。 + +在 Docker 17.06 以上版本中,Docker 新增了 `docker config` 子命令来管理集群中的配置信息,以后你无需将配置文件放入镜像或挂载到容器中就可实现对服务的配置。 + +>注意:`docker config` 仅能在 Swarm 集群中使用。 + +这里我们以在 Swarm 集群中部署 `redis` 服务为例。 + +### 创建 config + +新建 `redis.conf` 文件 + +```bash +port 6380 +``` + +此项配置 Redis 监听 `6380` 端口 + +我们使用 `docker config create` 命令创建 `config` + +```bash +$ docker config create redis.conf redis.conf +``` + +### 查看 config + +使用 `docker config ls` 命令来查看 `secret` + +```bash +ID NAME CREATED UPDATED +yod8fx8iiqtoo84jgwadp86yk redis.conf 4 seconds ago 4 seconds ago +``` + +### 创建 redis 服务 + +```bash +$ docker service create \ + --name redis \ + # --config source=redis.conf,target=/etc/redis.conf \ + --config redis.conf \ + -p 6379:6380 \ + redis:latest \ + redis-server /redis.conf +``` + +如果你没有在 `target` 中显式的指定路径时,默认的 `redis.conf` 以 `tmpfs` 文件系统挂载到容器的 `/config.conf`。 + +经过测试,redis 可以正常使用。 + +以前我们通过监听主机目录来配置 Redis,就需要在集群的每个节点放置该文件,如果采用 `docker config` 来管理服务的配置信息,我们只需在集群中的管理节点创建 `config`,当部署服务时,集群会自动的将配置文件分发到运行服务的各个节点中,大大降低了配置信息的管理和分发难度。