打赏

星辰大海ゞ

That which does not kill us makes us stronger!

导航

Dockerfile指令详解--VOLUME 指令

Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗。Alpine Linux提供了自己的包管理工具:apk,我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息。

Alpine Docker镜像继承了Alpine Linux发行版的这些优势,相比于其他Linux Docker进行,它的体积非常小,docker.io/alpine:3.7只有4.15M,而 CentOS和Ubuntu系列的Docker镜像则都在200M左右。据说Docker官方也已开始推荐使用Alpine替代之前的Ubuntu来作为基础镜像,因为这样会带来多个好处,包括镜像下载速度加快,镜像安全性提高,占用更少的主机磁盘空间等。

Alpine Docker为了精简体积,默认是没有安装bash的。 需要的话可以查看官方文档:https://www.cyberciti.biz/faq/alpine-linux-install-bash-using-apk-command/

-----------------------------------------------------------------------------------------------------------------------------

格式为:

VOLUME ["<路径1>", "<路径2>"...] 
VOLUME <路径> 

之前我们说过,容器运行时应该尽量保持容器存储层不发生写操作,对于数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,后面的章节我们会进一步介绍 Docker 卷的概念。

为了防止运行时用户忘记将动态文件所保存目录挂载为卷,在 Dockerfile 中,我们可以事先指定某些目录挂载为匿名卷,这样在运行时如果用户不指定挂载,其应用也可以正常运行,不会向容器存储层写入大量数据。

VOLUME /data

这里的 /data 目录就会在运行时自动挂载为匿名卷,任何向 /data 中写入的信息都不会记录进容器存储层,从而保证了容器存储层的无状态化。当然,运行时可以覆盖这个挂载设置。比如:

docker run -d -v mydata:/data xxxx

在这行命令中,就使用了 mydata 这个命名卷挂载到了 /data 这个位置,替代了 Dockerfile 中定义的匿名卷的挂载配置。

 

使用 dokcer inspect mycontainer 可以查看到具体的挂载情况:

如上图所示,容器中的"/home/xiaoban/logs/eureka-server/log" 被自动匿名挂载到了本地机器上的 /var/lib/docker/volumes/***

 

posted on 2018-11-07 19:21  星辰大海ゞ  阅读(28995)  评论(1编辑  收藏  举报