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

时间:2019-08-06
本文章向大家介绍docker容器数据卷(相当于持久化),主要包括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

原文地址:https://www.cnblogs.com/pdun/p/11312243.html