简介

Dozzle 是一个 Docker 日志查看器,它提供了一个 Web 界面,可以方便地查看 Docker 容器的日志。Dozzle 可以在任何支持 Docker 的平台上运行,包括本地机器、云服务器和容器编排平台等。Dozzle 的特点包括:

  • 界面简洁美观,易于使用。
  • 支持多个容器的日志查看,可以快速切换。
  • 支持容器日志的实时查看,可以随时更新日志。
  • 支持搜索和过滤日志,可以快速定位关键信息。
  • 支持导出日志,方便进行分析和存档。

Dozzle 是一个开源工具,可以在 GitHub 上找到它的源代码和文档。

file

开始使用

docker

docker run --detach --volume=/var/run/docker.sock:/var/run/docker.sock -p 9999:8080 amir20/dozzle

docker-compose(推荐)

version: "3"
services:
  dozzle:
    container_name: dozzle
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 9999:8080

进阶功能

身份验证

Dozzle supports multi-user authentication by setting --auth-provider to simple. In this mode, Dozzle will try to read /data/users.yml.

users:
  # "admin" here is username
  admin:
    name: "Admin"
    # Just sha-256 which can be computed with "echo -n password | shasum -a 256"
    password: "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
    email: me@email.net

远程多服务器容器查看

先打开docker容器的远程调用

## 修改docker配置文件
vim /usr/lib/systemd/system/docker.service
## 修改如下数据
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
## 重新载入,重启docker
systemctl daemon-reload
systemctl restart docker.service
## 验证
docker -H tcp://x.x.x.x:2375 version

Remote hosts can be configured with --remote-host or DOZZLE_REMOTE_HOST. All certs must be mounted to /certs directory. The /cert directory expects to have /certs/{ca,cert,key}.pem or /certs/{host}/{ca,cert,key}.pem in case of multiple hosts.

version: "3"
services:
  dozzle:
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /path/to/certs:/certs
    ports:
      - 8080:8080
    environment:
      DOZZLE_REMOTE_HOST: tcp://167.99.1.1:2376,tcp://167.99.1.2:2376

--remote-host supports host labels by appending them to the connection string with |.

非docker logs日志查看

Mounting Local Log Files with Alpine

Dozzle reads any output stream. This can be used in combination with alpine to tail a mounted file. An example of this is as follows:

version: "3"
services:
  dozzle-from-file:
    container_name: dozzle-from-file
    image: alpine
    volumes:
      - /var/log/system.log:/var/log/stream.log
    command:
      - tail
      - -f
      - /var/log/stream.log     
    network_mode: none
    restart: unless-stopped

如果你的日志文件是动态生成的,或者以当天的日期结尾的日志。但是docker-compose不支持volume直接定义变量,但是你可以使用volume或者提前定义路径的方式来使用。

Docker Compose does not support executing shell commands directly within the YAML file. To dynamically set the volume name based on the current date, you'll need to use an entrypoint script or a wrapper script.

Here's how you can achieve it:

使用内置脚本entrypoint

# 在 Docker Compose 文件中添加以下行:
entrypoint: /entrypoint.sh
# 在容器内部创建 /entrypoint.sh 脚本,该脚本可以设置环境变量并启动您的应用程序。
#!/bin/sh
export DATE=${DATE:-$(date +%Y-%m-%d)}
exec /your/app

示例参考:

1、在主机上创建dockerrunner.sh文件

export LOG_FILE="/var/DockerVolumes/log/eclouddefault/eclouddefault/dbe01ba1-d105-482b-939d-526735cf2e34/03c5e12f-6a1f-494b-ab7e-a470e4e64e5f/d9f9dae6-c6ab-49df-9399-0240b469bdd9/"

# Append the current date to the log file name
LOG_FILE="$LOG_FILE/wrapper.$(date +%Y%m%d).log"

# Run Docker Compose with the dynamically generated log file name
docker-compose up -d

2、权限

sudo chmod +x dockerrunner.sh

3、创建yaml文件

version: "3"
services:
  dozzle-from-file:
    container_name: dozzle-from-tpframecs
    image: alpine
    volumes:
      - "${LOG_FILE}:/var/log/wrapper.log:ro"
    command:
      - tail
      - -f
      - /var/log/wrapper.log
    network_mode: none
    restart: unless-stopped

4、运行dockerrunner.sh文件

5、定期刷新功能

you can use the system's cron job scheduler

## 查看定时任务
which cron
## 安装配置定时任务
sudo yum install cronie
## 启动并配置自启动
sudo systemctl start crond
sudo systemctl enable crond
  1. Open your crontab file for editing by running:
bashCopy code
crontab -e
  1. Add an entry to schedule the execution of your script daily. For example, to run it at midnight every day, add the following line to the crontab:
## bashCopy code
0 0 * * * /path/to/rundocker.sh

Replace /path/to/rundocker.sh with the actual path to your script.

  1. Save and exit the crontab editor. The changes will be automatically applied.

This configuration will execute the rundocker.sh script daily at midnight. Adjust the timing as needed according to your requirements.

  • centos 默认调度应用

使用 systemd 定时器来定期执行脚本或命令涉及创建一个 .timer 文件和一个 .service 文件,然后启用和配置定时器。以下是基本的步骤:

创建 Service 文件: 首先,创建一个描述你要执行的命令或脚本的 systemd 服务文件。这个文件通常存储在/etc/systemd/system/目录中,以 .service 结尾。例如,创建一个名为my_script.service的文件:


sudo nano /etc/systemd/system/my_script.service

在文件中添加类似以下内容的内容,用你自己的脚本路径和命令替换:

[Unit]
Description=My Script Service
After=network.target

[Service]
Type=simple
ExecStart=/path/to/your/script.sh

[Install]
WantedBy=multi-user.target

创建 Timer 文件: 现在,创建一个描述定时执行的 systemd 定时器文件。这个文件通常存储在 /etc/systemd/system/ 目录中,以 .timer 结尾。例如,创建一个名为 my_script.timer 的文件:

sudo nano /etc/systemd/system/my_script.timer

在文件中添加类似以下内容的内容,根据你的需求调整时间设置:

[Unit]
Description=Run My Script Weekly

[Timer]
#### OnCalendar定义了你的脚本应该在何时执行
OnCalendar=weekly
#### 是否启用定时器
Persistent=true

[Install]
WantedBy=timers.target

启用定时器和服务: 使用 systemctl 命令启用定时器和服务。

sudo systemctl daemon-reload  # 重新加载 systemd 配置
sudo systemctl enable my_script.timer  # 启用定时器
sudo systemctl enable my_script.service  # 启用服务
sudo systemctl start my_script.timer  # 启动定时器

确保定时器和服务都已启用和运行。

这样,你的脚本将会在指定的时间间隔内定期执行。你可以通过编辑 .timer 文件来更改执行时间,通过编辑 .service 文件来更改执行的命令或脚本。

使用volume外置卷功能挂载

要使用 Docker Compose 创建一个 volume 并将其挂载到外部目录,你可以在 docker-compose.yml 文件中定义 volume 并将其与服务一起使用。以下是一个简单的示例:

假设你有一个名为 myapp 的应用程序,它需要将数据存储在外部目录 /path/to/external/data 中。你可以按照以下步骤操作:

  1. docker-compose.yml 文件中定义 volume 和服务。
  2. 将服务的挂载路径指向该 volume。

下面是一个示例 docker-compose.yml 文件:

version: '3'

services:
  myapp:
    image: myapp_image
    volumes:
      - myapp_data:/app/data

volumes:
  myapp_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /path/to/external/data

在这个示例中:

  • myapp 是你的服务名称。
  • myapp_image 是你应用程序的 Docker 镜像。
  • myapp_data 是 volume 的名称。
  • volumes 部分中,myapp_data volume 被定义为本地驱动,类型为 none,并将其绑定到外部目录 /path/to/external/data

现在,当你使用 docker-compose up 启动你的服务时,/app/data 目录将被挂载到 /path/to/external/data,并且 myapp 服务将能够在该目录中读取和写入数据。

请记住,在运行 docker-compose up 命令之前确保 /path/to/external/data 目录已经存在,否则 Docker 将会自动创建一个空目录。

引用

官方文档 阿里云实战