Date Volume 本质上是Dokcer host文件系统中的目录或者文件,能够直接被mount到容器的文件系统中。
 
Data Volume 有如下特点
    1、Data Volume 是目录或者文件,而非没有格式化的磁盘(块设备)
    2、容器可以读写volume中的数据
    3、volume数据可以被永久的保存,即使使用他的容器已经销毁
 
现在有三种方式来存储数据:镜像层、容器层、volume 。考虑如下几个场景
    1、Database 软件 vs Database 数据
    2、Web应用 vs 应用产生的日志
    3、数据分析软件 vs input/output 数据
    4、apache server vs 静态HTML文件
 
对于以上四种场景,前者是无状态的,放在数据层,属于镜像的一部分。后者放在Data Volume中,这是需要持久化的数据,应该与镜像分开存放。
 
设置volume容量
 
因为volume实际上是docker host文件系统的一部分,所以volume的容量取决于文件系统当前未使用的空间,目前还没有办法设置volume的容量
 
volume挂载方式1    bind mount
 
将host上已经存在的目录或者文件mount到容器
 
挂载方式 
 
1、目录 -->> 目录
    docker run -v <host dir path>:<container dir path> image_name
 
2、文件 -->> 文件
    docker run -v <host file path>:<container file path> image_name
 
3、只读方式挂载
    docker run -v <host path>:<container path>:ro image_name
 
4、目录 -->> 不存在目录(会自动在容器中创建这个不存在的目录,内容是docker host上的指定目录)
    docker run -v <host dir path>:<container none_dir path> image_name
 
5、文件 -->> 不存在的文件(会自动在容器中创建这个不存在的文件,内容是dokcer host上的指定文件)
    docker run -v <host file path>:<container none_file path> image_name
 
6、不存在path -->> 存在目录(在docker host上创建一个空目录,挂载到容器中,覆盖容器中的目录)
    docker run -v <host none_path>:<container dir> image_name
 
7、不存在path -->> 存在文件(报错,无法挂载)
    docker run -v <host none_path>:<container file> image_name
 
8、不存在path -->> 不存在path (会在dockerhost和容器中分别创建对应的path,进行挂载)
    docker run -v <host path>:<container path>:ro image_name
 
容器销毁后,之前对docker host 上进行的文件或者目录修改不会丢失,会持久保存
 
需要注意的是,当容器迁移到新的docker host上,而该host上没有目录可供挂载,那么挂载会失败
 
1、测试一个正常的httpd容器
 
root@docker-lab:~/html# docker run -d -p 81:80  httpd
eafed05a921727813c10dad78e3b850e44729b1f9866f511fb5edfbafbfe5256
root@docker-lab:~/html# docker inspect eafe -f '{{.NetworkSettings.IPAddress}}'
172.17.0.12
root@docker-lab:~/html# curl http://172.17.0.12
<html><body><h1>It works!</h1></body></html>
root@docker-lab:~/html# curl http://127.0.0.1:81
<html><body><h1>It works!</h1></body></html>
 
 
2、挂载docker host上的HTML目录到httpd容器中,且容器销毁后dockerhost上的文件还在
 
root@docker-lab:~/html# pwd
/root/html
root@docker-lab:~/html# cat index.html
Docker Volume bind test
root@docker-lab:~/html# docker run -d -p 80:80 -v /root/html:/usr/local/apache2/htdocs httpd
595f3bf54850a93c0b10580efed8f3c7c6ab70c264ad8b3bd108898a3f059295
root@docker-lab:~/html# docker inspect 595f -f '{{.NetworkSettings.IPAddress}}'
172.17.0.11
root@docker-lab:~/html# curl http://172.17.0.11
Docker Volume bind test
root@docker-lab:~/html# curl http://127.0.0.1:80
Docker Volume bind test
root@docker-lab:~/html# docker stop 595f
595f
root@docker-lab:~/html# docker rm 595f
595f
root@docker-lab:~/html# pwd
/root/html
root@docker-lab:~/html# cat index.html
Docker Volume bind test
 
3、挂载docker host上的文件到容器中,验证效果
 
root@docker-lab:~/html# docker run -d -p 80:80 -v /root/html/index.html:/usr/local/apache2/htdocs/index.html httpd
0c51a31ee4c1412785864ef1ad820b8624e7e8f5338cb35c1a7d8f7afab3edf4
root@docker-lab:~/html# docker inspect 0c51 -f '{{.NetworkSettings.IPAddress}}'
172.17.0.11
root@docker-lab:~/html# curl http://172.17.0.11
Docker Volume bind test
root@docker-lab:~/html# curl http://127.0.0.1
Docker Volume bind test
 
4、确认busybox容器默认 /home 目录是空的
 
root@docker-lab:~/html# docker run -it busybox sh
/ # ls -a /home/
.   ..
 
5、挂载目录到容器中,并验证只读参数
 
root@docker-lab:~/html# docker run -it -v /root/html:/home:ro busybox sh
/ # ls -a /home/
.           ..          index.html
/ # echo aaa > /home/testwrite
sh: can't create /home/testwrite: Read-only file system
 
6、挂载文件到容器中一个不存在的文件
 
root@docker-lab:~/html# docker run -it -v /root/html/index.html:/home/index.html2 busybox sh
/ # ls -a /home/
.            ..           index.html2
/ # cat /home/index.html2
Docker Volume bind test
 
7、挂载一个不存在的path到容器中也不存在的path,会在dockerhost和容器中分别创建对应的path,进行挂载
 
root@docker-lab:~/html# docker run -it -v /root/html/index.html2:/home/index.html busybox sh
/ # ls -a /home/
.           ..          index.html
/ # echo aaa > /home/index.html/testfile
/ # cat /home/index.html/testfile
aaa
/ # exit
root@docker-lab:~/html# ls
index.html  index.html2
root@docker-lab:~/html# cat index.html2/testfile
aaa
 
 
 

039、Data Volume 之 bind mount (2019-02-28 周四)的更多相关文章

  1. 第 6 章 存储 - 039 - Data Volume 之 bind mount

    Data Volume Data Volume 本质上是 Docker Host 文件系统中的目录或文件,能够直接被 mount 到容器的文件系统中. Data Volume 有以下特点: 1.Dat ...

  2. Data Volume 之 bind mount - 每天5分钟玩转 Docker 容器技术(39)

    storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume. Data Volume 本质 ...

  3. 37-Data Volume 之 bind mount

    storage driver 和 data volume 是容器存放数据的两种方式,上一节我们学习了 storage driver,本节开始讨论 Data Volume. Data Volume 本质 ...

  4. docker的volume和bind mount究竟有什么区别?

    不知道你在使用docker的时候,有没有注意到volume mount和bind mount的使用? 进一步说,他们之间的区别到底是什么? 接下来的内容,我们就为你揭开他们的神秘面纱. 相同之处 首先 ...

  5. 梦想MxWeb3D协同设计平台 2019.02.28更新

    梦想MxWeb3D协同设计平台 2019.02.28更新 SDK开发包下载地址: http://www.mxdraw.com/ndetail_10130.html 在线演示网址: http://www ...

  6. 将数据挂载到 docker 容器中的3种方式:volume、bind mount、tmpfs

    出处:https://deepzz.com/post/the-docker-volumes-basic.html

  7. Cheatsheet: 2018 11.01 ~ 2019 02.28

    Golang FromXToGo micro - A microservice toolkit Other Easy parsing of Excel spreadsheet format with ...

  8. 2019.02.28 bzoj4199: [Noi2015]品酒大会(sam+线段树)

    传送门 题意:给一个串,每个位置有一个权值,当S[s...s+len−1]=S[t...t+len−1]&&S[s...s+len]̸=S[t..t+len]S[s...s+len-1 ...

  9. 2019.02.28 bzoj3527: [Zjoi2014]力(fft)

    传送门 fftfftfft菜题. 题意简述:给一个数列aia_iai​,对于i=1→ni=1\rightarrow ni=1→n求出ansi=∑i<jai(i−j)2−∑i>jai(i−j ...

随机推荐

  1. MT【245】小概率事件

    (2011年AAA测试)将一枚均匀的硬币连续抛掷$n$次,以$P_n$ 表示未出现连续3次正面的概率.求$\{P_n\}$.并讨论$\{P_n\}$单调性和极限. 分类讨论:第$n$次反面则未出现连续 ...

  2. Hdoj 2899.Strange fuction 题解

    Problem Description Now, here is a fuction: F(x) = 6 * x^7+8x^6+7x^3+5x^2-yx (0 <= x <=100) Ca ...

  3. [luogu1486][bzoj1503][NOI2004]郁闷的出纳员【平衡树treap】

    题目描述 OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常调整员工的工资 ...

  4. Codeforces 1076D Edge Deletion(最短路树)

    题目链接:Edge Deletion 题意:给定一张n个顶点,m条边的带权无向图,已知从顶点1到各个顶点的最短路径为di,现要求保留最多k条边,使得从顶点1到各个顶点的最短距离为di的顶点最多.输出m ...

  5. poj3680 Intervals (费用流)

    建图((x,y,c,l)表示x到y,费用c,流量l) (S,1,0,K) (i,i+1,0,K) 这个边上的流量,表示i还可以被覆盖的次数 (N,T,0,K) (i,j,w,1)对于权值为w的区间[i ...

  6. [luogu4626][一道水题2]

    题目链接 思路 这个首先想到质因数分解.然后发现只要对于每个质数将ans乘以这个质数在从1到n中出现过的最高指数次就行了. 这个\(10^8\)令人发指.一直tle,最后发现吸口氧才能过.. 代码 # ...

  7. Vue学习(4)

    昨天内容回顾 1.{{}}模板语法.插值.简单运算2.指令系统 v-if 真正销毁重建 v-show 更改css的display,用于重复切换出现 v-bind 绑定属性 : v-on 绑定事件 @ ...

  8. 截取 还没有读的txt章节 生成新的文件

    package file; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp ...

  9. hdu 4279"Number"(数论)

    传送门 参考资料: [1]:https://www.2cto.com/kf/201308/233613.html 题意,题解在上述参考资料中已经介绍的非常详细了,接下来的内容只是记录一下我的理解: 我 ...

  10. poj 1523"SPF"(无向图求割点)

    传送门 题意: 有一张联通网络,求出所有的割点: 对于割点 u ,求将 u 删去后,此图有多少个联通子网络: 对于含有割点的,按升序输出: 题解: DFS求割点入门题,不会的戳这里