APP下载

如何在Docker容器和主机之间共享资料?_部署

消息来源:baojiabao.com 作者: 发布时间:2024-05-13

报价宝综合消息如何在Docker容器和主机之间共享资料?_部署

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

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

欢迎使用卷

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

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

建立主机资料卷

第一步是建立一个新目录来放置卷。为此,开启终端视窗并执行命令:

mkdir ~/container-data

你要确保刚建立的目录位于Docker使用者可以访问的位置(拥有读写许可权)。

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

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:我们刚部署的容器列表

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

docker attach ID

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

图C:新容器的bash提示符

执行命令ls /,你会看到/data目录已新增到Ubuntu容器。不妨用这个命令在该目录中建立一个测试档案:

touch /data/test

建立该测试档案后,在主机上开启另一个终端视窗,执行命令ls ~/container-data。应该会在该目录中看到测试档案(图D)。

图D:我们在容器内建立的测试档案可在主机上的卷中看到

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

数据库卷

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

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

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

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

docker exec -it ID /bin/bash

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

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

ls /var/lib/mysql

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

exit

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

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】

作者:Jack Wallen

2020-01-29 11:00:00

相关文章