Docker 容器数据卷
什么是容器数据卷
- docker的理念, 将应用和环境打包成一个镜像, 如果应用产生数据, 那么我们删除容器数据就会丢失.
- 所以我们需要数据可以持久化, 比如 mysql的数据可以存储在本地! 并且容器之间可以数据共享, 这就是数据卷技术.
使用数据卷挂载目录
# 命令中 -v 就是在挂载目录 主机目录:容器内目录
docker run -it -v /home/test:/home centos /bin/bash
可以使用 docker inspect 命令 查看挂载
mysql容器实战
# 命令详解
# -d 后台运行
# -p 端口映射 宿主机端口:容器内端口
# -v 数据卷挂载
# -e 环境配置
# --name 容器名字
docker run -d -p 3333:3306 -v /home/docker/mysql/conf:/etc/mysql/conf.d -v /home/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name my-mysql mysql
假设我们将容器删除, 就会发现挂载到本地的数据劵依旧没有丢失, 这就实现了容器数据化持久功能
具名挂载和匿名挂载
docker的挂载方式有三种 具名挂载和匿名挂载 指定路径挂载, 上面mysql实战中就使用了指定路径挂载
匿名挂载
# -v 直接写容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
# 启动容器后, 可以使用 docker volume ls 命令来查看所有卷
docker volume ls
DRIVER VOLUME NAME
local 44bf15e29c95e85ab32f4d94c7e2766d0880d602342cf1ac00e3044c1c3415f8
local 723cc8cf114d9d4bb4ca51092b11fccf2b29d0927739414938a2cde22de4e43e
具名挂载
# -v 卷名:容器内路径
docker run -d -P --name nginx02 -v juming:/etc/nginx nginx
# 再次查看所有的卷
docker volume ls
DRIVER VOLUME NAME
local 44bf15e29c95e85ab32f4d94c7e2766d0880d602342cf1ac00e3044c1c3415f8
local 723cc8cf114d9d4bb4ca51092b11fccf2b29d0927739414938a2cde22de4e43e
local juming
查看匿名和具名挂载的目录
# 使用 docker volume inspect 卷名来查看挂载的目录
docker volume inspect 44bf15e29c95e85ab32f4d94c7e2766d0880d602342cf1ac00e3044c1c3415f8
[
{
"CreatedAt": "2020-09-11T05:49:44Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/44bf15e29c95e85ab32f4d94c7e2766d0880d602342cf1ac00e3044c1c3415f8/_data",
"Name": "44bf15e29c95e85ab32f4d94c7e2766d0880d602342cf1ac00e3044c1c3415f8",
"Options": null,
"Scope": "local"
}
]
总结
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v 宿主机路径:容器内路径 # 指定路径挂载