前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上使用Docker数据卷

如何在Ubuntu 14.04上使用Docker数据卷

原创
作者头像
不会飞的蝴蝶
修改2018-10-29 17:12:52
2.2K0
修改2018-10-29 17:12:52
举报

介绍

在本文中,我们将介绍Docker数据卷的概念:它们是什么,它们有用的原因,不同类型的卷,如何使用它们以及何时使用它们。我们还将通过docker命令行工具介绍如何使用Docker卷的一些示例。

当我们到达文章末尾时,您应该习惯于创建和使用任何类型的Docker数据卷。

准备

要学习本教程,您需要具备以下条件:

没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

注意:尽管前提条件提供了在Ubuntu 14.04上安装Docker的说明,但只要安装了Docker,本文中Docker数据卷的docker命令就可以在其他操作系统上运行。

解释Docker容器

使用Docker需要了解一些特定于Docker的概念,并且大多数文档都侧重于解释如何使用Docker的工具集,而没有解释为什么要使用任何这些工具。如果你是Docker的新手,这可能会令人困惑,因此我们首先介绍一些基础知识,然后再开始使用Docker容器。如果您之前使用过Docker并且只想知道如何开始使用数据卷,请随意跳到下一部分。

Docker容器类似于虚拟机。它基本上允许您在容器内运行预先打包的“Linux盒子”。Docker容器和典型虚拟机之间的主要区别在于Docker与普通虚拟机不同,与周围环境隔离。Docker容器与主机操作系统共享Linux内核,这意味着它不需要像虚拟机一样“启动”。

由于分享了这么多,启动Docker容器是一种快速而廉价的操作 - 在大多数情况下,您可以在运行正常情况的同时启动完整的Docker容器(相当于普通虚拟机)命令行程序。这很好,因为它使复杂系统的部署变得更加容易和模块化,但它与通常的虚拟机方法不同,并且对来自虚拟化世界的人来说有一些意想不到的副作用。

学习Docker数据卷的类型

Docker数据卷有三个主要用例:

  1. 在移除容器时保持数据
  2. 在主机文件系统和Docker容器之间共享数据
  3. 与其他Docker容器共享数据

第三种情况稍微提高一点,所以我们不会在本教程中讨论它,但前两种情况很常见。

在第一个(也是最简单的)情况下,即使您删除了容器,您也只希望数据处于闲置状态,因此通常最简单的方法是让Docker管理数据存储的位置。

保持数据持久性

在Docker中无法直接创建“数据卷”,因此我们创建了一个附加了卷的数据卷容器。对于您希望连接到此数据卷容器的任何其他容器,请使用Docker 的--volumes-from选项从此容器中获取卷并将其应用于当前容器。乍一看这有点不寻常,所以让我们来看一个快速的例子,说明即使容器被移除,我们也可以使用这种方法使byebye文件保持不变。

首先,创建一个新的数据卷容器来存储我们的卷:

docker create -v /tmp --name datacontainer ubuntu

这创建了一个基于ubuntu图像和在/tmp目录中的命名为datacontainer的容器。

现在,如果我们运行带有--volumes-from标志的新Ubuntu容器并像之前那样再次运行bash,我们写入/tmp目录的任何内容都将保存到datacontainer容器的/tmp卷中。

首先,启动ubuntu图像:

docker run -t -i --volumes-from datacontainer ubuntu /bin/bash

-t命令行选项从容器内部调用一个终端。-i标志使连接具有交互性。

ubuntu容器的bash提示符下,在/tmp位置创建一个文件:

echo "I'm not going anywhere" > /tmp/hi

继续并键入exit以返回到主机的shell。现在,再次运行相同的命令:

docker run -t -i --volumes-from datacontainer ubuntu /bin/bash

这次hi文件已经存在:

cat /tmp/hi

你应该看到:

I'm not going anywhere

您可以根据需要添加任意数量的--volumes-from标志(例如,如果要组装使用来自多个数据容器的数据的容器)。您还可以根据需要创建任意数量的数据量容器。

此方法的唯一警告是,您只能在创建数据卷容器时选择容器内的装载路径(在我们的示例中是/tmp)。

在主机和Docker容器之间共享数据

Docker容器的另一个常见用途是在主机和Docker容器之间共享文件。这与上一个示例的工作方式不同。首先不需要创建“仅数据”容器。您可以简单地运行任何Docker映像的容器,并使用主机系统上目录的内容覆盖其中一个目录。

作为一个快速的现实世界的例子,假设你想使用官方的Docker Nginx图像,但你想保留Nginx日志文件的永久副本以便稍后分析。默认情况下,nginxDocker镜像会记录到/var/log/nginx目录,但这是在Docker Nginx容器中的/var/log/nginx。通常,它无法从主机文件系统访问。

让我们创建一个文件夹来存储我们的日志,然后使用共享卷运行Nginx映像的副本,以便Nginx将其日志写入主机的文件系统而不是容器内部的/var/log/nginx

mkdir ~/nginxlogs

然后启动容器:

docker run -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 -i nginx

这个run命令与我们到目前为止使用的命令略有不同,所以让我们一点一点地分解它:

  • -v ~/nginxlogs:/var/log/nginx- 我们设置了一个卷,它将Nginx容器内的/var/log/nginx目录链接到主机上的~/nginxlogs目录。Docker使用:从容器路径中拆分主机的路径,并且主机路径始终位于第一位。
  • -d - 分离进程并在后台运行。否则,我们只会看到一个空的Nginx提示,并且在我们杀死Nginx之前无法使用此终端。
  • -p 5000:80 - 向前设置端口。默认情况下,Nginx容器正在侦听端口80,这会将Nginx容器的端口80映射到主机系统上的端口5000。

如果您密切关注,您可能还注意到与之前run命令的另一个区别。到目前为止,我们一直在所有run语句的末尾(通常是/bin/bash)指定一个命令,告诉Docker在容器内运行什么命令。因为Nginx图像是官方Docker镜像,所以它遵循Docker最佳实践,并且图像的创建者设置图像以运行命令以自动启动Nginx。我们可以放弃这里的常规/bin/bash,让图像的创建者为我们选择在容器中运行的命令。

所以,我们现在有一个在我们机器上的Docker容器内运行的Nginx副本,我们的主机端口5000直接映射到Nginx的端口80的副本。让我们使用curl来做一个快速的测试请求:

curl localhost:5000

您将从Nginx获得一个屏幕显示的HTML,显示Nginx已启动并正在运行。但更有趣的是,如果您查看主机上的~/nginxlogs文件夹并查看access.log文件,您将看到来自Nginx的日志消息,显示我们的请求:

cat ~/nginxlogs/access.log

你会看到类似的东西:

172.17.42.1 - - [23/Oct/2015:05:22:51 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.35.0" "-"

如果对~/nginxlogs文件夹进行任何更改,您也可以实时从Docker容器中查看它们。

结论

总结一下!我们现在已经介绍了如何创建数据卷容器,其容量可以用作在其他容器中保存数据的方式,以及如何在主机文件系统和Docker容器之间共享文件夹。在Docker数据卷方面,这涵盖了除最高级用例之外的所有用例。

如果您使用的是Docker Compose,则可以在docker-compose.yml文件中配置Docker数据卷。有关详细信息,请查看如何在Ubuntu 14.04上安装和使用Docker Compose

祝你好运,快乐的Dockering!

想要了解更多关于使用Docker数据卷的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Work with Docker Data Volumes on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 解释Docker容器
  • 学习Docker数据卷的类型
  • 保持数据持久性
  • 在主机和Docker容器之间共享数据
  • 结论
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档