1、数据卷
数据卷(volume)是一个虚拟目录,是 容器内目录与宿主机目录 之间映射的桥梁。
● 命令
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷详情 |
docker volume prune | 清除数据卷 |
2、挂载 -v 数据卷:容器内目录
需求:
- 创建nginx容器,修改nginx容器内html目录下的index.html文件内容
- 将静态资源部署到nginx的html目录
提示:
- 在执行
docker run
命令时,使用-v 数据卷:容器内目录
可以完成数据卷挂载(mount)- 当创建容器时,如果挂载了数据卷且数据卷不存在,会自动创建数据卷
运行如下命令: docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
这样容器内的 /usr/share/nginx/html
就和宿主机的 /var/lib/docker/volumes/html/_data
挂载上了。直接修改宿主机此目录下的内容即可同步到容器内。
3、挂载 -v 本地目录:容器内目录
需求:
- 查看mysql容器是否有数据卷挂载
- 基于宿主机目录竖线mysql数据目录、配置文件、初始化脚本的挂载(查阅官方镜像文件)
- 挂载 /root/mysql/data 到容器内的 /var/lib/mysql 目录
- 挂载 /root/mysql/init 到容器内的 /docker-entrypoint-initdb.d 目录
- 挂载 /root/mysql/conf 到容器内的 /ect/mysql/conf.d目录
- 在执行
docker run
命令时,使用-v 本地目录:容器内目录
可以完成本地目录挂载(mount)- 本地目录必须以 “/” 或 “./” 开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:/var/lib/mysql
会被识别为一个数据卷叫 mysql-v ./mysql:/var/lib/mysql
会被识别为当前目录下的 mysql 目录
首先通过 docker inspect
命令查看单个容器详情,小白这里运行 docker inspect mysql8
,找到挂载信息如下图:
它竟然有数据卷,还不是我们下载时手动设置的,是自动生成的,这就是匿名卷。
但是这样就会有一定的风险,如果我们对mysql进行升级,原来的镜像直接被删了,但是我们没有及时记录它挂载的数据卷名称,找起来就很麻烦了。
为了杜绝此现象,我们可以在 pull 的时候就搞定这些,运行如下代码即可:
docker run -d \
--name mysql8 \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/ect/mysql/conf.d \
mysql:8.0