docker默认日志管理
docker部署完成后,运行docker info命令,如下图所示:
上图中红框内的”json-file”,指的是当启动某个容器时,如果不特别指定容器所采用的log驱动,则使用json-file这种方式。当采用这种方式的容器在创建时,docker daemon会首先在宿主机上创建一个与这个容器相关联的文件,当容器运行时,docker daemon会转储容器在运行过程中向stdout与stderr输出的内容,并保存在刚才创建的那个文件中。当在宿主机中运行“docker logs -f 容器名”时,docker daemon就会跟踪宿主机文件的内容,并显示在终端上。
以nginx为例,首先看一下Dockerfile文件,会发现如下内容:
# forward request and error logs to docker log collectorRUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
nginx默认会将日志输出到文件/var/log/nginx/access.log与/var/log/nginx/error.log。在以上代码中,这两个文件分别被软件链接到了stdout与stderr,实际结果就相当于nginx直接将日志输出到标准输出与标准错误输出。如果在nginx的Dockerfile中没有以上内容的话,则nginx在运行过程中,实际会把日志写入到容器的可读写层中而不是容器的stdout与stderr,这样json-file驱动就拿不到到数据,运行docker logs命令的话也不会看到日志输出。
以上是docker默认管理容器日志的方式。在docker集群中,容器的数量很多,容器的生命周期及运行时进驻的node也是动态变化的,以上方式并不能满足大规模docker集群的日志管理要求。
创建docker swarm集群
参考创建包含三个node的docker集群,结果如下图所示:
原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/247.html