在云原生技术飞速发展的当下,Docker凭借其轻量、可移植、隔离性强的特性,已成为应用部署的首选工具之一。无论是用于个人生产力提升的笔记工具,还是企业级的数据管理、监控平台,通过Docker都能实现“一次构建,到处运行”。近期基于Docker实践经验,介绍7款实用应用(思源笔记、OwnCloud、LibreTV、Heimdall、HertzBeat、MaxKB、Stirling-PDF、WARD)在CentOS 7云主机与Mac本地环境的Docker部署流程,同时对比不同平台的部署差异与注意事项,以下进行梳理总结。
一、环境前置说明
在开始部署前,需确保目标环境已完成Docker的基础配置,避免因环境依赖导致部署失败。
1. 通用前置条件
- Docker Engine版本:建议20.10及以上(可通过`docker -v`查看版本,CentOS 7需通过官方脚本安装,Mac直接安装Docker Desktop即可)。
- 网络权限:确保主机/本地能访问Docker Hub(拉取镜像),且目标端口未被占用(可通过`netstat -tuln`(CentOS)或`lsof -i :端口号`(Mac)检查)。
- 存储规划:云主机建议使用独立数据盘挂载目录(如`/data`),Mac优先使用用户目录(`~/`)避免Docker文件共享权限问题。
2. 平台差异核心点
对比维度 |
CentOS 7云主机 |
Mac(Apple Silicon/Intel) |
文件共享权限 |
无特殊限制,直接使用系统目录即可 |
需通过 Docker Desktop 配置共享目录(默认/Users、/tmp等,非默认目录需手动添加) |
镜像架构 |
主流为 amd64 架构,直接拉取对应镜像 |
Apple Silicon 需优先选择 arm64 镜像,无 arm64 时需开启 Rosetta 2 模拟 amd64 |
用户权限 |
需注意-u $(id -u):$(id -g)的 UID/GID 映射 |
非 root 用户启动容器可能触发权限问题,建议优先省略-u参数(后续按需调整) |
二、核心应用部署实实践(分平台)
以下按“云主机(CentOS 7)”与“Mac本地”两个维度,逐一提供完整部署命令与关键说明,重点标注平台差异点。
应用1:思源笔记(B3log/Siyuan):私有化知识库
思源笔记是一款支持Markdown、块级编辑的私有化笔记工具,通过Docker部署可实现多端同步与数据自主管控。
(1)CentOS 7云主机部署
```bash
1. 创建数据目录(建议挂载数据盘,避免系统盘满溢)
mkdir -p /data/siyuan/workspace
2. 启动容器(指定UID/GID确保数据权限一致,避免容器内权限问题)
docker run -d \
-v /data/siyuan/workspace:/siyuan/workspace \ #数据持久化目录
-p 6806:6806 \ #宿主机端口:容器端口(思源默认6806)
-u $(id -u):$(id -g) \ #映射当前用户UID/GID(CentOS推荐)
--name siyuan \ #容器名,便于后续管理
b3log/siyuan \ #镜像名(多架构支持,自动适配amd64)
--workspace=/siyuan/workspace/ \ #思源工作目录(容器内路径)
--accessAuthCode=yourAccessAuthCode #访问授权码(自定义,增强安全性,运行成功后密码即为此)
```
(2)Mac部署(关键解决权限与目录问题)
Mac环境下若使用`-u`参数可能触发容器内用户组创建权限问题,且`/data`目录非默认共享目录,需改用用户目录:
```bash
1. 创建用户目录下的数据目录(无需额外配置Docker共享)
mkdir -p ~/siyuan/workspace
2. 启动容器(省略-u参数,使用默认root权限避免权限报错)
docker run -d \
-v ~/siyuan/workspace:/siyuan/workspace \ #改用Mac用户目录,默认支持共享
-p 6806:6806 \
--name siyuan \
b3log/siyuan \
--workspace=/siyuan/workspace/ \
--accessAuthCode=yourAccessAuthCode
```
访问与验证
部署成功后,通过`http://主机IP:6806`(云主机需开放6806端口防火墙)或`http://localhost:6806`(Mac)访问,输入`accessAuthCode`即可登录。页面如下,后续不再一一截图。
应用2:OwnCloud:私有化文件同步与共享
OwnCloud是开源的企业级文件同步平台,支持WebDAV、多端客户端,部署需依赖MySQL/MariaDB数据库,此处采用“容器化数据库+应用”的架构。
(1)CentOS 7云主机部署
```bash
步骤1:部署MariaDB数据库(使用旧版本10.1.17适配OwnCloud兼容性)
docker run --name own-mysql \
-e MYSQL_ROOT_PASSWORD=owncloud \ #root密码
-d mariadb:10.1.17 #固定版本,避免新版本兼容性问题
步骤2:部署OwnCloud(关联数据库)
docker run --name owncloud \
-p 9091:80 \ #80为OwnCloud默认Web端口
-v /data/db/owncloud:/var/www/html/data \ #文件数据持久化
--link own-mysql:mysql \ #关联数据库容器(别名mysql)
-d owncloud #OwnCloud镜像(latest版本)
```
(2)Mac部署(数据库版本与目录适配)
Mac需解决两个核心问题:① MariaDB旧版本镜像拉取失败;② 目录共享权限。此处升级数据库版本至10.6,并改用用户目录:
```bash
步骤1:部署MariaDB 10.6(适配Mac架构,避免旧版本拉取失败)
docker run --name own-mysql \
-e MYSQL_ROOT_PASSWORD=owncloud \
-e MYSQL_DATABASE=owncloud \ #预创建数据库(简化初始化)
-e MYSQL_USER=owncloud \ #预创建应用用户
-e MYSQL_PASSWORD=owncloud \
-v ~/data/db/owncloud/mysql:/var/lib/mysql \ #用户目录下持久化数据库
-d mariadb:10.6
步骤2:部署OwnCloud(关联数据库,调整数据目录)
docker run --name owncloud \
-p 9091:80 \
-v ~/data/db/owncloud:/var/www/html/data \ #用户目录下存储文件
--link own-mysql:mysql \
-d owncloud
```
初始化与登录
1. 访问`http://IP:9091`(云主机)或`http://localhost:9091`(Mac),进入OwnCloud初始化页面。
2. 数据库配置:选择“MySQL/MariaDB”,数据库主机填`mysql`,数据库名、用户名、密码均为`owncloud`。
3. 管理员账号:默认可设置为`admin`/`admin`(生产环境建议使用强密码)。
应用3:LibreTV:IPTV直播与视频点播
LibreTV是轻量的IPTV客户端,支持自定义直播源,部署时需注意环境变量配置(密码保护)。
(1)CentOS 7云主机部署
```bash
直接启动,默认无密码(生产环境建议添加密码)
docker run -d \
--name libretv \
-p 8899:8080 \ #8080为LibreTV默认端口
bestzwei/libretv:latest
```
(2)Mac部署(添加密码保护,避免未授权访问)
Mac环境下需通过`-e PASSWORD`参数设置访问密码,同时确保命令格式正确(避免换行解析错误):
```bash
docker run -d \
--name libretv \
-p 8899:8080 \
-e PASSWORD=password \ #自定访问密码(必填,否则无法访问,亲测)
bestzwei/libretv:latest
```
访问验证
通过`http://IP:8899`或`http://localhost:8899`访问,输入设置的`PASSWORD`即可进入直播列表。
应用4:Heimdall:应用导航仪表盘
Heimdall是可视化的应用导航工具,可集中管理所有部署的应用入口(如思源笔记、OwnCloud),支持自定义图标与分组。
(1)CentOS 7云主机部署
```bash
创建数据目录(持久化导航配置)
mkdir -p /heimdall
启动容器(指定amd64镜像,适配云主机架构)
docker run -d \
--name=heimdall \
--restart=always \ 开机自启,适合云主机无人值守
-p 9001:80 \ HTTP端口
-p 442:443 \ HTTPS端口(可选,需后续配置证书)
-v /heimdall:/config \ 配置持久化目录
-e PUID=1000 \ 非root用户UID(避免权限问题)
-e PGID=1000 \ 非root用户GID
-e TZ=Asia/Shanghai \ 时区配置(避免时间显示异常)
linuxserver/heimdall:amd64-latest 明确amd64架构
```
(2)Mac部署(架构与目录适配)
Mac(尤其是Apple Silicon)需选择多架构镜像,避免amd64架构兼容性问题,同时改用用户目录:
```bash
创建用户目录下的配置目录
mkdir -p ~/heimdall
启动容器(使用默认镜像,自动适配arm64/amd64)
docker run -d \
--name=heimdall \
--restart=always \
-p 9001:80 \
-p 442:443 \
-v ~/heimdall:/config \ #用户目录,无需额外共享配置
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
linuxserver/heimdall #多架构镜像,自动适配Mac架构
```
配置与使用
访问`http://IP:9001`或`http://localhost:9001`,点击“Add an Application”添加已部署的应用(如思源笔记填`http://IP:6806`),实现一站式导航,通俗讲就是把应用集合起来。
修改语言地方:
添加方式为:
其他实用应用:部署(简洁版)
以下应用部署流程在CentOS 7与Mac上差异较小,仅需调整目录路径,统一提供“通用命令+平台差异说明”。
(1)HertzBeat:开源监控平台
HertzBeat支持对服务器、应用、数据库的监控,默认提供Web界面,部署简单:
```bash
通用命令(CentOS/Mac通用,端口1157为Web端,1158为采集端)
docker run -d \
-p 1157:1157 \
-p 1158:1158 \
--name hertzbeat \
apache/hertzbeat
#登录信息:默认账号admin,密码hertzbeat(首次登录建议修改)
```
- 差异点:Mac无需调整,CentOS需开放1157/1158端口防火墙。
(2)MaxKB:AI知识库助手
MaxKB是基于大模型的私有化知识库,支持文档问答,需持久化数据库数据:
```bash
CentOS 7命令(使用/data目录)
docker run -d \
--name=maxkb \
-p 8080:8080 \
-v /data/maxkb:/var/lib/postgresql/data \
1panel/maxkb
Mac命令(使用用户目录)
docker run -d \
--name=maxkb \
-p 8080:8080 \
-v ~/.maxkb:/var/lib/postgresql/data \
1panel/maxkb
```
- 访问:`http://IP:8080`(CentOS)或`http://localhost:8080`(Mac),首次登录需创建管理员账号。
(3)Stirling-PDF:全能PDF工具集
Stirling-PDF支持PDF转换、编辑、OCR,部署时需关闭安全验证(便于本地使用):
```bash
通用命令(CentOS/Mac通用,关闭安全验证)
docker run -d \
-p 8380:8080 \
-e DOCKER_ENABLE_SECURITY=false \ 关闭安全验证(本地使用推荐)
--name stirling-pdf \
frooodle/s-pdf:latest
```
- 访问:`http://IP:8380`或`http://localhost:8380`,无需登录即可使用所有功能。
(4)WARD:服务器资源监控面板
WARD是轻量的服务器CPU、内存、磁盘监控工具,支持自定义主题:
```bash
通用命令(CentOS/Mac通用,--privileged确保资源读取权限)
docker pull antonyleons/ward 先拉取镜像
docker run \
--restart unless-stopped \
-it -d \
--name ward \
-p 4000:4000 \
-e WARD_PORT=4000 \
-e WARD_THEME=dark \ 深色主题
--privileged \ 赋予特权,确保资源监控正常
antonyleons/ward
```
- 访问:`http://IP:4000`或`http://localhost:4000`,实时查看服务器资源占用。
三、部署后通用管理操作
无论CentOS 7还是Mac,部署完成后需掌握以下Docker管理命令,便于后续维护:
1. 容器状态查看与日志排查
```bash
查看所有容器状态(含已停止)
docker ps -a
查看指定容器日志(如排查Heimdall启动失败)
docker logs heimdall
实时查看日志(跟踪应用运行动态)
docker logs -f siyuan
```
2. 容器启停与删除
```bash
启动/停止/重启容器
docker start 容器名/ID
docker stop 容器名/ID
docker restart 容器名/ID
强制删除容器(需先停止,或加-f强制删除运行中容器)
docker rm -f 容器名/ID
```
3. 镜像管理(清理无用镜像)
```bash
查看本地所有镜像
docker images
删除无用镜像(需先删除依赖该镜像的容器)
docker rmi 镜像名:标签
```
四、常见问题与解决方案
在跨平台部署过程中,以下问题较为高频,提供针对性解决方案:
问题1:Mac:“mounts denied”目录共享错误
现象:启动容器时提示“`The path /xxx is not shared from the host`”。
原因:Mac Docker默认仅共享`/Users`、`/tmp`等目录,非默认目录需手动添加。
解决方案:
1. 打开Docker Desktop → 点击顶部菜单栏“Docker” → “Settings” → “Resources” → “File Sharing”。
2. 点击“+”号,选择需共享的目录(如`/data`或`~/heimdall`),点击“Apply & Restart”生效。
问题2:CentOS 7:容器启动后立即退出(Exited (1))
现象:`docker ps -a`显示容器状态为“Exited (1)”,日志提示权限错误。
原因:`-u $(id -u):$(id -g)`指定的UID/GID在容器内无目录读写权限。
解决方案:
1. 先省略`-u`参数,使用root权限启动容器(验证是否为权限问题)。
2. 若需非root权限,执行`chown -R 1000:1000 /data/xxx`(修改宿主机数据目录权限,与容器内UID/GID对齐)。
问题3:Mac(Apple Silicon):镜像架构不兼容(no matching manifest)
现象:拉取镜像时提示“`no matching manifest for linux/arm64/v8 in the manifest list entries`”。
原因:镜像仅支持amd64架构,未提供arm64版本。
解决方案:
1. 打开Docker Desktop → “Settings” → “Resources” → “Advanced” → 勾选“Use Rosetta for x86/amd64 emulation on Apple Silicon”。
2. 重启Docker后重新拉取镜像(性能会有轻微损耗,但可兼容amd64镜像)。
以上就是本文基于Docker的实战案例,覆盖了7款实用应用在CentOS 7云主机与Mac的Docker部署,平台差异:CentOS 7需关注权限映射与端口防火墙,Mac需重点处理目录共享与架构适配。