介绍
Docker 数据卷 是将应用程序容器化时的一个重要概念。了解这一概念对于确保容器化应用程序的最佳体验以及可靠的持久化和数据管理至关重要。然而,虽然这个概念很重要,但对许多开发人员来说,它也令人困惑且复杂。对于开发人员和 DevOps 专家来说,能够理解如何设置 Docker 数据卷、了解其正确用法、知道不同类型的卷以及为他们的应用程序选择哪种类型至关重要。
本教程专注于 解释 Docker 数据卷的概念和用法。完成本教程后,您将掌握如何设置和使用任何类型的 Docker 数据卷。
前提条件
要学习本教程,您需要具备以下条件:
- Ubuntu 已安装。查看我们的 如何设置您的 Ubuntu 18.04 服务器 教程以快速参考。
- 具有 sudo 权限的 Ubuntu 用户。这一步可能会很复杂,特别是如果您不熟悉 Linux。阅读 配置 Linux Sudoers 文件 以获取详细指南。
- Docker 已安装在 Ubuntu 上。要在您的 Ubuntu 上安装 Docker,您可以关注我们的 如何在公共云中的 Ubuntu 上安装 & 操作 Docker 博客。
虽然本教程侧重于在 Ubuntu 上管理 Docker, docker 命令适用于所有安装了 Docker 的操作系统。
理解 Docker 容器的工作原理
要充分理解 Docker 数据卷,您必须了解 Docker 容器的工作原理。在本节中,我们为 Docker 的新用户提供基础知识的介绍。如果您已经了解 Docker 的工作原理或者是 Docker 的经验丰富用户,可以跳过本节并开始使用数据卷。
通过安装 Docker 平台,Docker 容器允许在宿主操作系统之上运行应用程序。由于 Docker 平台安装在宿主操作系统上,因此在宿主机和客户应用程序之间形成了一个抽象层。与虚拟机不同,Docker 容器与宿主操作系统共享其 Linux 内核。由于 Docker 不需要宿主机之上安装任何额外的操作系统,因此只要宿主机上安装了 Docker,Docker 应用程序就是轻量级的,并且可以在所有宿主机上访问。
由于没有额外的客户操作系统,Docker 平台与宿主机共享资源。启动 Docker 应用程序很快,但当您必须共享资源时,复杂性就来了。Docker 没有用于数据持久化的自身内存或存储。这些资源必须来自宿主机。习惯于使用虚拟机的人会发现这种资源共享和管理过程很困难。缺乏适当的知识可能会导致意想不到和不希望看到的结果。虽然本教程假设您熟悉 Docker 生态系统,但请随时阅读我们的详细教程 什么是 Docker?Docker 生态系统概述 以进行快速温习。
使用 Docker 数据卷持久化数据
在使用 Docker 时,您无法直接在其中创建卷。因此,为了存储数据,我们需要创建一个附加了卷的 Docker 卷容器。为了将我们的 Docker 应用程序与此数据卷容器连接,我们使用 Docker’s --volume-from 命令来获取容器并将其附加到我们的应用程序。
我们将逐步介绍该过程:
- 首先,创建一个名为
的新容器,my-container ,通过运行以下命令:
1docker create -v /tmp --name my-container ubuntu
这将在 中创建一个新容器。/tmp 文件夹。您可以根据需要更改文件夹目录。 - 现在您的数据容器已准备就绪,您可以通过运行一个带有
标志的新 Ubuntu 容器来向其写入数据,--volume-from 标志,然后运行
bash。我们写入
的任何内容tmp 目录将保存在我们宿主机的
/tmp 文件夹:
1docker run -t -i --volumes-from my-container ubuntu /bin/bash
该 -t 命令行选项从容器内部调用终端。 -i 标志使连接具有交互性。在 Ubuntu 容器的 bash 提示符下,在 中创建一个文件/tmp:
1echo "Some sample data" > /tmp/sample_file - 最后,通过运行
退出此 bashexit 命令。接下来,运行以下命令:
1docker run -t -i --volumes-from my-container ubuntu /bin/bash
您将在此目录中找到您的 sample_file 。对要指定的卷数量没有限制。您可以使用 标志添加任意数量的卷。--volumes-from 标志。您还可以根据需要创建任意多个数据卷容器。
在宿主机和 Docker 容器之间访问数据
对于有虚拟化经验的读者,此选项类似于虚拟机中的共享文件夹选项。这里我们不创建 data-only 容器,而是使用 Docker 镜像运行我们的 Docker 应用程序,并用宿主机系统上某个目录的内容覆盖其目录之一。
一个常见的场景是将日志文件保存在宿主机中。这可能是必需的,以便我们可以根据需要分析这些文件,而无需进入机器内部。对于这种情况,假设您使用的是 Docker Nginx 镜像 并且您想将其日志文件存储在宿主机中。Nginx Docker 镜像将日志写入 /var/log/nginx 目录,但这是 /var/log/nginx 在 Docker Nginx 容器内部。因此,宿主机无法访问此位置。
为了实现我们的目标,我们需要创建一个共享文件夹来在宿主机和 Docker Nginx 镜像之间存储日志。下面我们将通过一个简单的分步指南来阐明这一过程:
- 首先,在宿主机中创建一个您想要存储日志的目录:
然后,通过运行以下命令启动您的容器:1mkdir ~/my-nginxlogs
1docker run -d -v ~/my-nginxlogs:/var/log/nginx -p 5000:80 -i nginx
- 此
run 命令接受一些参数,所以让我们将其分解以便更好地理解:
- -p 5000:80: 设置端口转发。Nginx 容器默认监听端口 80 ,这会将 Nginx 容器的端口 80 映射到端口 5000 (在宿主机系统上)。
- -d: 分离进程并在后台运行。
- -v ~/my-nginxlogs:/var/log/nginx: 我们将 Nginx 容器内部的 /var/log/nginx 目录链接到宿主机上的 /my-nginxlogs 目录。此 : 用于分隔宿主机路径与容器路径。宿主机路径始终排在第一位。
现在我们的 Nginx 容器正在运行,首先通过打开 Web 浏览器并运行以下 URL 来检查 Nginx 服务器是否在宿主机的 5000 端口上提供服务:http://localhost:5000。一旦出现欢迎页面,您的 Nginx 服务器就准备就绪,并开始在其 /var/log/nginx 文件夹中创建日志。
如果您打开宿主机的 /my-nginxlogs 文件夹,您将在此处看到来自 Docker Nginx 容器的日志文件。如果您在 Nginx 容器运行时对宿主机上的 /my-nginxlogs 文件夹进行更改,更改也将反映在容器的 /var/log/nginx 文件夹中。
结论
在本教程中,我们全面了解了 Docker 数据卷。我们学习了为应用程序创建卷、在宿主机 and Docker 容器之间共享数据、数据类型以及持久化数据。这将帮助您在容器化应用程序中持久化数据,并管理应用程序的状态和配置。
要进一步学习 Docker,请查看来自 我们博客:
- 如何在 Ubuntu 20.04 上使用 GitLab 自托管实例托管 Docker 镜像仓库并构建 Docker 镜像
- 在 Ubuntu 20.04 上使用 Docker 构建和部署 Flask 应用程序
- 在 Ubuntu 18.04 上搭建私有 Docker 镜像仓库
- 如何在 Docker 容器与主机之间共享数据
- 清理 Docker 资源 – 镜像、容器和数据卷
祝您计算愉快!
评论
暂无评论。发表第一条评论吧。