docker run中-v指令与Dockerfile中volume命令的区别

volume

Dockerfile中 VOLUME 方式挂载到宿主机上的是匿名卷,在宿主机上是自动匿名挂载到 /var/lib/docker/volumes/ 目录下的,代码如下:

FROM frolvlad/alpine-java:jre8-slim
MAINTAINER oas.cloud
COPY nickdir .
VOLUME /usr/local/oas/file/
WORKDIR /usr/local/oas/

上述 VOLUME /usr/local/oas/file/ 定义的是容器内目录所在路径,在容器创建过程中会在容器中创建该目录,而宿主机上的挂载目录名是随机生成的,
例如:

/var/lib/docker/volumes/593fda6d7b8296bfca22894b326727c734133eebb11c9bc2c25a73b892157a37

上面的目录位于宿主机,对应容器中的 /usr/local/oas/file/ 目录。

docker run -v

docker -v 可以指定挂载到宿主机的具体目录,相对于Dockerfile的 VOLUME 挂载方式更具有可控性,代码如下:

$ docker run —name tengine-web -d -p 9527:80 -p 9000:9000 \
-v /usr/local/tengine/logs:/var/log/nginx \
-v /usr/local/tengine/conf.d:/etc/nginx/conf.d \
-v /usr/local/tengine/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/tengine/html:/usr/share/nginx/html \
-v /usr/local/oas/file:/usr/local/oas/file nginx

上述命令就可以将宿主机的 /usr/local/tengine/logs 等目录挂载到容器的 /var/log/nginx 等对应目录,冒号前为宿主机目录(绝对路径),冒号后为镜像内挂载的路径(绝对路径)。

本文内容均引用自:Dockerfile 中 VOLUME 与 docker -v 的区别说明

你可能感兴趣的:(docker run中-v指令与Dockerfile中volume命令的区别)