在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Dockerfile 中的 VOLUME 挂载与 docker -v 命令挂载,两者有明显区别: 1、VOLUMEDockerfile中 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/ 定义的是容器内目录所在路径,在容器创建过程中会在容器中创建该目录,而宿主机上的挂载目录名是随机生成的, 例如:
这里宿主机上的
目录对应的就是容器中的 /usr/local/oas/file/ 目录 2、docker -vdocker -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数据卷挂载命令volume(-v)与mount的区别 一、前言用户可以通过docker run的--volume/-v或--mount选项来创建带有数据卷的容器,但这两个选项有些微妙的差异,在这里总结梳理一下。 二、命令用法
参数--volume(或简写为-v)只能创建bind mount。示例: docker run --name $CONTAINER_NAME -it \ -v $PWD/$CONTAINER_NAME/app:/app:rw \ -v $PWD/$CONTAINER_NAME/data:/data:ro \ avocado-cloud:latest /bin/bash 注释: 命令格式: [[HOST-DIR:]CONTAINER-DIR[:OPTIONS]]] 如果指定HOST-DIR则必须是绝对路径,如果路径不存在则会自动创建 实例中的rw为读写,ro为只读
参数--mount默认情况下用来挂载volume,但也可以用来创建bind mount和tmpfs。如果不指定type选项,则默认为挂载volume,volume是一种更为灵活的数据管理方式,volume可以通过docker volume命令集被管理。示例: docker run --name $CONTAINER_NAME -it \ --mount type=bind,source=$PWD/$CONTAINER_NAME/app,destination=/app \ --mount source=${CONTAINER_NAME}-data,destination=/data,readonly \ avocado-cloud:latest /bin/bash 注释: 挂载volume命令格式: [type=volume,]source=my-volume,destination=/path/in/container[,...] 创建bind mount命令格式: type=bind,source=/path/on/host,destination=/path/in/container[,...] 如果创建bind mount并指定source则必须是绝对路径,且路径必须已经存在 示例中readonly表示只读 三、差异总结1、创建bind mount和挂载volume的比较
*注释: Docker无法简单地通过sudo chown someuser: -R /var/lib/docker/volumes/somevolume来将volume的内容开放给主机上的普通用户访问,如果开放更多权限则有安全风险。而这点上Podman的设计就要理想得多,volume存放在$HOME/.local/share/containers/storage/volumes/路径下,即提供了便捷性,又保障了安全性。 无需root权限即可运行容器,这正是Podman的优势之一,实际使用过程中的确受益良多。 2、创建bind mount时使用--volume和--mount的比较
以上为个人经验,希望能给大家一个参考,也希望大家多多支持极客世界。如有错误或未考虑完全的地方,望不吝赐教。 |
请发表评论