在 Swarm 集群中管理配置数据
从 Docker 17.06 开始 ,Docker 新增了 docker config
子命令来管理集群中的配置信息,以后你无需将配置文件放入镜像或挂载到容器中就可实现对服务的配置。
注意:
config
仅能在 Swarm 集群中使用。和secret不一样,secret可以在集群和compose中使用
这里我们以在 Swarm 集群中部署 redis
服务为例。
创建 config
新建 redis.conf
文件
echo port 6380 > redis.conf
此项配置 Redis 监听 6380
端口
我们使用 docker config create
命令创建 config
$ docker config create redis.conf redis.conf
查看 config
使用 docker config ls
命令来查看 config
$ docker config ls
ID NAME CREATED UPDATED
w3871t24balw9qrrnytleye2c redis.conf 10 seconds ago 10 seconds ago
创建 redis 服务
$ docker service create \
--name redis \
--config redis.conf \
-p 6379:6380 \
redis:latest \
redis-server /redis.conf
如果你没有在 target
中指定路径,默认的 redis.conf
以 tmpfs
文件系统挂载到容器的 /config.conf
。
验证redis
查看redis 部署在哪个节点
[root@node1 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
oza6gq8niqyd redis replicated 1/1 redis:latest *:6379->6380/tcp
[root@node1 ~]# docker service ps oza6gq8niqyd
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
qed5nf0pelgk redis.1 redis:latest node2 Running Running 38 seconds ago
登录容器连接redis
[root@node2 network-scripts]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5054a265a3fe redis:latest "docker-entrypoint.s…" 56 seconds ago Up 54 seconds 6379/tcp redis.1.qed5nf0pelgknpmcg1dfbyj8r
[root@node2 network-scripts]# docker exec -it 5054 /bin/sh
# redis-cli -p 6380
127.0.0.1:6380> set k v
OK
127.0.0.1:6380> get k
"v"
127.0.0.1:6380>
以前我们通过挂载主机目录来配置 Redis,就需要在集群的每个节点放置该文件,如果采用 docker config
来管理服务的配置信息,我们只需在集群中的管理节点创建 config
,当部署服务时,集群会自动的将配置文件分发到运行服务的各个节点中,大大降低了配置信息的管理和分发难度。