Docker:数据卷(挂载本地目录)
目录
- 一、基本概述
- 二、基本使用
- 三、案例
- 三、本地目录挂载
一、基本概述
数据卷:是一个虚拟目录,是容器内目录
与宿主机目录
之间映射的桥梁。
数据卷的存放目录固定在:/var/lib/docker/volumes
二、基本使用
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect 数据卷名称 | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
三、案例
【需求】
- 创建Nginx容器,修改nginx容器内的html目录下的index.html文件内容。
- 将静态资源部署到nginx的html目录。
【提示】
- 数据卷是在docker容器创建的时候去挂载的,如果容器已经创建,则无法挂载。
- 在执行docker run命令时,使用
-v 数据卷:容器内目录
可以完成数据卷挂载。 - 当创建容器时,如果挂载了数据卷且数据卷不存在,docker会自动创建。
创建容器时配置数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx:1.14.2
三、本地目录挂载
【需求】
- 查看MySQL容器,判断是否有数据卷挂载。
- 基于宿主机目录实现MySQL数据目录、配置文件、初始化脚本的挂载
【提示】
- 在执行
docker run
命令时,使用-v 本地目录:容器内目录
可以完成本地目录挂载。 - 本地目录必须以
/
或./
开头,如果直接以名称开头,会被识别为数据卷而非本地目录-v mysql:/var/lib/mysql
会被识别为一个数据卷叫MySQL。-v ./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
目录。(配置文件) - 挂载
/root/mysql/log
到容器内的/var/log/mysql
目录。(日志目录)
- 挂载
创建本地挂载目录
mkdir -p /root/mysql/{conf,data,log}
编写配置文件
vim /root/mysql/conf/my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
server-id = 1
log-bin=mysql-bin
expire_logs_days=30
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
max_connections=1000
symbolic-links=0
default-time_zone = '+8:00'
给文件授权
chmod 777 /root/mysql/data/ /root/mysql/log /root/mysql/init
chmod 644 /root/mysql/conf/my.cnf
创建docker容器,并挂载本地目录
docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart unless-stopped \
-e MYSQL_ROOT_PASSWORD=root \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint=initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/log:/var/log/mysql \
mysql:8.0.32