docker容器数据卷(相当于持久化)

Docker简介

#是什么:
    类似redis的RDB和AOF,(更通俗的说相当于移动硬盘)

#能干什么
    1、容器的持久化
    2、容器间继承+持久化

#怎么用
    1、直接命令添加(-v)
    #docker run -v 宿主机目录:容器目录 镜像名     (docker run -it 镜像名, 对比这个记忆)
           例: docker run -it -v /myVolume:/containVolume centos  
   
       1.1给容器设置只读权限(主机可以修改,容器只读)
          docker  run  -v  宿主机目录:容器目录:ro  镜像名      read-only
          docker run -it -v /myVolume:/containVolume:ro centos  

    2、DockerFile添加    

 

 

二、使用

1、命令添加

[root@linuxxx ~]# docker run -it -v /myVolume:/containVolume centos

#可以自动新建目录
#执行完这句话后,已经产生了绑定关系,
 可以使用docker inspect ID查看   Volumes或hostconfig


分别在容器和host端进入相应的文件
[root@linuxxx /]# cd myVolume/        #原生Linux端,主机
[root@linuxxx myVolume]# cat b.txt 
a123qwer

[root@f3c17a0046ed /]# cd containVolume/       #容器端
[root@f3c17a0046ed containVolume]# vi b.txt       

#结论:无论是主机还是容器创建文件也好,修改文件也好,都能共享资源

--------------------------------------

#当容器退出后,重新连接之前的这段时间,主机的修改,是否对容器有效
[root@c23bbbea6835 /]# exit
exit

#来到主机,
[root@linuxxx myVolume]# touch c.txt
[root@linuxxx myVolume]# vi c.txt       #添加123


#来到容器,并重新登陆
[root@linuxxx ~]# docker ps -l        #拿到ID,

[root@linuxxx ~]# 
[root@linuxxx ~]# docker start f3c17a0046ed     #运行容器
f3c17a0046ed
[root@linuxxx ~]# docker attach f3c17a0046ed     #进入容器
[root@f3c17a0046ed /]# 
[root@f3c17a0046ed /]# cd containVolume/         #进入绑定的文件
[root@f3c17a0046ed containVolume]# 
[root@f3c17a0046ed containVolume]# ll
total 8
-rw-r--r--. 1 root root 9 Aug  6 11:40 b.txt
-rw-r--r--. 1 root root 4 Aug  6 11:50 c.txt
[root@f3c17a0046ed containVolume]# cat c.txt         
123

结论:容器推出后,仍然与主机资源共享
View Code

 

2、DockerFile添加

#上面的命令添加模式,只支持宿主机与容器数据的共享

#由于宿主机目录依赖特定的宿主机,不能保证所有的宿主机都存在特定的目录

用法:
    1、根目录下创建mydocker文件夹并进入
    2、可在Dockerfile中使用  VOLUME 指令来给镜像添加一个或多个数据卷
    3、build后生成镜像,
    4、run 容器
    

 

[root@linuxxx ~]# mkdir /mydocker        #创建文件夹
[root@linuxxx ~]# cd /mydocker/          #进入文件夹
[root@linuxxx mydocker]# vi Dockerfile         #编写

---------------------------------------------------
#valume test                            #编写内容
FROM centos
VOLUME ["/datavolume1","/datavolume2","/datavolume3",]
CMD echo "finished,--------sucess1"
CMD /bin/bash
-------------------------------------------------------
#绑定
 [root@linuxxx mydocker]# docker build -f /mydocker/Dockerfile -t  pdun/centos .

[root@linuxxx mydocker]# docker images     
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
pdun/centos         latest              751b5f9475e5        3 minutes ago       202MB

[root@linuxxx mydocker]# docker run -it pdun/centos

#可以查看是否成功创建这两个容器
[root@3c1a4034ed22 /]# ll
drwxr-xr-x.   2 root root     6 Aug  6 14:02 datavolume1
drwxr-xr-x.   2 root root     6 Aug  6 14:02 datavolume2

#进入容器,创建文件
[root@3c1a4034ed22 /]# cd /datavolume1
[root@3c1a4034ed22 datavolume1]# pwd
/datavolume1
[root@3c1a4034ed22 datavolume1]# touch contioner01.txt

------------------------------------------------------------------------
我们没有创建主机,主机从何而来
让我们打开一个新的终端
[root@linuxxx ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
3c1a4034ed22        pdun/centos         "/bin/sh -c /bin/bash"   8 minutes ago       Up 8 minutes                            angry_aryabhata
c44b284600fd        redis               "docker-entrypoint.s…"   5 hours ago         Up 5 hours          6379/tcp            vibrant_spence
[root@linuxxx ~]# 
[root@linuxxx ~]# docker inspect 3c1a4034ed22 
View Code

 

三、数据卷容器

#命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据的共享,挂载数据卷的容器,称之为数据卷容器

通俗的讲,移动硬盘去拷贝主机上的数据,其他硬盘可以拷贝这个移动硬盘的东西

 

 

[root@linuxxx ~]# docker run -it --name c1 pdun/centos    #创建父容器
[root@b71c77033a4a /]# ll
total 12
-rw-r--r--.   1 root root 12082 Mar  5 17:36 anaconda-post.log
lrwxrwxrwx.   1 root root     7 Mar  5 17:34 bin -> usr/bin
drwxr-xr-x.   2 root root     6 Aug  6 14:34 datavolume1
drwxr-xr-x.   2 root root     6 Aug  6 14:34 datavolume2


[root@b71c77033a4a /]# cd datavolume2
[root@b71c77033a4a datavolume2]# 
 
[root@b71c77033a4a datavolume2]# touch c1.txt
[root@b71c77033a4a datavolume2]# [root@linuxxx ~]# 
[root@linuxxx ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b71c77033a4a        pdun/centos         "/bin/sh -c /bin/bash"   2 minutes ago       Up 2 minutes                            c1


----------------------------------------
让c2继承c1
[root@linuxxx ~]# docker run -it --name c2 --volumes-from c1 pdun/centos
[root@827f2adf5e40 /]# cd datavolume2
[root@827f2adf5e40 datavolume2]# pwd
[root@827f2adf5e40 datavolume2]# ll               #发现有c1设置的文件
total 0
-rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
[root@827f2adf5e40 datavolume2]# 

[root@827f2adf5e40 datavolume2]# [root@linuxxx ~]#        #CTRL+P+Q
[root@linuxxx ~]# 

[root@linuxxx ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
827f2adf5e40        pdun/centos         "/bin/sh -c /bin/bash"   3 minutes ago       Up 3 minutes                            c2
b71c77033a4a        pdun/centos         "/bin/sh -c /bin/bash"   8 minutes ago       Up 7 minutes                            c1

----------------------------------------

#c3同理
[root@linuxxx ~]# docker run -it --name c3 --volumes-from c1 pdun/centos
[root@021b3cc21d04 /]# cd datavolume2
[root@021b3cc21d04 datavolume2]# 
[root@021b3cc21d04 datavolume2]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
-rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
[root@021b3cc21d04 datavolume2]# touch c3.txt
------------------------------------------------------

#子容器创建的东西,父容器,兄容器共享
[root@linuxxx ~]# docker attach c1
[root@b71c77033a4a datavolume2]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
-rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
-rw-r--r--. 1 root root 0 Aug  6 14:45 c3.txt


-------------------------------
#删除父容器,子容器间仍然可以资源共享

[root@linuxxx ~]# docker attach c2
[root@827f2adf5e40 datavolume2]# 
[root@827f2adf5e40 datavolume2]# ll
total 0
-rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
-rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
-rw-r--r--. 1 root root 0 Aug  6 14:45 c3.txt
[root@827f2adf5e40 datavolume2]# 
[root@827f2adf5e40 datavolume2]# touch c2_update.txt
[root@827f2adf5e40 datavolume2]# 
[root@827f2adf5e40 datavolume2]# read escape sequence
[root@linuxxx ~]# 
[root@linuxxx ~]# docker attach c3
[root@021b3cc21d04 datavolume2]# 
[root@021b3cc21d04 datavolume2]# ll 
total 0
-rw-r--r--. 1 root root 0 Aug  6 14:36 c1.txt
-rw-r--r--. 1 root root 0 Aug  6 14:41 c2.txt
-rw-r--r--. 1 root root 0 Aug  6 14:51 c2_update.txt
-rw-r--r--. 1 root root 0 Aug  6 14:45 c3.txt
[root@021b3cc21d04 datavolume2]# 
View Code

 

posted @ 2019-08-06 22:18  pdun  阅读(357)  评论(0编辑  收藏  举报