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

介绍

一般来说,Docker 容器是短暂的,运行的时间是需要在容器中发出的命令完成的。

Docker 卷可用于在主机系统和 Docker 容器之间共享文件,例如,假设您想要使用官方的 Docker Nginx 图像并保留 Nginx 日志文件的永久副本,以便以后进行分析。

在本教程中,我们将探索如何在主机上从容器内部获取数据。

前提条件

要遵循这篇文章,你需要一个 Ubuntu 18.04 服务器,具有以下内容:

如果您对 Docker 是新手,则 The Docker Ecosystem系列提供了关键概念的详细概述。

<$>[注] **注:**虽然前提条件为在Ubuntu 18.04上安装Docker提供指示,但本文中的Docker数据量的docker命令应该在Docker安装时在其他操作系统上工作。

步骤 1 - 连接一个体积

以下命令将创建一个名为nginxlogs的目录,并将其绑定到容器中的/var/log/nginx:

1docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

让我们花一会儿来仔细研究这个命令:

  • --name=nginx 命名容器,所以我们可以更容易地参考它。
  • -d 将过程分离并在背景中运行。否则,我们只会观看一个空的 Nginx 提示,直到我们杀死了 Nginx 才能够使用这个终端。
  • -v ~/nginxlogs:/var/log/nginx 设置一个连接卷,将 /var/log/nginx 目录从 Nginx 容器内部连接到 host 机器上的 ~/nginxlogs 目录。 Docker 使用一个 : 将主机的路径从容器路径分开,主机路径总是先到达。 `-ng-p

<$>[注] 注: -v 旗是非常灵活的. 它可以结合或命名卷,只需对语法进行轻微调整。 如果第一个参数以 /~/ 开头,你正在创建一个结合。

  • -v /path:/path/in/container 安装了主机目录, /path/path/in/container
  • -v path:/path/in/container 创建了一个名为 path 的卷,与主机无关。

有关命名卷的更多信息,请参阅 如何在Docker容器之间共享数据 <$>

步骤 2 – 访问主机上的数据

我们现在有 Nginx 的副本在我们机器上的 Docker 容器中运行,我们的主机的端口5000直接地图到 Nginx 的端口80的副本。

在 Web 浏览器中加载地址,使用您的服务器的 IP 地址或主机名和端口号:http://your_server_ip:5000

Nginx Start Page

更有趣的是,如果我们在主机上的~/nginxlogs目录中查看,我们会看到由容器的nginx创建的access.log,该目录将显示我们的请求:

1cat ~/nginxlogs/access.log

这应该显示一些像:

1[secondary_label Output]
2203.0.113.0 - - [11/Jul/2018:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-"
3"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36
4(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

如果你对~/nginxlogs文件夹进行任何更改,你也可以从Docker容器内部实时查看它们。

结论

在本教程中,我们展示了如何创建 Docker 数据量,以便在容器和主机文件系统之间共享信息,这在开发环境中很有用,需要访问日志来调试。

Published At
Categories with 技术
comments powered by Disqus