Docker数据卷将数据存储到主机而非容器,多个容器需要共享数据时,常常使用数据卷。

  1. 为容器设置数据卷(不指定主机目录)

  2. 容器与主机之间、容器与容器之间共享数据卷(指定主机目录)

  3. 使用Docker数据卷容器

  

  • 为容器设置数据卷(不指定主机目录)

  为容器设置数据卷只需要在创建容器时使用 -v 参数指定目录即可。下面示例一个以/data目录设置为数据卷,并存储文件在data数据卷内,并回到主机查看数据卷中的内容。首先创建容器,执行命令创建容器:

sudo docker run -i -t --name example-volume -v /data ubuntu /bin/bash

  命令执行成功后会创建容器并进入容器终端bash,切换目录到/data目录,创建test.txt文件,写入内容“Just a test.”,命令执行依次如下:

cd data
echo "Just a test." >> test.txt

  容器内执行exit命令后推出到主机,使用docker inspect 查看刚才创建的镜像的Source的值。Source的值就是容器的数据卷在主机中的存储位置。

sudo docker inspect example-volume | grep Source

  命令结果使用管道查找包含Source关键字的信息,可以看到存储的目录/var/lib/docker/volumes/1381f734a4c3207929784b149137d72cfd71987750c2e74593e81823bcfac2c5/_data。

  目录下面有刚才在容器内创建的test.txt文件。使用cat命令查看一下内容:

sudo cat /var/lib/docker/volumes/1381f734a4c3207929784b149137d72cfd71987750c2e74593e81823bcfac2c5/_data/test.txt

  所以,在容器内设置的数据卷其实对应于docker管理的一个主机存储目录。

  •  容器与主机之间、容器与容器之间共享数据卷(指定主机目录)

  容器与主机共享数据卷只需要在创建容器时指定主机目录与容器目录之间的共享就可以了,格式是使用 -v 参数,“-v 主机目录:容器目录“ 选项指定具体的共享目录。下面示例一个主机~/Document目录与容器/Document目录的数据卷共享。执行命令创建容器:

sudo docker run -i -t --name hello-volume1 -v ~/Document:/Document ubuntu /bin/bash

  命令执行成功后会进入容器终端,输入内容“Just a test.”到文件/Document/test.txt文件并退出回到主机终端

  在主机的~/Document目录下可以看到test.txt文件,使用cat命令查看其内容。

cat ~/Document/test.txt

  下面创建第二个容器,共享主机的~/Document目录,执行命令:

sudo docker run -i -t --name hello-volume2 -v ~/Document:/Document ubuntu /bin/bash

  命令执行成功后会进入容器终端,使用cat命令查看共享数据卷下的test.txt文件,执行命令:

cat /Document/test.txt

  从执行结果来看,前面第一个容器hello-volume1创建的文件test.txt也出现在容器hello-volume2中。其实若在两个容器中任何一个容器中的共享目录/Document或者主机的~/Document目录下创建文件,它们三者都可以使用,这就是数据卷的功能,可以实现多个容器共享数据。

  • 使用Docker数据卷容器

  数据卷容器是设置数据卷的容器,专门提供数据卷供其它容器共享。从普通容器连接到数据卷容器后,即可访问数据卷容器内的数据卷目录。下面创建一个名为data-volume的数据卷容器,执行命令:

sudo docker run -i -t --name data-volume -v ~/Document:/Document ubuntu /bin/bash

  然后输入测试内容到容器的/Document目录下,输入命令:

echo "data-volume" >> /Document/data

  文件写入后,这时候需要把数据卷容器后台运行,依次按Ctrl+P、Ctrl+Q,在不停止容器的前提下推出Bash Shell。

  这时,创建普通容器,连接到刚刚创建的data-volume数据卷容器,运行Bash Shell,输出/Document目录下的data文件内容,执行命令:

sudo docker run -i -t --name hello --volumes-from data-volume ubuntu /bin/bash

  命令执行成功后会进入容器,执行cat命令查看数据卷容器的内容:

cat /Document/data

  用于连接数据卷容器的选项格式为 --volumes-from <数据卷容器> ,注意确保连接的数据卷容器是启动运行状态。另外,数据卷容器也可以被多个普通容器连接上去。

Docker学习笔记之使用Docker数据卷的更多相关文章

  1. Docker学习笔记之了解 Docker 的核心组成

    0x00 概述 在掌握 Docker 的一些背景知识后,我们还不得不花费一节的篇幅来简单介绍有关 Docker 核心的一些知识.当然,大家不要觉得有“核心”这类的词,我们就要在这一节中深入 Docke ...

  2. docker学习笔记-04:docker容器数据卷

    一.容器数据卷是什么 1.为了保存docker容器运行时产生的数据,做数据的持久化,我们需要用到容器数据卷.因为如果不通过docker commit 生成新的镜像,那么当容器被删除时,数据自然就没有了 ...

  3. Docker学习笔记之使用 Docker Compose 管理容器

    0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...

  4. Docker学习笔记之搭建Docker运行环境

    0x00 概述 既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Docker 相关知识和使用方式的学习.得益于与商业性的 ...

  5. Docker学习笔记六:Docker搭建企业级私有仓库

    前言 Docker不仅是一个强大的服务器部署工具,而且它还有一个官方的Docker Hub registry用于储存Docker镜像.上传镜像到Docker Hub是免费的,上传的镜像文件同时也对公共 ...

  6. Docker学习笔记之搭建Docker私有仓库

    Docker仓库服务器名为Docker注册(registry)服务器.可以使用docker push命令将镜像上传到注册服务器,也可以使用docker pull命令下载服务器的镜像. Docker注册 ...

  7. docker 学习笔记21:docker连接网络的设置

    1.如果docker主机不需要通过代理连接外网 则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置. 2.当docker主机 是通 ...

  8. docker 学习笔记20:docker守护进程的配置与启动

    安装好docker后,需要启动docker守护进程.有多种启动方式. 一.服务的方式 因为docker守护进程被安装成服务.所以,可以通过服务的方式启停docker守护进程,包括查看状态. sudo ...

  9. Docker学习笔记二:Docker常用命令及提升拉取镜像的速度

    一.Docker命令: 1.docker images   //命令用来查看docker中所包含的镜像信息 2.docker ps -a    //命令用来查看docker中所包含所有容器信息(运行状 ...

随机推荐

  1. 【Codeforces 1037H】Security(SAM & 线段树合并)

    Description 给出一个字符串 \(S\). 给出 \(Q\) 个操作,给出 \(L, R, T\),求字典序最小的 \(S_1\),使得 \(S^\prime\) 为\(S[L..R]\) ...

  2. 算法——寻找第K个最大的数

    在未排序的数组中找到第 k 个最大的元素. 链接: leetcode. 解题思路:通过快速排序的思想方法,每次随机获取指定范围内一个树的排序位置,然后根据这个位置,再重新指定范围,直到这个位置索引满足 ...

  3. 使用git客户端免密码进行拉取等相关操作

    前言 如果使用git客户端进行pull或push操作时,遇到有权限的项目总要输入用户名密码,真的是太麻烦了,因此需要稍作修改,然后就可以免密码操作啦! 方法: 进入C盘->用户->你的主机 ...

  4. SSO的通用标准OpenID Connect

    目录 简介 OpenID Connect是什么 ID Token 请求ID Token ID Token可以做什么 Open Connect认证码授权的例子 User Info 简介 OpenID C ...

  5. Java8中执行js脚本

    代码中除了callJSFunctionFromFile函数,其他均转载于文章JDK1.8中如何用ScriptEngine动态执行JS import jdk.nashorn.api.scripting. ...

  6. virtualbox sharefolder mount fail

    ubuntu 14.04.1 LTS 64bit 安装完GuestAdditions后,在终端输入 sudo mount -t vboxsf sharename /mnt/share 提示错误:mou ...

  7. fMRI数据分析学习笔记——常用工具

    背景 在学习fMRI数据处理的过程中,通过其他的资料看到了别人推荐的有用的fMRI数据处理软件和小插件,在此记录一下,以便后期慢慢学习使用. 1.NeuroImaging Analysis Kit ( ...

  8. PHP可变变量特性

    可变变量 有时候使用可变变量名是很方便的.就是说,一个变量的变量名可以动态的设置和使用.一个普通的变量通过声明来设置,例如: <?php$a = 'hello';?> 一个可变变量获取了一 ...

  9. Hive中的UDF详解

    hive作为一个sql查询引擎,自带了一些基本的函数,比如count(计数),sum(求和),有时候这些基本函数满足不了我们的需求,这时候就要写hive hdf(user defined funati ...

  10. Websocket---认识篇

    为什么需要 WebSocket ? 了解计算机网络协议的人,应该都知道:HTTP 协议是一种无状态的.无连接的.单向的应用层协议.它采用了请求/响应模型.通信请求只能由客户端发起,服务端对请求做出应答 ...