多个docker 挂载VOLUME的心得
假如有一个mysql镜像
在Dockerfile中制定VOLUME /var/lib/mysql
那么当执行:
docker run -d -e MYSQL_ROOT_PASSWORD=root --name=hzbtest 172.16.71.199/common/mysql:5.6
1)上面没有指定 -v,新建的容器会自动在主机上建立一目录来挂载/var/lib/mysql
docker inspect hzbtest"Mounts": [
{
"Name": "6407cbb6700a4076cdeeef60629f1748ff34310102480a3f702fd3fee9e69134",
"Source": "/var/lib/docker/volumes/6407cbb6700a4076cdeeef60629f1748ff34310102480a3f702fd3fee9e69134/_data",
"Destination": "/var/lib/mysql",
"Driver": "local",
"Mode": "",
"RW": true
}
]
2)当执行-v,只指定容器内部的目录
docker run -d -e MYSQL_ROOT_PASSWORD=root --name=hzbtest2 -v /var/lib/mysql 172.16.71.199/common/mysql:5.6
这种方式的效果和1)的效果一样。
3)当执行:
docker run -d -e MYSQL_ROOT_PASSWORD=root --name=hzbtest3 -v /root/data:/var/lib/mysql 172.16.71.199/common/mysql:5.6
这种情况,容器启动后会把/var/lib/mysql里面的文件迁移到宿主机的/root/data目录下
4)当执行:
docker run -d -e MYSQL_ROOT_PASSWORD=root --name=hzbtest4 -v /root/data:/var/log 172.16.71.199/common/mysql:5.6
由于容器的镜像的dockerfile并没有给/var/log指定volume,所以,容器内的/var/log/里面的文件并不会迁移到/root/data里面,相反/var/log/的文件会变成/root/data里面的所有文件。
可以用多个 -v标签为容器添加多个volume,还可以使用:ro指定该volume为只读。
docker run -d -e MYSQL_ROOT_PASSWORD=root --name=hzbtest4 -v /root/data:/var/log:ro 172.16.71.199/common/mysql:5.6
现在假如再有一个mongoDB的镜像
在Dockerfile中制定VOLUME /data/db,这个文件夹本身带有文件.
当执行:
docker run -d -e MYSQL_ROOT_PASSWORD=root --name=hzbtest5 -v /root/data:/data/db 172.16.71.199/common/mongodb:3.0.9
这种情形hzbtest5的/data/db的文件会迁移到/root/data/文件夹下,这时候/roo/data里面就会同时有mysql挂载过来的/var/lib/mysql和mongodb挂载过来的/data/db里面的文件。
hzbtest3的/var/lib/mysql目录和hzbtest5的/data/db目录都能看到/root/data里面的全部文件。
5)使用Dockerfile添加volume
FROM mysql:latest
RUN useradd root
VOLUME /data
RUN touch /data/aa
RUN chown -R root:root /data
这种情况和docker run -v /data是一样的。注意,dockerfile中使用volume是不能挂载宿主机中指定的文件夹。这时为了保证Dockerfile的可移植性,因为不能保证所有的宿主机都有对应的文件夹。
6)共享volume/数据卷容器(--volumes-from)
首先创建一个数据卷容器,在/root/data下面放一个文件test.txt
docker run -it -v /root/data --name=dbdata mysql:latest /bin/bash
创建一个容器testa引用这个卷
docker run -it --name=testa --volumes-from dbdata mysql:latest /bin/bash
创建一个容器testb引用这个卷
docker run -it --name=testb --volumes-from dbdata mysql:latest /bin/bash
可以看到testa和testb的/root/data目录下都会有test.txt文件
当在testb的/root/data下新增aa.txt文件时,testb的/root/data下也将看到aa.txt文件,说明他们是共用的一个数据卷。
多个docker 挂载VOLUME的心得的更多相关文章
- docker挂载volume的用户权限问题,理解docker容器的uid
docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...
- win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据(使用外部redis)
目录 话题 (191) 笔记 (137) 资料区 (2) 评价 (33) 介绍 讨论区 话题 win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据( ...
- Docker Swarm volume 数据持久化
Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. v ...
- Docker Kubernetes Volume 本地数据卷
Docker Kubernetes Volume 本地数据卷 emptyDir 当Pod分配到Node时,首先创建一个空卷,并挂载到Pod中的容器. Pod中的容器可以读取和写入卷中的文件. 当Pod ...
- Docker Kubernetes Volume 网络数据卷
Docker Kubernetes Volume 网络数据卷 由于支持网络数据卷众多 今天只拿nfs作为案例. 支持网络数据卷 nfs iscsi glusterfs awsElasticBlockS ...
- docker存储volume
#环境 centos7. , Docker version -ce docker volume创建.备份.nfs存储 #docker volume 数据存容器内,删容器即销毁全部数据 要保留的数据(数 ...
- docker的volume和bind mount究竟有什么区别?
不知道你在使用docker的时候,有没有注意到volume mount和bind mount的使用? 进一步说,他们之间的区别到底是什么? 接下来的内容,我们就为你揭开他们的神秘面纱. 相同之处 首先 ...
- docker managed volume - 每天5分钟玩转 Docker 容器技术(40)
docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了.还是以 httpd 容器为例: 我们通过 - ...
- 使用docker swarm集群心得
本片关于使用docker swarm 集群心得,也是一些经验吧!过程描述可能简单! 根据一些公司使用经历接收一下问题并针对问题作出应对策略 1.docker swarm集群 主节点数必须是单数,也就是 ...
随机推荐
- UOJ 348 【WC2018】州区划分——子集卷积
题目:http://uoj.ac/problem/348 参考:https://www.cnblogs.com/NaVi-Awson/p/9242645.html#%E5%AD%90%E9%9B%86 ...
- redhat 防火墙禁止允许的IP链接指定的端口
编辑:iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 192.168.4.3 --dport 80 -j A ...
- linux 使用中括号进行条件判断
格式 “#”代表空格,不可缺少 [# param1#op# param2 #] 这种带比较操作符的形式,op左右必须使用空格隔开. 如 [# “3”==”2” #] 这种缺少空格的写法会得到结 ...
- python使用scikit-learn计算TF-IDF
1 Scikit-learn下载安装 1.1 简介 1.2 安装软件 2 TF-IDF基础知识 2.1 TF-IDF概念 2.2 举例说明计算 3 Scikit-Learn中计算TF-IDF 3.1 ...
- [C#][控件]WebBrowser 使用范例
if (webInfo.Document != null) webInfo.Document.OpenNew(true); else webInfo.Navigate("about:blan ...
- Tornado模板转义处理
转自:http://www.qttc.net/201305320.html tornado默认是转义所有字符,比较安全,但有时候我们的确需要把字符当做html来解析处理,因此我们需要做些处理. 示例: ...
- 五.jQuery源码解析之jQuery.extend(),jQuery.fn.extend()
给jQuery做过扩展或者制作过jQuery插件的人这两个方法东西可能不陌生. jQuery.extend([deep],target,object1,,object2...[objectN]) jQ ...
- 由浅入深了解Thrift(1,2,3)
由浅入深了解Thrift(一)——Thrift介绍与用法 由浅入深了解Thrift(二)——Thrift工作原理 由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析
- ArrayList实现
数组实现父类:AbstractList接口:List,RandomAccess,Cloneable,Serializable字段://默认容量private static final int DEFA ...
- jQuery+SpringMVC中的复选框选择与传值
一.checkbox选择 在jQuery中,选中checkbox通用的两种方式: $("#cb1").attr("checked","checked& ...