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

介绍

一般来说,Docker容器是短暂的,运行只要在容器中发出的命令完成就可以运行。默认情况下,容器内创建的任何数据只能在容器内部使用,并且只能在容器运行时使用。 Docker卷可用于在主机系统和Docker容器之间共享文件。 例如,假设您想使用官方的Docker Nginx映像,并保留Nginx日志文件的永久副本,以便稍后分析。 默认情况下, nginxDocker图像将记录到 /var/log/nginxDockerNginx的容器 的目录。通常它不能从主机文件系统访问。 在本教程中,我们将探讨如何在主机上访问容器内部的数据。

先决条件

要跟随这篇文章,你将需要一个Ubuntu 16.04服务器与以下: 如果你是新的Docker, Docker生态系列提供了详细的介绍。 注:即使先决条件给出了在Ubuntu 16.04安装Docker指令, docker本文中泊坞数据量的命令应该在其他操作系统上工作,只要安装了Docker。

第1步 - 绑定卷

以下命令将创建一个目录调用 nginxlogs在本地主机用户的主目录下,并将其绑定装入到 /var/log/nginx容器中:
docker 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的容器内目录复制到~/nginxlogs目录主机上。 Docker使用:从容器路径拆分主机的路径,主机路径始终是第一位的。
  • -p 5000:80设置一个端口转发。 Nginx容器默认侦听端口80。此标志将容器的端口80映射到主机系统上的端口5000。
  • nginx指定容器应该从Nginx的形象,发出命令建立nginx -g "daemon off开始Nginx的。
注: -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:// 203.0.113.0 :5000 。你应该看到: Nginx起始页 更有趣的是,如果我们在看 ~/nginxlogs主机上的目录,我们将看到 access.log由容器的创建 nginx ,它会显示我们的要求:
cat ~/nginxlogs/access.log
这应该显示:
Output203.0.113.0 - - [11/Nov/2016:00:59:11 +0000] "GET / HTTP/1.1" 200 612 "-" 
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36" "-"

如果你做任何更改 ~/nginxlogs文件夹,你就可以看到他们从Docker容器内实时为好。

结论

在本教程中,我们演示了如何创建Docker数据卷以在容器和主机文件系统之间共享信息,这在开发环境中很有用,在开发环境中,需要访问日志以进行调试。要了解更多关于容器之间共享持久性数据,在 Docker容器之间如何共享数据指南可以帮助。
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏