假如有一个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的心得的更多相关文章

  1. docker挂载volume的用户权限问题,理解docker容器的uid

    docker挂载volume的用户权限问题,理解docker容器的uid 在刚开始使用docker volume挂载数据卷的时候,经常出现没有权限的问题. 这里通过遇到的问题来理解docker容器用户 ...

  2. win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据(使用外部redis)

    目录 话题 (191) 笔记 (137) 资料区 (2) 评价 (33) 介绍 讨论区 话题 win10专业版Hyper-v下Docker挂载volume的方式使用Gitlab(汉化版)保存资料数据( ...

  3. Docker Swarm volume 数据持久化

    Docker Swarm volume 数据持久化 volume 是将宿主级的目录映射到容器中,以实现数据持久化. 可以用两种方式来实现: volume 默认模式:工作节点宿主机数据同步到容器内. v ...

  4. Docker Kubernetes Volume 本地数据卷

    Docker Kubernetes Volume 本地数据卷 emptyDir 当Pod分配到Node时,首先创建一个空卷,并挂载到Pod中的容器. Pod中的容器可以读取和写入卷中的文件. 当Pod ...

  5. Docker Kubernetes Volume 网络数据卷

    Docker Kubernetes Volume 网络数据卷 由于支持网络数据卷众多 今天只拿nfs作为案例. 支持网络数据卷 nfs iscsi glusterfs awsElasticBlockS ...

  6. docker存储volume

    #环境 centos7. , Docker version -ce docker volume创建.备份.nfs存储 #docker volume 数据存容器内,删容器即销毁全部数据 要保留的数据(数 ...

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

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

  8. docker managed volume - 每天5分钟玩转 Docker 容器技术(40)

    docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了.还是以 httpd 容器为例: 我们通过 - ...

  9. 使用docker swarm集群心得

    本片关于使用docker swarm 集群心得,也是一些经验吧!过程描述可能简单! 根据一些公司使用经历接收一下问题并针对问题作出应对策略 1.docker swarm集群 主节点数必须是单数,也就是 ...

随机推荐

  1. UOJ 348 【WC2018】州区划分——子集卷积

    题目:http://uoj.ac/problem/348 参考:https://www.cnblogs.com/NaVi-Awson/p/9242645.html#%E5%AD%90%E9%9B%86 ...

  2. 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 ...

  3. linux 使用中括号进行条件判断

       格式 “#”代表空格,不可缺少 [# param1#op# param2 #] 这种带比较操作符的形式,op左右必须使用空格隔开. 如 [# “3”==”2” #]  这种缺少空格的写法会得到结 ...

  4. 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 ...

  5. [C#][控件]WebBrowser 使用范例

    if (webInfo.Document != null) webInfo.Document.OpenNew(true); else webInfo.Navigate("about:blan ...

  6. Tornado模板转义处理

    转自:http://www.qttc.net/201305320.html tornado默认是转义所有字符,比较安全,但有时候我们的确需要把字符当做html来解析处理,因此我们需要做些处理. 示例: ...

  7. 五.jQuery源码解析之jQuery.extend(),jQuery.fn.extend()

    给jQuery做过扩展或者制作过jQuery插件的人这两个方法东西可能不陌生. jQuery.extend([deep],target,object1,,object2...[objectN]) jQ ...

  8. 由浅入深了解Thrift(1,2,3)

    由浅入深了解Thrift(一)——Thrift介绍与用法 由浅入深了解Thrift(二)——Thrift工作原理 由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析

  9. ArrayList实现

    数组实现父类:AbstractList接口:List,RandomAccess,Cloneable,Serializable字段://默认容量private static final int DEFA ...

  10. jQuery+SpringMVC中的复选框选择与传值

    一.checkbox选择 在jQuery中,选中checkbox通用的两种方式: $("#cb1").attr("checked","checked& ...