一文说清楚Dockerfile 中VOLUME到底有什么用?

Dockerfile的VOLUME指令常用于声明匿名卷,以确保容器中的数据在删除后仍可保留,如MySQL等数据库应用。它与`docker run -v`不同,VOLUME不自动绑定到宿主机目录,而是创建匿名卷。容器删除后,数据卷不会被删除。若同时使用-VOLUME和-v,以-v设定的目录为准。通常非数据库应用的Dockerfile不需要VOLUME,以保持可移植性。
摘要由CSDN通过智能技术生成

写在开头

相信大部分人对docker run -v这个参数都比较熟悉,无非就是把宿主机目录和容器目录做映射,以便于容器中的某些文件可以直接保存在宿主机上,实现容器被删除之后数据还在,比如我们把mysql装在容器中,肯定不能说容器被删mysql所有的数据也都不在了。第二个作用是也可以用来实现多容器共享同一份文件。

但如果玩过dockerfile的话就知道dockerfile还有个VOLUME指令,如

FROM centos:latest
RUN groupadd -r redis && useradd  -r -g redis redis?
RUN yum -y update &&  yum -y install epel-release && yum -y install redis && yum -y install net-tools
RUN mkdir -p /config && chown -R redis:redis /config
VOLUME /share/data #声明容器中/share/data为匿名卷
EXPOSE 6379

这个指令很容易和启动时的-v指令搞混淆,他们之间到底有什么区别呢,什么时候需要使用volume呢?
volume指令指定的位置在容器被删除以后数据文件会被删除吗?如果-v和volume指定了同一个位置,会发生什么事呢?

volume和run -v的区别,什么时候需要使用volume

容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中。为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在Dockerfi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值