跨平台 Docker 实践:7 款实用应用在 CentOS 7 云主机与 Mac 的部署

发布于:2025-08-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

在云原生技术飞速发展的当下,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`即可登录。页面如下,后续不再一一截图。

 应用2OwnCloud:私有化文件同步与共享

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`(生产环境建议使用强密码)。

应用3LibreTV: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`即可进入直播列表。

应用4Heimdall:应用导航仪表盘

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需重点处理目录共享与架构适配。