【Dockerfile】01_COPY, ADD用法, Dockerfile优化

https://www.cnblogs.com/sparkdev/p/9573248.html
https://www.cnblogs.com/zdz8207/p/linux-docker-add-copy.html

Dockerfile关键字说明
https://juejin.cn/post/6881603934369087495

Dockerfile优化
https://docs.docker.com.zh.xy2401.com/develop/develop-images/dockerfile_best-practices/

https://moelove.info/2021/03/14/%E4%B8%87%E5%AD%97%E9%95%BF%E6%96%87%E5%BD%BB%E5%BA%95%E6%90%9E%E6%87%82%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E6%9E%84%E5%BB%BA/

目录挂载顺序问题
https://biningo.github.io/2021/01/07/docker%E7%9A%84volumes%E8%B8%A9%E5%9D%91/
https://www.ucloud.cn/yun/27376.html
挂载volume的行为
volume的挂载是 以宿主机为主 ,主要有如下几个行为可能:

host container mount result
文件夹不存在/文件夹存在但为空 文件夹不存在/存在但为空/存在且不为空 container中文件被覆盖(清空)
文件夹存在且不为空 文件夹不存在/存在但为空/存在且不为空 container中文件夹内容被覆盖(原内容清空, 覆盖为host上文件夹内容)

将容器已经存在的文件挂载到宿主机
由上面可知,容器中原本存在的文件一旦进过挂载,就一定会被宿主机覆盖,但是有如下几个方法,可以曲线救国:

docker cp命令先将容器内的数据copy到宿主机然后再进行挂载
在docker-entrypoint.sh等脚本中执行创建文件和文件夹等相关命令,因为挂载行为先与脚本的执行行为,所以在脚本执行的时候已经挂载volume,当脚本创建相关文件的时候就可以反映到宿主机上了

volume相关命令
docker volume ls #查看所有命名和匿名volume
docker inspect #查看volume相关信息

docker volume create #创建volume
docker volume rm #删除

docker volume preun #清空没有容器挂载中的volume stop中的容器的volume不会清空

#控制volume的读写权限
-v :容器内路径:ro #只读 在容器内只能读挂载的文件
-v :容器内路径:rw #读写 在容器内能读写挂载文件 默认

共享数据卷
一个容器可以共享其它容器已经挂载了的数据卷,一旦共享那么只要在任意一个容器里面操作数据卷都相当于操作同一个,会影响所有容器和宿主机上的文件。并且容器删除并不会删除数据卷

docker run --name b1 -v $PWD:/v1 -it busybox:1.32.0 sh
docker run --name b2 --volumes-from b1 -it busybox:1.32.0 sh

volume权限问题
TODO

volume规则总结
应该避免挂载一个空的或未创建的目录,这样可能会清空容器中原来存在的文件

如果挂载一个没有创建的文件,则docker会自动创建

docker挂载路径容器和宿主机不支持 相对路径 ,都必须指定 绝对路径

参考
https://www.ucloud.cn/yun/27376.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值