Dockerfile 中的Volume有啥意义,光用docker run

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dockerfile 中的Volume有啥意义,光用docker run相关的知识,希望对你有一定的参考价值。

VOLUME 命令主要是在开发环境下非常有用:

编辑代码的时候,直接在宿主机里进行编辑,然后在 docker 里同步跑,无需反复启动关闭,这能发挥开发环境的最高性能。
对于 VOLUME 我更喜欢使用 docker-compose 进行指定:

db:
image: postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db

docker-compose 可以将多个服务进行捆绑了跑,上面的示例就是 web 服务和 db 服务分开来跑,非常适合组建复杂的环境。
参考技术A VOLUME 命令主要是在开发环境下非常有用: 编辑代码的时候,直接在宿主机里进行编辑,然后在 docker 里同步跑,无需反复启动关闭,这能发挥开发环境的最高性能。

Dockerfile 之 VOLUME

VOLUME ["/data"]

卷指令使用指定的名称创建一个挂载点,并将其标记为持有来自本机主机或其他容器的外部挂载卷。该值可以是一个JSON数组,VOLUME ["/var/log/"],也可以是一个有多个参数的普通字符串,比如VOLUME /var/log  or  VOLUME /var/log /var/db。有关通过Docker客户端的更多信息/示例和安装说明,请参阅通过卷文档共享目录。

docker run命令使用存在于基本映像中指定位置的任何数据初始化新创建的卷。例如,考虑以下Dockerfile片段:

FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greeting
VOLUME /myvol

这个Dockerfile会产生一个映像,它会导致docker运行时在/myvol处创建一个新的挂载点,并将greeting 文件复制到新创建的卷中。

关于指定卷的说明

关于Dockerfile中的卷,请记住以下几点。

  • 基于windows的容器上的卷:当使用基于windows的容器时,容器内的卷的目标必须是:    

    不存在的或空的目录、除C以外的驱动器

  • 从Dockerfile中更改卷:如果任何构建步骤在声明卷之后更改了其中的数据,那么这些更改将被丢弃。

  • JSON格式:该列表被解析为JSON数组。必须用双引号(")而不是单引号(')括起单词。

  • 主机目录在容器运行时声明: 主机目录(挂载点)本质上依赖于主机。这是为了保持映像的可移植性,因为不能保证给定的主机目录在所有主机上都可用。由于这个原因,您不能从Dockerfile中挂载主机目录。卷指令不支持指定主机目录参数。在创建或运行容器时,必须指定挂载点。

 

以上是关于Dockerfile 中的Volume有啥意义,光用docker run的主要内容,如果未能解决你的问题,请参考以下文章

docker学习笔记18:Dockerfile 指令 VOLUME 介绍

Dockerfile 之 VOLUME

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

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

Dockerfile 指令 VOLUME 介绍

Dokcer进阶-初识DockerFile