Docker container 持久化配置文件是个好的做法吗?

2020-08-24 12:26:07 +08:00
 JasonLaw

第一种是不持久化配置文件,如下所示,使用redis-server --requirepass "123456" --appendonly yes进行相关的配置并启动。

docker run -d --name one-Redis \
-p 6379:6379 \
-v Redis_data:/data \
redis:4.0.9 \
redis-server --requirepass "123456" --appendonly yes

第二种是使用配置文件,自己在/home/user/docker/redis/redis.conf设置好相关的配置,通过-v /home/user/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf将配置导入 container,然后通过redis-server /usr/local/etc/redis/redis.conf启动。

docker run -d --name another-Redis \
-p 6379:6379 \
-v Redis_data:/data \
-v /home/user/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf \
redis:4.0.9 \
redis-server /usr/local/etc/redis/redis.conf

我个人觉得,第一种做法移植性很好,无需自己维护 docker host 中的配置。我自己并没有使用 docker 很久,所以想听听大家的意见。

还有一个问题,有没有什么情况是只能使用第二种方式的呢?

1826 次点击
所在节点    Docker
8 条回复
xgfan
2020-08-24 13:36:59 +08:00
当你需要配置 50 个参数时。
Acoffice
2020-08-24 14:02:02 +08:00
1. 不需要更改 redis 配置的时候.
2. 要更改 redis 配置的时候.
dolphintwo
2020-08-24 14:04:11 +08:00
小孩子才做选择题,我选择 compose
lhx2008
2020-08-24 14:16:47 +08:00
k8s 就是用 tmpfs 挂配置进容器的,问题不大
Niphor
2020-08-24 14:32:44 +08:00
改个配置要删一次容器么?兄弟?
byzf
2020-08-24 16:19:03 +08:00
方法 2 依赖两个脚本, 一个 docker 启动脚本一个 redis.conf, 两个脚本还互相依赖, 比如 redis 开放的端口和 docker forward 的端口是互相依赖的, 分开在两个文件中配置就会带来各种问题. 用的久了必然选 1.

另外有些人可能以为 2 可以在不重启 container 的情况下重载配置. 实际上操作起来比较麻烦, 因为修改 host 上的 redis.conf 的时候, 很多情况下会改变 redis.conf 的 inode, 而 container 内部的配置文件不会跟着一起改变, 这时还是要重启 container.

@xgfan 50 个参数也能用 1, 因为你启动 docker 用的是另一个脚本.
Trim21
2020-08-24 16:44:28 +08:00
跑单个 docker 镜像我也选择写个 compose, 要改 command 的时候一个参数都嫌多,要改 env50 个也不嫌多
muzuiget
2020-08-24 16:47:25 +08:00
我用第一种,配置也算是代码,把 redis.conf 用 COPY 指令复制进去就是了,省得再次映射到真机上。

哪怕 build 了第一种的 image,要调试修改配置文件,总是可以 run 一个 bash 来手动执行 redis 命令。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700910

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX