一,什么是数据卷
在 Docker中,要想实现数据的持久化,即数据不随着Container的结束而结束,需要将数据从宿主机挂载到容器中。
已绑定的主机目录(数据卷)和容器目录下的数据会双向同步。
所有 docker 容器内的卷,没有只读目录的情况下,默认存放在以下目录:
/var/lib/docker/volumes/卷名/_data
二,数据卷基础命令
创建数据卷
# 命令
docker volume create [数据卷]
查看数据卷详情
# 命令
docker volume inspect [数据卷名称]
# 使用示例
[root@iZwz94h5335bugr370qrb1Z ~]# docker volume inspect mysql-conf
[
{
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/mysql-conf/_data",
"Name": "mysql-conf",
"Options": {},
"Scope": "local"
}
]
查看所有数据卷
# 命令
docker volume ls
删除未被任何容器使用的数据卷
# 命令
docker volume prune
删除一个或多个数据卷
# 命令
docker volume rm [数据卷]
-f 强制删除
三,挂载数据卷
通过 -v 命令挂载数据卷。
方式一:匿名挂载
挂载命令 -v 只写了容器内路径,没有写主机数据卷的路径或指定名称,默认是随机的一串字符。
# 命令
-v 容器内路径
# 使用示例
docker run -p 3307:3306 -d
-v /etc/mysql/conf.d
-v /var/lib/mysql
--name mysql3307
-e MYSQL_ROOT_PASSWORD=admin
mysql_lzh:1.0
方式二:具名挂载
挂载命令 -v 中,指定主机数据卷名称。
# 命令
-v 卷名:容器内路径
# 使用示例
docker run -p 3307:3306 -d
-v mysql-conf:/etc/mysql/conf.d
-v mysql-data:/var/lib/mysql
--name mysql3307
-e MYSQL_ROOT_PASSWORD=admin
mysql_lzh:1.0
通过 docker volume ls 查看数据卷列表:
可以看到,匿名挂载会在 /var/lib/docker/volumes/ 目录下生成的 volume name 是很长的字符串,而具名挂载则会指定 volume name。
方式三:指定路径挂载
# 命令
-v /主机目录:容器内目录
# 使用示例
# 启动 mysql 并进行目录挂载
docker run
-p 3306:3306
-d
--name mysql3306
-v /java/mysql/conf:/etc/mysql/conf.d
-v /java/mysql/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=admin
mysql:5.7
启动起来后可以通过 docker inspect 容器 查看是否绑定成功。成功绑定的主机目录和容器目录的数据会进行同步。
扩展:
-v 最后拼上 :ro 或 :rw 进行权限配置。
ro:只读,容器内无法进行操作,需在宿主机操作;
rw:可读写。
docker run
-p 3306:3306
-d
--name mysql3306
-v /java/mysql/conf:/etc/mysql/conf.d:rw
-v /java/mysql/data:/var/lib/mysql:rw
-e MYSQL_ROOT_PASSWORD=admin
mysql:5.7
思考:如何确定容器内哪个目录需要挂载到主机数据卷?
Java 工程如何挂载日志文件?
四,数据卷容器
两个或多个容器间的数据共享,可用作容器的备份。
# 命令
--volumes-from
# 使用示例
# 创建容器mysql3307
docker run
-p 3307:3306 -d
-v mysql-volume:/java
--name mysql3307
-e MYSQL_ROOT_PASSWORD=admin
mysql_lzh:1.0
# 创建容器mysql3308,挂载 mysql3307 的数据卷
# mysql3308和mysql3307容器共享的/java目录下的数据会相互同步
docker run
-p 3308:3306 -d
--volumes-from mysql3307
--name mysql3308
-e MYSQL_ROOT_PASSWORD=admin
mysql_lzh:1.0
评论区