Docker数据卷挂载和本地目录挂载

目录

数据卷

数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁

查看数据卷相关命令

命令 说明
docker volume create 创建数据卷
docker volume ls 查看所有数据卷
docker volume rm 删除指定数据卷
docker volume inspect 查看某个数据卷的详情
docker volume prune 清除数据卷(删除未使用数据卷)

在执行docker run命令时,使用-v 数据卷:容器内目录 可以完成数据卷挂载

如果容器已经创建,无法进行挂载操作,需要删除,重新创建并挂载

当创建容器时,如果挂在了数据卷且数据卷不存在,会自动创建数据卷

创建数据卷后,会在宿主机目录/var/lib/docker/volumes下创建对应目录

本地目录挂载

在执行docker run 命令时,使用-v 本地目录:容器内目录 可以完成本地目录挂载

本地目录必须以/或者./开头,如果直接以名称开头,会被识别为数据卷而非本地目录

  • -v mysql:/var/lib/mysql会被识别为一个数据卷叫mysql
  • -v ./mysql:/var/lib/mysql会被识别为当前目录下的mysql目录

案例1-利用Nginx容器部署静态资源

需求:

  • 创建Nginx容器,修改nginx容器内的html目录下的index.html文件,查看变化
  • 将静态资源部署到nginx的html目录

容器内的html目录:

/usr/share/nginx/html

使用vi命令无法进行修改

使用数据卷解决:

删除nginx容器

创建容器并挂载

c 复制代码
docker run -d --name mynginx -p 80:80 -v html:/usr/share/nginx/html nginx

查看数据卷,并查看详情

进入宿主机目录,可以看到完成了映射

使用编辑器直接修改这里的index.html文件,容器里面的也会修改

再往该目录下上传图片

网页端访问;

访问图片

案例2-mysql容器的数据挂载

需求:

  • 查看mysql容器,判断是否有数据卷挂载
  • 基于宿主机目录实现MYSQL数据目录,配置文件,初始化脚本的挂载

docker inspect 容器名:可以查看容器的详情

如下查看nginx

里面有挂载信息

创建并启动mysql容器

查看mysql容器详情

可以看到在创建容器的时候自动挂载了,这个卷称为匿名卷

挂载的容器里面的目录/var/lib/mysql是mysql的数据存储目录

挂载/root/mysql/data到容器内的/var/lib/mysql目录

挂载/root/mysql/init到容器内的/docker-entrypoint-initdb.d目录

挂载/root/mysql/conf到容器内的/etc/mysql/conf.d目录

c 复制代码
docker run -d --name mysql -p 3306:3306  -e MYSQL_ROOT_PASSWORD=123 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/init:/docker-entrypoint-initdb.d -v /root/mysql/conf:/etc/mysql/conf.d mysql