当前位置: 首页 > 科技观察

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

时间:2023-03-21 01:57:38 科技观察

如何在Docker容器和主机之间共享数据?由于部署容器化应用程序非常容易,您可以立即启动并运行。使用Docker您可能会很快发现,一旦部署,容器在存储和包含数据的方式上会受到限制,而这种限制存在于容器文件系统中。Docker容器使用联合文件系统(UFS),它涉及一系列只读层,包括顶部的最终读写层。当容器不需要保存数据时,系统工作得最好。但是,如果您正在部署需要能够持久保存数据的服务(例如面向数据库的应用程序)怎么办?欢迎使用卷Docker卷是驻留在主机文件系统上的目录(或文件集合)。它不是容器UFS的一部分。正是在这些卷中,容器能够保存数据。使用dockervolume命令,可以轻松管理卷以扩展容器,使其远远超出其基本功能。让我们学习如何部署一个新的容器,并将卷附加到主机上的特定目录,以便容器和卷中的数据保持同步。我将在UbuntuServer18.04上进行演示,但只要平台支持Docker,过程都是相同的(无论分布如何)。假设您已启动并运行Docker,并且可以部署容器。创建主机数据卷的第一步是创建一个新目录来放置该卷。为此,打开一个终端窗口并执行命令:mkdir~/container-data您要确保刚刚创建的目录位于Docker用户可访问的位置(具有读写权限)。创建此目录后,可以在其中安装卷。假设你想部署一个基于Ubuntu官方镜像的容器,其中包含一个名为/data的目录。要部署将内部/data目录连接到主机目录~/container-data中的卷的容器,您将执行命令:dockerrun-dit-P--nameubuntu-test-v~/container-data:/dataubuntu上面的命令细分如下:dockerrun是主要的命令,也就是说我们会在新的容器中运行命令。-dit中的d表示分离模式,它确保可以将bash或sh分配给伪终端。-P将容器端口发布到主机。-name表示后跟新容器的名称。-v表示后面有卷。ubuntu是用于容器的图像。命令完成后,您将获得容器ID(图A)。请务必记住ID的前四个字符,您将需要它来访问容器bash提示符。图A.我们部署的容器您现在已经部署了一个基于官方Ubuntu映像的容器,其中/data目录安装在~/container-data中的主机卷上。试卷不妨试一下这篇试卷。如果你忘记了容器的ID,执行命令dockerps-a可以看到它(图B)。图B:我们刚刚部署的容器列表使用以下命令访问刚刚部署的容器:dockerattachID其中ID是已部署容器的前四个字符。您现在应该会发现自己处于容器内的bash提示符下(图C)。图C:新容器的bash提示执行命令ls/,你会看到/data目录已经添加到Ubuntu容器中。您可能希望使用此命令在该目录中创建一个测试文件:touch/data/test创建测试文件后,在主机上打开另一个终端窗口并执行命令ls~/container-data。您应该会在该目录中看到测试文件(图D)。图D:我们在容器内创建的测试文件可以在主机上的卷中看到您刚刚通过主机上的卷部署了具有持久存储的容器。数据库卷假设您要为数据库创建卷。为此,首先部署MySQL数据库Docker容器并指示它使用名为mysql-data的持久存储卷。使用此命令执行此操作:dockerrun--namemysql-test-vmysql-data:/var/lib/mysql-eMYSQL_ROOT_PASSWORD=passwd-dmysql:latest在上面的命令中,-e参数选项告诉Docker后面是环境变量。使用以下命令访问容器的bash提示符:dockerexec-itID/bin/bash其中ID是您刚刚部署的容器ID的前四个字符。使用此命令列出容器的/var/lib/mysql目录的内容:ls/var/lib/mysql记下内容,并使用此命令退出容器:exit现在,使用此命令检查内容主机的挂载卷:sudols/var/lib/docker/volumes/mysql-data/_data你应该会在两个目录中看到相同的内容(图E)。图E:我们的MySQL数据与主机卷同步您现在拥有一个基于MySQL的容器,其持久存储安装在主机的卷中。这就是Docker容器和宿主机之间共享数据的全部方法。有了卷,这项任务不仅简单,而且非常灵活。原标题:DockerBasics:HowtoShareDataBetweenaDockerContainerandHost,作者:JackWallen