一套软件系统的整个生命周期中,其中超过80%的时间都是在运维。运维中有几块不可缺,其中监控和日志,虽然没有这么复杂,但却是运维的基础。

docker的出现,颠覆了原基础架构以及应用部署的模式。今天聊一下docker环境的日志。

我们先准备个测试环境

先在我们的docker host上起一个tomcat的容器

输入命令docker search tomcat

Docker日志那点事_第1张图片

我们选择STARS最高的一个镜像

然后pull下来

docker pull docker.io/tomcat

docker-pull-tomcat

我们使用docker p_w_picpaths 找到下载完成的镜像

Docker日志那点事_第2张图片

现在我们启动一个tomcat的容器

docker run -d -p 8080:8080 docker.io/tomcat

启动成功后,我们可以看到完整的容器id

7df4f4428df4290497abf70c8fee013f405ce22c61c3ca797c57dfd155e28545

p_w_picpath

我们也可以使用docker ps 查看我们刚才启动的容器

但是container id 会被阶段,显示并不完整,但是实际上显示部分已经是唯一的了

docker ps --no-trunc 命令可以不截断完整的id

p_w_picpath

大家要记住这个id号,这个很重要

基础环境已经准备好了。

我们现在要开始查看这个容器的日志了

我们输入(命令格式docker logs container-id)docker logs 7df4f4428df4290497abf70c8fee013f405ce22c61c3ca797c57dfd155e28545

我们会看到有日志打出,屏幕上显示的都是tomcat的日志

Docker日志那点事_第3张图片

使用docker logs还有几个参数可以选择 例如 –t 是显示时间,时间会精确到秒后9位

p_w_picpath

而使用 docker logs –f 则是实时输出日志

重点来了,为什么容器内的日志可以通过docker logs查看呢?是因为容器内应用的日志都输出到标准输出了(打到console,或者打到屏幕上,这样说比较容易理解)

如果你的日志还是写在文件里,那是无法通过docker logs查看的!

问题来了,如果有人说:我不想通过docker logs查看日志,我想直接拿到日志文件,那文件在哪里呢?

文件在这个位置

/var/lib/docker/containers/

进入这个目录我ls了一下,然后我就惊呆了! 这都是什么呀

我的确进入了一个计算机的世界!

别急,这些都是以容器id为名称的文件夹,您需要的日志都在这些文件夹里

Docker日志那点事_第4张图片

还记得我刚才让您记住的容器id么? 我们cd 进入这个目录

p_w_picpath

还真有这个目录!好神奇

ls一下,发现有一个*-json.log的文件

大哥您要的日志文件在此!

p_w_picpath

当然如果您公司内部有统一的日志收集系统例如splunk,elk什么,也可以抽取这个位置的日志。

回到刚才中间的聊到的一个问题,如果您的日志写在本地怎么办?

有2个方法,也许不止

1,您可以exec到容器内去查看,具体查看的方法与您之前直接在电脑上查看日志是一样的。

2,您可以在容器启动的时候挂在一个volume,可以将日志写入到这volume上,您可以直接到这个volume里上查看日志。

今天就到这里

客官,这是您的docker 请用好。