推荐一款实时查看 Docker 容器日志的神器 Dozzie

Posted by Mike on 2020-12-02

介绍一款使用了几个月的开源小工具,Dozzle。它是一款轻量、简单的容器日志查看工具。

项目地址:https://dozzle.dev/

本篇将简单介绍如何使用它,包括如何快速从源码构建它。

写在前面

这款工具相比较一些重量级的工具,比如 ELK 系列而言,实在是太轻量了,容器版本不过 10MB 左右大小。

主要原因是,它不存储和处理日志,仅仅提供实时查看功能,类似我们日常使用 ps、top 一样,使用它可以减少我们在服务器上低效执行 docker logs 或者 docker-compose logs 等类似命令的执行。

先来聊聊一般情况下,怎么用这个小工具。

一般场景

一般场景下,启动它,提供一个我们可以访问的端口,和其他多数优秀的开源项目一样简单,只需要一条简单的命令:

1
docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock:ro -p 8888:8080 amir20/dozzle:latest

这里和官方文档不同的是,在挂载 docker.sock 的时候,因为我们并不需要去操作该文件,所以建议加上 ro 只读的限制,避免出现一些我们不希望出现的意外情况,尤其是使用 latest 版本的时候。当然,实际使用中还是建议锁定镜像版本,并认真审查项目相关源码。

当然,考虑到可维护性,我们可以把它写成 compose 配置文件:

1
2
3
4
5
6
7
8
9
10
version: "3"

services:
dozzle:
container_name: dozzle
image: amir20/dozzle:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- 8888:8080

将上面的内容保存为 docker-compose.yml ,使用 docker-compose up 启动程序;或者前文提到的 docker run 命令之后,我们便可以通过浏览器访问 localhost:8888 来查看当前相同机器(容器网卡)内的容器的实时日志,以及已停止容器的历史运行日志了。

因为容器的盛行,许多时候我们需要同时查阅多个服务的日志状态,Dozzle 支持“分屏”查看,还是很方便的。

当然,还有常用的关键词搜索过滤、文本高亮。

如何从源码构建应用

实际使用过程中,我们可能需要定制代码,来实现一些特别的需求,作者很贴心的提供了多阶段构建脚本,不过估计不少同样身处国内的同学会因为网络客观原因无法顺利构建,这里记录一下如何简单快速的完成应用构建。

首先是获取源代码:

1
git clone https://github.com/amir20/dozzle.git --depth=1 --branch=master

使用 --depth 和 --branch 可以有效减少获取代码时的传输量,从而提高你的代码下载速度。

接着是针对原始的 Dockerfile 进行调整,让 Alpine 、Node 、Go 的相关依赖、软件获取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
diff --git a/Dockerfile b/Dockerfile
index 9bce54e..eda3672 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,15 @@
# Build assets
-FROM node:current-alpine as node
+FROM node:14.15.0-alpine as node
+
+ENV LANG en_US.UTF-8
+ENV LANGUAGE en_US.UTF-8
+ENV LC_ALL=en_US.UTF-8
+
+RUN echo '' > /etc/apk/repositories && \
+ VER=$(awk -F= '$1=="VERSION_ID" { print $2 ;}' /etc/os-release | cut -d . -f 1,2) && \
+ echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v${VER}/main" >> /etc/apk/repositories && \
+ echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v${VER}/community" >> /etc/apk/repositories && \
+ echo "Asia/Shanghai" > /etc/timezone

RUN apk add --no-cache git openssh python make g++ util-linux

@@ -7,6 +17,7 @@ WORKDIR /build

# Install dependencies
COPY package*.json yarn.lock ./
+RUN yarn config set registry https://registry.npm.taobao.org/
RUN yarn install --network-timeout 1000000

# Copy config files
@@ -20,6 +31,19 @@ RUN yarn build

FROM golang:1.15-alpine AS builder

+ENV LANG en_US.UTF-8
+ENV LANGUAGE en_US.UTF-8
+ENV LC_ALL=en_US.UTF-8
+
+RUN echo '' > /etc/apk/repositories && \
+ VER=$(awk -F= '$1=="VERSION_ID" { print $2 ;}' /etc/os-release | cut -d . -f 1,2) && \
+ echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v${VER}/main" >> /etc/apk/repositories && \
+ echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v${VER}/community" >> /etc/apk/repositories && \
+ echo "Asia/Shanghai" > /etc/timezone
+
+RUN go env -w GO111MODULE=on && \
+ go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
+
RUN apk add --no-cache git ca-certificates
RUN mkdir /dozzle

上面是我一般会做的镜像“加速”构建调整,执行下面的构建命令,稍等片刻,便能获得属于你的 Dozzle。

1
docker build -t dozzle:custom --build-arg TAG=custom .

最后

希望本篇内容能解救不停登录服务器查看日志,或者耐着性子等云平台日志中心日志刷新的你。

本文转载自:「苏洋博客」,原文:https://tinyurl.com/y5bsr5zq,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com