docker volume 的几个问题跟测试相关


想用 docker 和 compose 做集成测试,为了每次环境都是一致的,是不是应该每个测试案例都用一个新的干净的容器去运行。这样会不会很麻烦?数据应该怎么样初始化和清理?

还有就是 dockerfile 中用到的 volume ,如果我是 from 过来的镜像,那么它本身挂载的 volume 我能不能取消呢,现在只想到一种做法就是把它原来的 dockerfile 从 volume 那行开始修改。

另外看到 redis 的官方镜像里面有这么两句话,不知道有什么意义。

RUN mkdir /data && chown redis:redis /data
VOLUME /data
已邀请:

xiaolunsanguo - 京东商城-基础平台部-JDOS团队

赞同来自:


你这里有三个问题:
1. 每次测试推荐使用新的干净容器运行,这样才够docker。容器不要看做是虚拟机那么重,这是轻量级的,甚至,你可以理解这只不过是几个进程而已。每次测试新启动几个进程,这样是不是更容易接受些?当然每次清理和新建会带来一定的管理复杂度,如果是单机的话,可以直接用compose管理其生命周期;集群的话,可以使用k8s或者swarm这样的东东。
2. 目前没有直接的办法取消。不过你可以自己定制一版docker,用以清理volume配置。还有种暴力的办法,就是把/var/lib/docker/graph/镜像id/json中的volume进行修改,然后重启docker daemon。
3. 这个的含义是这样的。redis本身可以做持久化存储,存储的目录默认是./,因为WORKDIR是/data,所以默认会持久化存储的文件会防止在/data里。持久化的数据直接使用物理机的外挂存储(volume)的好处是存储空间更大,且效率和稳定性较高。

要回复问题请先登录注册