Docker基本命令与使用 —— Docker Volume 容器卷(六)

官方文档地址: https://docs.docker.com/storage/volumes/

1. Docker提供三种方式将数据从宿主机挂载到容器中

  • volumes: Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
  • bind mounts: 将宿主机上的任意位置的文件或目录挂载到容器中。
  • tmpfs: 挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用tmpfs,同事避免写入容器可写层提高性能。(此种方式不常用,这里暂不讨论)
0

2. Volume

管理卷:

docker volume create wwwroot
docker volume ls
docker volume inspect wwwroot

实际文件目录为 /var/lib/docker/volumes下,但一般不建议更改。(如需指定目录,用bind方式)

0

用卷创建一个容器:

#/usr/share/nginx/html为nginx默认网站的跟目录
docker run -d --name=nginx-text --mount src=wwwroot,dst=/usr/share/nginx/html nginx
docker run -d --name=nginx-test -v wwwroot:/usr/share/nginx/html nginx

以上两个命令效果一样,mount命令是新出来,用于替换 -v ,看上去更加清晰

0

清理:

docker stop nginx-test
docker rm nginx-test
docker volume rm wwwroot

注意:

  1. 如果指定卷没有创建,则会自动创建
  2. 建议使用 --mount,更通用

3. Bind Mounts

宿主机上的文件或目录挂载到容器中。此命令类似于linux ln -s,软连接

用卷创建一个容器:

docker run -d --name=nginx-text --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html nginx
docker run -d --name=nginx-test -v /app/wwwroot:/usr/share/nginx/html nginx

注意:

  1. 如果源文件/目录没有不存在,不会自动创建,会抛出一个错误
  2. 如果挂载目标在容器中非空目录,则该目录现有内容(容器中原有内容)将被隐藏

4. 小结:

Volume特点

  • 多个运行容器之间共享数据,多个容器可以同事挂载相同的卷
  • 当容器停止或被移除时,该卷依然存在
  • 当明确删除卷时,卷才会被删除
  • 将容器的数据存储在远程主机或其他存储上(间接)
  • 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)

Bind Mounts特点:

  • 从主机共享配置文件到容器。默认情况下,挂载主机 /etc/resolv.conf到每个容器,提供DNS解析
   用法如下图,挂载nginx.conf配置文件到nginx容器中,替代默认的文件
0
  • 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机上购机Maven项目时,容器都可以访问构建的项目包。
  • 当Docker主机的文件或者目录结构保证与容器所需的绑定挂载一致时
posted @ 2022-05-11 17:22  海~~D  阅读(177)  评论(0编辑  收藏  举报