介绍
一般来说,Docker容器是短暂的,运行只要在容器中发出的命令完成就可以运行。默认情况下,容器内创建的任何数据只能在容器内部使用,并且只能在容器运行时使用。 Docker卷可用于在主机系统和Docker容器之间共享文件。 例如,假设您想使用官方的Docker Nginx映像,并保留Nginx日志文件的永久副本,以便稍后分析。 默认情况下,
nginx
Docker图像将记录到
/var/log/nginx
DockerNginx的容器
内的目录。通常它不能从主机文件系统访问。 在本教程中,我们将探讨如何在主机上访问容器内部的数据。
先决条件
要跟随这篇文章,你将需要一个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
。你应该看到:
更有趣的是,如果我们在看
~/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容器之间如何共享数据指南可以帮助。