Dockerfile 中的 VOLUME 与 docker -v 区别
程序员文章站
2022-05-11 13:23:18
...
Dockerfile 中的 VOLUME 挂载与 docker -v 命令挂载,两者有明显区别:
1、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,这里宿主机上的/var/lib/docker/volumes/593fda6d7b8296bfca22894b326727c734133eebb11c9bc2c25a73b892157a37目录对应的就是容器中的 /usr/local/oas/file/ 目录
2、docker -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 等对应目录,冒号前为宿主机目录(绝对路径),冒号后为镜像内挂载的路径(绝对路径)。
推荐阅读
-
Docker中镜像构建文件Dockerfile与相关命令的详细介绍
-
聊聊docker中容器与镜像的区别
-
vue中v-model指令与.sync修饰符的区别详解
-
dockerfile中ENTRYPOINT与CMD的结合使用及区别
-
Docker中镜像构建文件Dockerfile与相关命令的详细介绍
-
Dockerfile Volume指令与docker -v的区别
-
docker 高级 容器的挂载 与数据卷 -v volumes volume docker挂载 容器间数据共享 宿主机与容器数据共享 主机与docker共享数据
-
Dockerfile 中的 VOLUME 与 docker -v 区别
-
Docker数据卷--volume(-v)与--mount的区别
-
聊聊docker中容器与镜像的区别