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

0
276

介绍

一般来说,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

这应该显示:

203.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容器之间如何共享数据指南可以帮助。

发表评论