使用 DPanel 优雅地管理 Docker 容器

对于每一位 Self-hosted 爱好者而言,Docker 是简化应用部署的神器。但当服务器上运行的容器越来越多,散落在各处的 docker-compose.yaml 文件就成了新的问题。
如果你也为此烦恼,那么是时候认识一下 DPanel 了 —— 一个轻量化的容器管理面板。

为什么需要一个 Docker 管理面板?

使用 Docker 和 Docker Compose 部署项目无疑是高效且愉快的。我们可以为每个项目创建一个独立的目录和 docker-compose.yaml 文件,实现轻松部署与环境隔离。

但随着时间的推移,你可能会遇到这些问题:

  • 管理混乱:几十个项目的配置文件散落在不同目录,想找某一个配置需要先 cd 到对应的目录。
  • 维护困难:更新一个服务的镜像版本,或是修改某个端口映射,都需要先找到对应的 yaml 文件,再手动执行命令。
  • 状态不明:无法直观地看到所有容器的运行状态、资源占用和日志信息。

为了解决这些痛点, DPanel应运而生。

DPanel 是什么?

DPanel 是一个开源、轻量化的容器管理面板。它专注于提供核心的容器管理功能,同时保持极低的资源占用(镜像约 150MB,内存占用约 20MB),可以通过容器部署,对宿主机零侵入,安全可靠。

核心亮点:

  • 轻量高效:资源占用极低,不给你的服务器增加额外负担。
  • 安全可靠:通过容器运行,无需特权,不侵入宿主机系统。
  • Compose 管理:支持多种方式添加、管理 Compose 项目
  • 功能全面:支持容器管理、日志查看、文件浏览器、快捷访问容器内终端等实用功能。
  • 多主机管理:可以通过 API (TLS) 或 SSH 方式,在一个面板中管理多台服务器的 Docker。
  • 多语言支持:原生支持中、英、日多国语言,无需额外配置。

如何部署 DPanel

部署 DPanel 非常简单,推荐直接使用 Docker Compose 进行部署。

如果你的服务器尚未安装 Docker 和 Docker Compose ,可以参考以下教程:

第一步:选择版本

DPanel 提供两个版本:

  • dpanel/dpanel:lite (轻量版): 不包含 Nginx,适合宿主机上已经安装了反向代理(如 Nginx )的用户。
  • dpanel/dpanel:latest (标准版): 内置 Nginx,可以为你自动处理域名绑定和 SSL 证书,适合全新环境。

本文以 lite 版本为例,因为它能更好地与现有环境集成。

第二步:创建并配置 compose.yaml

首先,为 DPanel 创建一个工作目录并进入:

1
2
mkdir -p /opt/dpanel
cd /opt/dpanel

然后,在该目录下创建一个 compose.yaml 文件:

1
2
3
4
5
6
7
8
9
10
services:
dpanel:
image: dpanel/dpanel:lite
container_name: dpanel
restart: always
ports:
- "8807:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 映射 Docker Socket
- ./dpanel:/dpanel # 将面板数据持久化到当前目录下的 dpanel 文件夹

提示docker.sock 的路径通常无需修改。如果你不确定,可以通过下面命令确认

1
docker context inspect $(docker context show) --format '{{.Endpoints.docker.Host}}'

配置解析:

  • ports: 将容器的 8080 端口映射到主机的 8087 端口。

第三步:启动 DPanel

/opt/dpanel 目录下,执行以下命令启动服务:

1
docker compose up -d

第四步:初始化

现在,通过浏览器访问 http://<你的服务器IP>:8807。首次访问会要求你创建管理员账号和密码,设置完成后即可进入管理后台。

dpanel-first-login

核心功能

进入面板后,你会看到一个简洁的仪表盘,展示了服务器和容器的概览信息。

dpanel-top-nav

容器管理

容器管理 页面,你可以直观地看到所有容器的运行状态、端口映射等。对于每个容器,你都可以进行快捷操作,如:

  • 查看日志:实时追踪容器输出。
  • 进入终端:直接在浏览器中打开容器的 Shell。
  • 文件管理:浏览和管理容器内的文件。

Compose 文件管理

Compose 页面,可以方便地管理 compose.yaml 文件,不过这需要我们对 docker-compose.yaml / compose.yaml 文件进行迁移,可以查看下面 迁移现有的 Docker Compose 项目 部分

镜像管理

镜像管理 管理页面我们可以查看当前主机中的镜像文件,以及所对应的文件是否正在被使用。可以进行 清理、同步、批量删除,也可以导出镜像

还可以进行 仓库管理,对于中国大陆地区非常有帮助。

存储与网络管理

  • 在存储管理页面可以直观地查看每个容器使用的匿名卷,以及是否在使用中
  • 网络管理页面可以查看 Docker 容器对应的网络

迁移现有的 Docker Compose 项目

我们需要将之前的 Docker Compose 管理的项目迁移至 DPanel 目录下才可以使用 DPanel 进行管理。

迁移已有的项目非常简单,只需两步:

  1. 移动并重命名:将你原有的项目文件夹整个移动到 DPanel 的工作目录(/opt/dpanel/)下的 dpanel/compose 目录中,并将其 docker-compose.yaml 文件重命名为 compose.yaml

    例如,你有一个项目位于 /root/my-project

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 1. 创建目录
    mkdir -p /opt/dpanel/dpanel/compose

    # 2. 停止正在运行的服务(如果还在运行)
    cd /root/my-project
    docker compose down

    # 3. 移动整个项目目录
    mv /root/my-project /opt/dpanel/dpanel/compose

    # 4. 复制配置文件
    cd /opt/dpanel/dpanel/compose/my-project
    mv docker-compose.yaml compose.yaml
  2. 在面板中管理:刷新 DPanel 页面,它会自动发现 my-project
    现在只需要点击容器名称即可在面板中对它进行启动、停止、编辑等操作了。
    dpanel-compose-run

通过这种方式,你可以将所有零散的项目统一到 DPanel 中进行管理。

迁移之前的路径示意:

1
2
3
4
5
/
├─ project1/
│ └─ docker-compose.yaml
└─ project2/
└─ docker-compose.yaml

迁移之后:

1
2
3
4
5
6
7
/opt/dpanel/
└─ dpanel/
└─ compose/
├─ project1/
│ └─ compose.yaml
└─ project2/
└─ compose.yaml

与直接使用 docker compose 会自动查询目录下的 compose.yaml / compose.yaml docker-compose.yaml docker-compose.yaml 四个文件不同,DPanel 目前仅支持 compose.yaml 文件

资源占用详情

我们可以使用 docker stats 或是 docker compose stats 查看容器的运行资源占用详情

1
2
cd /opt/dpanel
docker compose stats

输出如下,可以看到只使用了 22.2MiB 的内容。

1
2
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT    MEM %     NET I/O          BLOCK I/O       PIDS 
5340fef5727d dpanel 0.00% 22.2MiB / 7.755GiB 0.28% 306kB / 2.68MB 4.1kB / 115kB 9

添加远程服务器

DPanel 支持在一个面板中管理多台主机上的 Docker 实例。推荐使用 SSH 方式进行连接,既安全又免去了繁琐的 Docker Api 证书配置。

操作步骤如下:

第一步:准备远程服务器用户

我们应该使用一个非 root 用户进行连接。

  1. 创建新用户
    如果你的远程服务器上没有合适的非 root 用户,可以新建一个。例如,创建一个名为 dpaneluser 的用户:

    1
    sudo adduser dpaneluser

    根据提示设置密码即可。

  2. 将用户添加到 docker
    为了让新用户有权限操作 Docker,需要将其加入 docker 用户组:

    1
    sudo usermod -aG docker dpaneluser

    提示:执行此命令后,用户需要重新登录(或新开一个 SSH会话)才能使组权限生效。

  3. 验证权限
    切换到新用户,并尝试执行一条 Docker 命令来验证权限是否配置成功。

    1
    su - dpaneluser

    然后执行:

    1
    docker ps

    如果命令成功返回容器列表(即使是空的),说明权限已正确配置。

第二步:准备 SSH 密钥

  1. 生成 SSH 密钥
    运行 DPanel 的服务器(或你的本地电脑)上打开终端,执行以下命令生成密钥对。如果已存在密钥,可以跳过此步。

    1
    ssh-keygen -t ed25519 

    第一步输入保存名称后,一路按回车键接受默认设置即可,将生成以下两个文件

    • id_ed25519 : 密钥文件,相当于密码,不可以公开给任何人
    • id_ed25519.pub : 公钥文件,保存在服务器中后表示可以使用上面的密钥进行认证。
  2. 将公钥复制到远程服务器
    使用 ssh-copy-id 命令将公钥安装到远程服务器的目标用户上。

    1
    ssh-copy-id dpaneluser@<远程服务器IP>

    此过程需要输入一次 dpaneluser 用户的密码。

    如果已禁用 SSH 密码登录,需要手动复制 id_ed25519.pub 至对应用户的 ~/.ssh/authorized_keys 文件中

第三步:在 DPanel 中配置连接

在 DPanel 界面,导航至 系统 > 多服务端,然后点击 添加服务端

  • 首先输入 名称标识
  • 连接方式选择 SSH
  • 打开 启用独立Compose目录 :以便在访问不同服务器时只查看对应的 compose 文件。
  • 填入远程服务器的 IP 地址、SSH 端口。
  • 验证方式强烈推荐使用 私钥认证,它比密码更安全、更便捷。
  • 填写 用户名,手动填写或是导入 密钥文件

最后点击确定保存,保存时 DPanel 会尝试连接远程服务器,如果连接失败,配置将无法保存,需要检查修改配置。

添加成功后,你就可以通过 DPanel 顶部的下拉菜单在不同的 Docker 服务端之间轻松切换了。

安全设置

设置 Nginx 反代

为了安全地通过 HTTPS 访问你的记账应用,强烈建议使用 Nginx 等反向代理工具。

以下是一个 Nginx 的配置示例。你需要为你的域名申请一个 SSL 证书(例如通过 Let’s Encrypt)。

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
# /etc/nginx/sites-enable/dpanel.yourdomain.com.conf
server {
listen 80;
server_name dpanel.yourdomain.com;

# 将所有 HTTP 请求重定向到 HTTPS
location / {
return 301 https://$host$request_uri;
}
}

server {
listen 443 ssl http2;
server_name dpanel.yourdomain.com;

# SSL 证书路径 (请替换为你的实际路径)
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;

# 安全相关的 SSL 设置 (推荐)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
ssl_prefer_server_ciphers off;

location / {
proxy_pass http://127.0.0.1:8807;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}

限制容器端口访问

在设置了 Nginx 反代后,我们可以限制 Docker 的端口仅允许本地主机访问,从而避免将端口暴漏在公网中

1
2
ports:
- "8807:8080"

修改为

1
2
ports:
- "127.0.0.1:8807:8080"

然后重新启动 Docker 容器

1
2
docker compose down
docker compose up -d

总结

DPanel 以其轻量、安全和对 Docker Compose 的良好支持,为 Self-hosted 玩家提供了一个管理容器的绝佳方案。

它不仅能帮你理清混乱的 yaml 文件,还能让你对服务器上的所有容器状态一目了然。如果你正在寻找一个简单高效的 Docker 图形化工具,DPanel 绝对值得一试。