Docker容器数据卷(持久化)
Docker容器数据卷
功能:
容器的持久化
容器间继承+共享数据
添加数据卷
一、直接命令添加
1.命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
[root@aaa /]# docker run -it -v /myDatavolume:/myDatavolume tomcat
容器退出后重新启动,数据卷是否同步 √
2.命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
#ro:read only
二、DockerFile添加
1.file构建
FROM centos
VOLUME ["/Data1","Data2"] -- privileged=true
CMD echo "finished,----success1"
CMD /bin/bash
2.docker build 生成新的镜像
docker build -f /dockerfile路径 -t 标签 .
3.run容器
docker run -it yz/centos
[root@aaa ~/mydocker]# docker run -it yz/centos1
WARNING: IPv4 forwarding is disabled. Networking will not work.
[root@94c424fc5074 /]# ls -l
total 0
drwxr-xr-x 2 root root 6 Aug 6 02:27 Data1
drwxr-xr-x 2 root root 6 Aug 6 02:27 Data2
4.查看宿主机路径
docker inspect <容器名>
docker数据持久化和数据共享
数据卷
数据卷是一个可供多个容器使用的特殊目录,绕过了UFS。
特性:
- 1.数据卷可以在容器之间共享和重用
- 2.对数据卷的修改会立即生效
- 3.对数据卷的更新,不会影响镜像
- 4.数据默认会一直存在,即使容器被删除
创建数据卷
[root@919 ~]# docker volume create test1
test1
查看所有的数据卷
[root@919 ~]# docker volume ls
DRIVER VOLUME NAME
local b6dd359fa115f77651bccd31160d3badf96532c5d37f2d799f0928c6c6f34167
local test1
使用inspect
命令查看指定数据卷的信息
[root@919 ~]# docker volume inspect test1
[
{
"CreatedAt": "2020-09-20T08:49:35+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/test1/_data",
"Name": "test1",
"Options": {},
"Scope": "local"
}
]
启动一个挂载数据卷的容器,使用docker run
命令,一次docker run
可以挂载多个数据卷。
[root@919 ~]# docker run -it --name test1 -v test1:/tmp centos
[root@5e0138ae7301 /]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
overlay overlay 40G 3.9G 34G 11% /
tmpfs tmpfs 64M 0 64M 0% /dev
tmpfs tmpfs 1000M 0 1000M 0% /sys/fs/cgroup
shm tmpfs 64M 0 64M 0% /dev/shm
/dev/vda1 ext4 40G 3.9G 34G 11% /tmp
重新打开一个终端查看:
[root@919 ~]# docker inspect test1
从配置中我们可以看到挂载了一个名为test1的存储卷,并且挂载到容器内的/tmp目录下。
进入到容器内,创建文件
[root@5e0138ae7301 /]# cd /tmp/
[root@5e0138ae7301 tmp]# echo "11111" > test_2020_09_20
退出容器,并将该容器删除
[root@5e0138ae7301 tmp]# exit
[root@919 ~]# docker rm test1
并创建一个新的容器,并查看是否有刚才创建的文件
[root@919 ~]# docker run --name centos1 -it -v test1:/tmp centos
[root@5a3bf5cad675 /]# cd /tmp/
[root@5a3bf5cad675 tmp]# ls
ks-script-2n9owwnh ks-script-xm1o5azb test_2020_09_20
[root@5a3bf5cad675 tmp]# cat test_2020_09_20
11111
数据卷是被设计用来持久化数据的,它的生命周期独立于容器,docker不会在容器被删除后自动删除数据卷,并且也不存在垃圾回收机制,回收没有任何容器引用的数据卷。
如果需要删除在删除容器同时移除数据卷,可以在删除容器时使用docker rm -v
命令。
挂载主机目录
docker持久化存储除了有逻辑卷还有一个是挂载目录
# 挂载一个主机目录作为数据集,可以使用`--mount`或`-v`指定目录
[root@919 ~]# docker run -it --name centos1 -v /data:/data centos
[root@11ff081d5454 ~]# cd /data/
[root@11ff081d5454 data]# ls
[root@11ff081d5454 data]# echo "ccku" > 1.txt
[root@11ff081d5454 data]# exit
exit
[root@919 ~]# cat /data/1.txt
ccku
# 如果使用-v参数如果本地目录不存在docker会自动创建一个目录
查看数据卷的具体信息,可以在主机上使用inspect
查看指定容器的信息。
[root@919 ~]# docker inspect centos1
……
"Mounts": [
{
"Type": "bind",
"Source": "/data",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
……
作者:ccku
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。