Docker数据存储

数据存储
1、数据卷特性

(1)Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层

(2)如果运行中的容器修改了现有的一个已经存在的文件,那么该文件将会从读写层下面的只读层只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,即"写时复制"机制。

  • 数据卷意义

    关闭并重启容器,其数据不受影响;但删除Docker容器,则器改变将会全部丢失。

    “卷”是容器上的一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上的某个目录“绑定”

​ Volume:可以在运行容器时即完成创建与绑定操作。当然,前提需要拥有对应的申明

​ Volume:初衷就是数据持久化

2、容器中的数据卷
  • 数据卷类型
    • Bind mount volume:可以是操作系统中的任意目录
    • Docker-managed volume:docker自己管理,在dockerfile中使用volume关键字指定
      在这里插入图片描述

Docker-managed Volume

基于Docker自管理,在写镜像的时候标识

#创建容器
[root@nod ~]# docker run --name wordpress -d wordpress 

[root@nod ~]# docker volume ls
DRIVER              VOLUME NAME
local               8a3eafd7d932ac18573ae3088e0aaf76e0b0cff2c5ae9c39f349a3657f41df31

[root@nod ~]# docker inspect 8a3eafd7d932ac18573ae3088e0aaf76e0b0cff2c5ae9c39f349a3657f41df31
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/8a3eafd7d932ac18573ae3088e0aaf76e0b0cff2c5ae9c39f349a3657f41df31/_data",
        "Name": "8a3eafd7d932ac18573ae3088e0aaf76e0b0cff2c5ae9c39f349a3657f41df31",
        "Options": {},
        "Scope": "local"
    }
]
#具体目录
[root@nod volumes]# pwd
/var/lib/docker/volumes

当启动了自管理卷时,容器删除时volumes不会被删除,如果需要容器删除时删除volumes,加上-v参数。

#测试一:
[root@nod test]# cat Dockerfile 
FROM centos
RUN touch /tmp/1.txt
RUN mkdir  /data
CMD tail -f /tmp/1.txt
#构建镜像
[root@nod test]# docker build -t test:v1.0 .
Sending build context to Docker daemon 2.048 kB
Step 1/4 : FROM centos
 ---> 5d0da3dc9764
Step 2/4 : RUN touch /tmp/1.txt
 ---> Running in 62260853be19
 ---> 9ea62fe3798a
Removing intermediate container 62260853be19
Step 3/4 : RUN mkdir  /data
 ---> Running in 94081407c5c5
 ---> 4f797ed9cd39
Removing intermediate container 94081407c5c5
Step 4/4 : CMD tail -f /tmp/1.txt
 ---> Running in 2ed1a3f8b099
 ---> e622db4eef99
Removing intermediate container 2ed1a3f8b099
Successfully built e622db4eef99
[root@nod test]# docker run --name test1 -d test:v1.0
e7f1227701dc357bfbf4b39c97b974231988c15b6a785851f47a14737d8aa15e
#查看此镜像没有创建自管理数据卷
[root@nod test]# docker volume ls
DRIVER              VOLUME NAME
#测试二:
[root@nod test]# cat Dockerfile 
FROM centos
RUN touch /tmp/1.txt
RUN mkdir  /data
VOLUME /data
CMD tail -f /tmp/1.txt
#构建
[root@nod test]# docker build -t test:v2.0 .
Sending build context to Docker daemon 2.048 kB
Step 1/5 : FROM centos
 ---> 5d0da3dc9764
Step 2/5 : RUN touch /tmp/1.txt
 ---> Using cache
 ---> 9ea62fe3798a
Step 3/5 : RUN mkdir  /data
 ---> Using cache
 ---> 4f797ed9cd39
Step 4/5 : VOLUME /data
 ---> Running in 3d7a0f9ab8f0
 ---> 4579dd1a1393
Removing intermediate container 3d7a0f9ab8f0
Step 5/5 : CMD tail -f /tmp/1.txt
 ---> Running in e7870d2d64c6
 ---> 1a2a81e69417
Removing intermediate container e7870d2d64c6
Successfully built 1a2a81e69417
[root@nod test]# docker run -d --name test2 test:v2.0
a870f33afc43f01ed1f0adcaaa118238422e9e094d573e7fd5ffb396a55df440
#可以创建出自管理的数据卷
[root@nod test]# docker volume ls
DRIVER              VOLUME NAME
local               df6e1838a9e7166e6c9445e2bcfd210d3e676ea971bb7931ea712f793138de38
#删除同时把数据卷删掉
[root@nod test]# docker rm -f -v a870f33afc43
a870f33afc43
[root@nod test]# docker volume ls
DRIVER              VOLUME NAME

Bind-mount Volume

绑定卷,告诉主机目录和docker绑定的目录,使用-v参数

Union Volume(联合卷)

两个容器之间共享某个目录

方法一:两个容器使用宿主机的同一个目录

[root@nod test]# docker run --name test1 -v /data:/data -d test:v1.0
0bfa0fe5ea488a3a7f8ec3c46bac7d48acc3cb0b1f8ffa75d5ef699666235b66
[root@nod test]# docker run --name test2 -v /data:/data -d test:v1.0
4cd18b83c7093f3b05cbd37b1f8db07564d0f11d3e46b6742439ca7f9671c638

[root@nod test]# docker run --name test1 -v /data:/data -d test:v1.0
0bfa0fe5ea488a3a7f8ec3c46bac7d48acc3cb0b1f8ffa75d5ef699666235b66
[root@nod test]# docker run --name test2 -v /data:/data -d test:v1.0
4cd18b83c7093f3b05cbd37b1f8db07564d0f11d3e46b6742439ca7f9671c638
#test1容器情况
[root@nod test]# docker exec -it test1 /bin/bash
[root@0bfa0fe5ea48 /]# ls
bin   dev  home  lib64	     media  opt   root	sbin  sys  usr
data  etc  lib	 lost+found  mnt    proc  run	srv   tmp  var
[root@0bfa0fe5ea48 /]# cd /data
[root@0bfa0fe5ea48 data]# touch wangxxx
[root@0bfa0fe5ea48 data]# exit
exit
#test2容器情况
[root@nod test]# docker exec -it test2  /bin/bash
[root@4cd18b83c709 /]# cd /data
[root@4cd18b83c709 data]# ls
ca_download  config  database  es-data	jenkins  job_logs  oracle  psc	redis  registry  secretkey  wangxxx
[root@4cd18b83c709 data]# 
#宿主机情况
[root@nod test]# cd /data
[root@nod data]# ll
total 12
drwxr-xr-x  2 root    root             6 May 17  2019 ca_download
drwxr-xr-x  2   10000         10000    6 May 17  2019 config
drwx------ 19 polkitd input         4096 Jul  5  2019 database
drwxr-xr-x  3 es      elasticsearch   19 May  4  2019 es-data
drwxr-xr-x 11 jenkins jenkins       4096 Dec  4 05:26 jenkins
drwxr-xr-x  2   10000         10000    6 May 17  2019 job_logs
drwxrwxr-x  6 oracle  oinstall        79 Jul 10  2019 oracle
drwxr-xr-x  2 root    root             6 May 17  2019 psc
drwxr-xr-x  2 polkitd root            22 Jul  5  2019 redis
drwxr-xr-x  3   10000         10000   20 May 17  2019 registry
-rw-------  1   10000         10000   16 May 17  2019 secretkey
-rw-r--r--  1 root    root             0 Dec  6 15:00 wangxxx
[root@nod data]# 

方法二:

使用的容器需要拥有自管理(Docker-managed Volume)卷功能,不然没法使用。

[root@nod volumes]# docker run --name test2 -d test:v2.0 
7787df2ba9a75b53f57bbd3122dcf253d3167ff0e64e9d3fbd5a707f77150a4e
[root@nod volumes]# ls
f439135caedaf77a085c26aeef0b503854f03e408bc29e79ba257301fc37b848
[root@nod volumes]# docker run --name test22 -d --volumes-from test2 test:v2.0 
72d671d8d2f43f41b8747fc58f2c0e602807f733d599f671d30ce756ed322e2c
3、存储驱动

Docker存储驱动(storage driver)是Docker的核心组件,它是Docker实现分成镜像的基础

1、device mapper(DM):性能和稳定性存在问题,不推荐生产环境使用

2、btrfs:社区实现了btrfs driver,稳定性和性能存在问题

3、overlayfs:内核3.18 overlayfs进入主线,性能和稳定性优异,第一选择。

在这里插入图片描述

mount -t overlay overlay -olowerdir=./low,upperdir=./upper,worddir=./work .merged
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值