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

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

译文
作者:布加迪编译 2019-07-08 08:59:41

云计算 你在接触Docker后可能很快发现一点,容器不需要保存数据时,该系统才完美地运行。但如果你要部署需要能够保​​存数据的服务(比如面对数据库的应用程序),该如何是好?

【51CTO.com快译】有了Docker容器,贵公司可以大规模、迅速地提供应用程序和服务。又由于部署容器化应用程序如此简单,你可以很快上手。

你在接触Docker后可能很快发现一点,一旦部署完毕,容器在如何保存和包含数据方面很有限,而这种限制在于容器文件系统中。Docker容器使用联合文件系统(UFS),UFS接触的是一系列只读层,这些层包括最上面的最终读写层。容器不需要保存数据时,该系统才***地运行。但如果你要部署需要能够保​​存数据的服务(比如面对数据库的应用程序),该如何是好?

欢迎使用卷

Docker卷是驻留在主机文件系统上的目录(或文件集合),它不是容器的UFS的一部分。正是在这些卷中,容器才能够保存数据。使用docker volume命令,可以轻松管理卷以扩展容器,让它远远超出其基本功能。

不妨了解如何部署一个新容器,该容器包含一个连接到主机上特定目录的卷,以便容器与卷中的数据保持同步。我会在Ubuntu Server 18.04上进行演示,但只要平台支持Docker,整个过程一样(无论是哪个发行版)。假设你已启动并运行Docker,并可以部署容器。

创建主机数据卷

***步是创建一个新目录来放置卷。为此,打开终端窗口并执行命令:

  1. mkdir ~/container-data 

你要确保刚创建的目录位于Docker用户可以访问的位置(拥有读写权限)。

一旦创建了该目录,就可以在里面安装卷了。假设你要部署一个基于官方Ubuntu映像的容器,该容器含有一个名为/data的目录。想部署将内部的/data目录连接到主机目录〜/ container-data中卷的这样一个容器,你要执行命令:

  1. docker run -dit -P --name ubuntu-test -v ~/container-data:/data ubuntu 

上述命令分解如下:

  • docker run是主命令,表示我们将在新容器中运行命令。
  • -dit中d表示分离模式,it确保可以将bash或sh分配给伪终端。
  • -P向主机发布容器端口。
  • -name表示其后是新容器的名称。
  • -v表示其后是卷。
  • ubuntu是用于容器的映像。

命令完成后,你将获得容器ID(图A)。确保记住该ID的前四个字符,你需要它才能访问容器bash提示符。

图A. 我们已部署的容器

现在你已部署了一个基于官方Ubuntu映像的容器,该容器含有/ data目录,该目录挂载到~/container-data中的主机卷上。

测试卷

不妨测试一下这个卷。如果你忘了容器的ID,执行命令docker ps -a以查看(图B)。

图B:我们刚部署的容器列表

使用以下命令访问刚部署的容器:

  1. docker attach ID 

其中ID是已部署容器的前四个字符。你现在应该发现已在容器中的bash提示符下(图C)。

图C:新容器的bash提示符

执行命令ls /,你会看到/data目录已添加到Ubuntu容器。不妨用这个命令在该目录中创建一个测试文件:

  1. touch /data/test 

创建该测试文件后,在主机上打开另一个终端窗口,执行命令ls ~/container-data。应该会在该目录中看到测试文件(图D)。

图D:我们在容器内创建的测试文件可在主机上的卷中看到

你刚通过主机上的卷部署了含有持久存储的容器。

数据库卷

假设你想为数据库创建卷。为此先部署MySQL数据库Docker容器,指令它使用名为mysql-data的持久存储卷作。使用这个命令来执行此操作:

  1. docker run --name mysql-test -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=passwd -d mysql:latest 

在上述命令中,-e参数选项符告知Docker其后是环境变量。

使用这个命令访问容器的bash提示符:

  1. docker exec -it ID /bin/bash 

其中ID是刚部署容器的ID的前四个字符。

使用这个命令列出容器的/var/lib/mysql目录的内容:

  1. ls /var/lib/mysql 

记下这些内容,使用这个命令退出容器:

  1. exit 

现在,使用这个命令检查主机已挂载卷的内容:

  1. sudo ls /var/lib/docker/volumes/mysql-data/_data 

你应该看到两个目录中列出来的内容一样(图E)。

图E:我们的MySQL数据与主机卷同步

现在你拥有基于MySQL的容器,它包含挂载在主机上卷中的持久存储。

这就是Docker容器和主机之间共享数据的整个方法。有了卷,这项任务不仅很简单,还异常灵活。

原文标题:Docker Basics: How to Share Data Between a Docker Container and Host,作者:Jack Wallen

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/245418.html<

(0)
运维的头像运维
上一篇2025-04-26 04:31
下一篇 2025-04-26 04:32

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注