介绍
一般来说,Docker 容器是短暂的,运行的时间是需要在容器中发出的命令完成的。
Docker 卷可用于在主机系统和 Docker 容器之间共享文件,例如,假设您想要使用官方的 Docker Nginx 图像并保留 Nginx 日志文件的永久副本,以便以后进行分析。
在本教程中,我们将探索如何在主机上从容器内部获取数据。
前提条件
要遵循这篇文章,你需要一个 Ubuntu 18.04 服务器,具有以下内容:
- 具有
sudo
特权的非 root 用户,遵循 Ubuntu 18.04 初始服务器设置(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-18-04)指南。 - Docker 安装在 如何在 Ubuntu 18.04 上安装和使用 Docker 中的 步骤 1和 步骤 2的说明下。
如果您对 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
。
更有趣的是,如果我们在主机上的~/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 数据量,以便在容器和主机文件系统之间共享信息,这在开发环境中很有用,需要访问日志来调试。