卷挂载

docker 关联目录到容器 docker挂载多个目录到volume下_docker 关联目录到容器

  • volumes(卷挂载) :存储在主机文件系统的一部分中,该文件系统由Docker管理 (在Linux上是“ /var/lib/docker/volumes /”)。 非Docker进程不应修改文件系统的这一部分。 卷是在Docker中持久存储数据的最佳方法。

docker自动在外部创建文件夹自动挂载容器内部指定的文件夹内容(Dockerfile VOLUME指令的作用)

  • Bind mounts(绑定挂载) 可以在任何地方 存储在主机系统上。 它们甚至可能是重要的系统文件或目录。 Docker主机或Docker容器上的非Docker进程可以随时对其进行修改。

自己在外部创建文件夹,手动挂载

  • tmpfs mounts(临时挂载) 仅存储在主机系统的内存中,并且永远不会写入主机系统的文件系统

可以把数据挂载到内存中

volume(卷)

卷挂载命令:

docker run xxx -v 宿主机:容器里的目录

-v 宿主机绝对路径:Docker容器内部绝对路径:叫挂载;这个有空挂载问题
-v 不以斜杆(/)开头的路径:Docker容器内部绝对路径:叫绑定(docker会自动管理,docker不会把他当成目录,而把它当成卷)

  • 匿名卷使用示例:

#docker将创建出匿名卷,并保存容器/etc/nginx下面的内容
docker run -dP -v /etc/nginx nginx(宿主机啥也不写,直接写容器 内的目录)

  • 具名卷使用示例

#docker将创建出名为nginx的卷,并保存容器/etc/nginx下面的内容
docker run -dP -v nginx:/etc/nginx nginx

demo示例:

  • -v /root/html:/usr/share/nginx/html 效果:访问forbidden
  • -v html:/usr/share/nginx/html:ro 效果:访问默认欢迎页
  • -v /usr/share/nginx/html 效果:匿名卷 (什么都不写也不要加冒号,直接写容器内的目录)
# -v不以绝对路径方式;
### 1、先在docker底层创建一个你指定名字的卷(具名卷) html
### 2、把这个卷和容器内部目录绑定
### 3、容器启动以后,目录里面的内容就在卷里面存着

#####-v nginxhtml:/usr/share/nginx/html 也可以以下操作
## 1、 docker create volume nginxhtml 如果给卷里面就行修改,容器内部的也就改
了。
## 2、 docker volume inspect nginxhtml
## 3、docker run -d -P -v nginxhtml:/usr/share/nginx/html --name=nginx777 nginx
# 可以看到
	"Mounts": [
     {
        "Type": "volume", //这是个卷
        "Name": "html",  //名字是html
        "Source": "/var/lib/docker/volumes/html/_data",  //宿主机的目录。容器里面的哪两个文件都在
        "Destination": "/usr/share/nginx/html",  //容器内部
        "Driver": "local",
        "Mode": "z",
        "RW": true,  //读写模式
        "Propagation": ""
     }
   ]
#卷:就是为了保存数据
docker volume  #可以对docker自己管理的卷目录进行操作;
/var/lib/docker/volumes(卷的根目录)

卷管理

docker volume create xxx:创建卷名
docker volume inspect xxx:查询卷详情
docker volume ls: 列出所有卷
docker volume prune: 移除无用卷

查看卷在哪

  1. 先列出哪些卷

docker volume ls

  1. 查看卷在宿主机哪

docker volume inspect xxx