您现在的位置: 主页 > www.4394.com >

www.4394.com

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

发表时间:2019-07-08

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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