Docker3️⃣数据卷 & 挂载
1、数据卷
Docker 容器存在问题:容器与数据耦合。
- 不易修改:需要先进入容器才可修改文件,且没有 vi 等编辑工具。
- 不易维护:假设容器升级改版,旧容器的数据无法迁移到新容器。
- 不可复用:容器的数据仅当前容器可用。
1.1、volume
数据卷(
volume
)用于管理容器数据
-
本质:虚拟目录,指向宿主机文件系统中的某个目录(类似软链接)。
(数据卷 → 宿主机目录)
-
使用:创建容器时将数据卷挂载到某个容器目录,间接建立容器目录与宿主机目录的关系。
(容器目录 → 数据卷 → 宿主机目录)
1.2、命令(❗)
docker volume [COMMAND]
-
创建:create
-
查看
- ls:列出所有
- inspect:查看详情
-
删除
- prune:删除未使用的
- rm:删除指定的
1.2.1、创建 & 查看
默认挂载点:宿主机文件系统的
/var/lib/docker/volumes/
-
create:创建
docker volume create 数据卷名
-
ls:列出所有数据卷
docker volume ls
-
inspect:查看数据卷详情,重点关注
Mountpoint
docker volume inspect 数据卷名
1.2.2、删除
-
prune:删除未使用的数据卷,输入
y
确认。docker volume prune
-
rm:删除指定的数据卷,参数
-f
强制删除。docker volume rm [-f]
2、挂载(❗)
挂载(
Mount
)将容器目录挂载到数据卷或容器上,实现数据的同步和复用。
2.1、挂载形式
2 种形式:挂载到数据卷,直接挂载到宿主机目录
挂载到数据卷 | 直接挂载 | |
---|---|---|
关系 | 容器目录 → 数据卷 → 宿主机目录 | 容器目录 → 宿主机目录 |
挂载点 | /var/lib/docker/volumes/ |
人为指定 |
挂载点管理 | Docker 统一管理 | 人为管理 |
耦合性 | 低 | 高 |
2.2、语法
创建容器时使用
-v
选项
-
挂载到数据卷:若指定数据卷不存在则会自动创建。
docker run -v 数据卷名称:容器目录 [其它选项] 镜像名
-
直接挂载
docker run -v 宿主机目录:容器目录 [其它选项] 镜像名 docker run -v 宿主机文件:容器文件 [其它选项] 镜像名
2.3、case
Nginx 挂载数据卷
示例:创建并运行一个 Nginx 容器,
将容器内的 /usr/share/nginx/html 目录挂载到数据卷。
-
拉取镜像
docker pull nginx
-
创建并运行容器:换行符
\
提高可读性-
--name:容器名:myNginx
-
-v
:数据卷名 html,容器目录 /usr/share/nginx/html -
-p:端口号映射
-
-d:后台运行
docker run \ --name myNginx \ -v html:/usr/share/nginx/html \ -p 80:80 \ -d \ nginx
-
-
查看挂载情况:通过 Xftp 查看,宿主机中已同步了 Nginx 容器目录的数据。
MySQL 直接挂载
示例:创建并运行一个 MySQL 容器,
将 MySQL 容器的数据目录 /var/lib/mysql 直接挂载到宿主机目录。
① 创建挂载点
在宿主机 /tmp 目录下创建 MySQL 容器挂载点。
# 数据目录的挂载点
mkdir -p /tmp/mysql/data
② 挂载
-
拉取镜像
docker pull mysql
-
创建并运行 MySQL 容器(参考 DockerHub)
-
-e
:环境变量,此处指定 root 用户密码 -
-V
:挂载点 /tmp/mysql/data,容器目录 /var/lib/mysqldocker run \ --name mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -v /tmp/mysql/data:/var/lib/mysql \ -p 3306:3306 \ -d \ mysql
-
-
查看挂载情况:宿主机中已同步了 MySQL 数据目录的数据。
Hint:此处仅展示 MySQL 数据目录的挂载。
基于 CentOS 安装 MySQL 的详细教程:Linux:CentOS7安装MySQL8