多个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集群 主节点数必须是单数,也就是 ...
随机推荐
- QLoo graphql engine 学习一 基本试用(docker&&docker-compose)
说明:使用docker-compose 进行安装 代码框架 使用命令行工具创建 qlooctl install docker qloo-docker 运行qloo&&gloo 启动 ...
- 解决PHPWind局域网不能访问问题
解决PHPWind局域网不能访问问题 windows 7环境下搭建PHPWind论坛之后,局域网内不能被访问,访问显示403:而本机访问正常 1. 本版本是windows下一键安装版,首先可以确定的是 ...
- java的堆和栈
初始入门嗯:https://www.cnblogs.com/SaraMoring/p/5687466.html 堆空间:new出来的数组和对象,对象和数组没有引用指向它的时候,等待下一次垃圾回收 栈空 ...
- 希尔排序算法-python实现
#-*- coding: UTF-8 -*- import numpy as np def ShellSort(a): gap = a.size / 2 while gap >= 1: for ...
- Accessing data in Hadoop using dplyr and SQL
If your primary objective is to query your data in Hadoop to browse, manipulate, and extract it into ...
- 将mysql表数据批量导入redis zset结构中
工作中有这样一个需求,要将用户的魅力值数据做排行,生成榜单展示前40名,每隔5分钟刷新一次榜单.这样的需求用redis的zset是很方便实现的.但是数据存在mysql的表中,有400多万条,怎么将其快 ...
- 5_bootstrap之响应式布局|列表|按钮
5.响应式工具 为针对性地在移动页面上展示和隐藏不同的内容,bootStrap提供响应式工具. 可以让开发人员通过该工具决定,在何种屏幕尺寸下,隐藏或者显示某些元素 帮助手册位置:全局CSS样式--- ...
- 好记性不如烂笔头--linux学习笔记9练手写个shell脚本
#!/bin/bash #auto make install httpd #by authors baker95935 #httpd define path variable H_FILES=http ...
- Eclipse apk 签名
Eclipse apk 签名 project>right mouse click>android tool>Export signed Application package cre ...
- 跟我学算法- tensorflow 卷积神经网络训练验证码
使用captcha.image.Image 生成随机验证码,随机生成的验证码为0到9的数字,验证码有4位数字组成,这是一个自己生成验证码,自己不断训练的模型 使用三层卷积层,三层池化层,二层全连接层来 ...