2026企业内网Docker落地指南:从Harbor私有仓库到安全交付闭环
Docker 私有化部署方案|2026最新版
随着企业数字化、云原生和 DevOps 体系的持续推进,Docker 依然是应用容器化落地中最常见、最成熟的技术之一。虽然近年来 Kubernetes、containerd、Podman、Finch 等技术不断发展,但在实际企业环境中,Docker 仍然广泛用于开发环境、测试环境、CI/CD 构建环境、私有镜像仓库、轻量级生产部署以及边缘节点交付。
对于很多政企、金融、制造、能源、医疗、教育以及内网隔离场景来说,直接依赖公网 Docker Hub、GitHub Container Registry 或其他外部镜像源并不现实。一方面存在网络不可达、下载速度慢、镜像不可控等问题;另一方面也涉及合规、安全审计、供应链安全和数据主权等要求。因此,建设一套稳定、安全、可维护的 Docker 私有化部署方案,已经成为企业基础设施建设中的重要组成部分。
本文将从整体架构、部署模式、镜像仓库、离线安装、安全加固、CI/CD 集成、运维监控、备份恢复等多个角度,系统介绍一套适用于 2026 年企业环境的 Docker 私有化部署方案。
一、Docker 私有化部署的核心目标
Docker 私有化部署并不是简单地在服务器上安装一个 Docker Engine,而是要围绕企业内部应用交付形成一套完整体系。通常需要满足以下目标:
1. 内网可用
在无法访问公网或公网访问受限的环境中,开发、测试、生产节点仍然能够正常拉取基础镜像、业务镜像和中间件镜像。
2. 镜像可控
所有镜像来源、版本、构建过程、依赖组件都应可追踪,避免直接使用未知来源镜像带来的安全风险。
3. 安全合规
需要支持用户认证、访问控制、TLS 加密、镜像扫描、漏洞治理、操作审计和日志留存。
4. 高可用与可扩展
私有镜像仓库、构建节点、部署节点应具备一定的高可用能力,避免单点故障影响业务发布。
5. 支持 DevOps 流程
与 GitLab、Jenkins、GitHub Enterprise、Gitea、Argo CD、Harbor、SonarQube 等工具集成,实现自动构建、自动扫描、自动发布。
6. 便于运维管理
支持统一配置、监控告警、日志分析、备份恢复和版本升级,降低长期维护成本。
二、整体架构设计
一套完整的 Docker 私有化部署架构,通常可以分为以下几个层次:
┌─────────────────────────────────────┐
│ 用户与研发层 │
│ GitLab / Jenkins / IDE / CLI │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ CI/CD 构建层 │
│ Jenkins / GitLab CI / Runner │
│ Docker Buildx / BuildKit │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 镜像管理层 │
│ Harbor / Docker Registry / Nexus │
│ 鉴权 / 扫描 / 签名 / 复制 / 审计 │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 运行部署层 │
│ Docker Engine / Docker Compose │
│ Kubernetes / K3s / Swarm │
└─────────────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 基础设施层 │
│ Linux / 存储 / 网络 / DNS / NTP │
└─────────────────────────────────────┘
在企业内网环境中,推荐至少准备以下几类服务器:
| 服务器角色 | 建议数量 | 说明 |
|---|---|---|
| 镜像仓库服务器 | 2 台以上 | 用于部署 Harbor 或 Registry,生产建议高可用 |
| CI/CD 构建服务器 | 1~多台 | 用于执行镜像构建、测试和发布 |
| 应用运行服务器 | 按业务规模 | 部署 Docker Engine、Compose 或 Kubernetes |
| 运维管理服务器 | 1 台以上 | 用于监控、日志、堡垒机、备份等 |
| 离线资源同步服务器 | 可选 | 用于在外网与内网之间进行镜像和包同步 |
三、部署模式选择
Docker 私有化部署主要有三种典型模式。
1. 单机模式
适用于开发测试、小型项目、实验环境。
特点:
- 部署简单;
- 成本低;
- 可用性一般;
- 不适合核心生产系统。
常见组合:
Docker Engine + Docker Compose + Docker Registry
如果只是需要一个简单镜像仓库,可以使用官方 Registry;如果需要 Web 管理、用户权限、漏洞扫描等能力,则建议使用 Harbor。
2. 企业标准模式
适用于中小型企业或部门级生产环境。
推荐组合:
Docker Engine / Docker Compose
Harbor
GitLab / Jenkins
Prometheus + Grafana
ELK / Loki
该模式中,Harbor 作为统一镜像仓库,CI/CD 平台负责构建镜像并推送至 Harbor,部署节点从 Harbor 拉取镜像运行。
3. 高可用云原生模式
适用于大型企业、核心生产环境、政企专有云或多集群场景。
推荐组合:
Harbor HA
Kubernetes / K3s / RKE2
GitLab CI / Jenkins / Tekton
Argo CD / Flux CD
Prometheus / Grafana / Alertmanager
Loki / OpenSearch
Trivy / Clair / Notary / Cosign
该模式更强调集群化、自动化、声明式部署和供应链安全,适合有成熟运维团队的组织。
四、基础环境准备
1. 操作系统建议
2026 年企业部署中,建议使用长期支持版本 Linux 发行版,例如:
- Ubuntu Server LTS;
- Debian Stable;
- Rocky Linux;
- AlmaLinux;
- openEuler;
- Anolis OS;
- RHEL。
建议生产环境统一操作系统版本,避免不同节点间内核、依赖包、文件系统差异造成问题。
2. 服务器配置建议
以中小型企业标准环境为例:
| 组件 | CPU | 内存 | 磁盘 | 说明 |
|---|---|---|---|---|
| Harbor | 4 核以上 | 8GB 以上 | 500GB 起 | 镜像多时建议独立数据盘 |
| Jenkins/GitLab Runner | 4~16 核 | 8~32GB | 200GB 起 | 取决于并发构建量 |
| 应用节点 | 按业务决定 | 按业务决定 | 100GB 起 | 建议独立挂载 Docker 数据目录 |
| 监控日志节点 | 4 核以上 | 8GB 以上 | 500GB 起 | 日志量大需扩容 |
3. 网络与域名规划
建议为内部服务规划统一域名,例如:
harbor.company.local
gitlab.company.local
jenkins.company.local
grafana.company.local
同时需要配置内部 DNS 或在各节点 /etc/hosts 中维护解析。
4. 时间同步
容器镜像签名、TLS 证书、日志审计和 CI/CD 任务都依赖准确时间。建议所有节点配置统一 NTP 服务,例如 chrony。
五、Docker Engine 私有化安装
在内网环境中,通常不能直接执行公网安装脚本,因此建议采用离线安装包或内部软件源方式。
1. 离线安装方式
在可联网机器下载 Docker 相关包,包括:
- docker-ce;
- docker-ce-cli;
- containerd.io;
- docker-buildx-plugin;
- docker-compose-plugin。
然后将安装包传入内网服务器,通过本地包管理器安装。
以 Debian/Ubuntu 系为例:
sudo dpkg -i containerd.io_*.deb
sudo dpkg -i docker-ce-cli_*.deb
sudo dpkg -i docker-ce_*.deb
sudo dpkg -i docker-buildx-plugin_*.deb
sudo dpkg -i docker-compose-plugin_*.deb
以 RHEL/Rocky/AlmaLinux 系为例:
sudo rpm -ivh containerd.io-*.rpm
sudo rpm -ivh docker-ce-cli-*.rpm
sudo rpm -ivh docker-ce-*.rpm
sudo rpm -ivh docker-buildx-plugin-*.rpm
sudo rpm -ivh docker-compose-plugin-*.rpm
2. 配置 Docker 数据目录
生产环境不建议将 Docker 数据目录放在系统盘。可以将其配置到独立磁盘,例如 /data/docker。
编辑 /etc/docker/daemon.json:
{
"data-root": "/data/docker",
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
},
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2"
}
然后重启 Docker:
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
3. 验证安装
docker version
docker info
docker compose version
如果能正常输出版本信息,说明 Docker Engine 和 Compose 插件已安装成功。
六、私有镜像仓库方案选择
私有镜像仓库是 Docker 私有化部署的核心。
1. Docker Registry
Docker Registry 是官方提供的轻量级镜像仓库。
优点:
- 简单;
- 资源占用低;
- 部署快速。
缺点:
- 缺少完善 Web 管理界面;
- 权限控制弱;
- 缺少企业级审计、扫描和复制能力。
适合小团队或临时环境。
示例 docker-compose.yml:
services:
registry:
image: registry:2
container_name: registry
restart: always
ports:
- "5000:5000"
volumes:
- ./registry-data:/var/lib/registry
启动:
docker compose up -d
2. Harbor
生产环境更推荐使用 Harbor。Harbor 是 CNCF 毕业级项目,具备企业级镜像管理能力。
主要能力包括:
- 项目隔离;
- 用户和角色权限;
- 镜像漏洞扫描;
- 镜像复制;
- 镜像保留策略;
- 标签不可变;
- Web 管理界面;
- LDAP/OIDC 集成;
- 审计日志;
- Helm Chart 仓库能力;
- 镜像签名与供应链安全集成。
七、Harbor 私有化部署方案
1. 下载离线安装包
在联网环境下载 Harbor Offline Installer,并将安装包传入内网环境。
一般文件类似:
harbor-offline-installer-vX.X.X.tgz
解压:
tar -zxvf harbor-offline-installer-vX.X.X.tgz
cd harbor
2. 配置 Harbor
复制配置文件:
cp harbor.yml.tmpl harbor.yml
编辑 harbor.yml,重点配置如下:
hostname: harbor.company.local
http:
port: 80
https:
port: 443
certificate: /data/cert/harbor.company.local.crt
private_key: /data/cert/harbor.company.local.key
harbor_admin_password: Change_Me_Strong_Password
database:
password: Change_Me_DB_Password
max_idle_conns: 100
max_open_conns: 900
data_volume: /data/harbor
trivy:
ignore_unfixed: false
skip_update: false
offline_scan: true
生产环境建议启用 HTTPS,不建议长期使用 HTTP。证书可以使用企业内部 CA 签发。
3. 安装 Harbor
sudo ./install.sh
如果需要开启 Trivy 漏洞扫描等功能,可按安装包支持参数启用。
安装完成后访问:
https://harbor.company.local
默认管理员用户通常为:
admin
密码为 harbor.yml 中配置的 harbor_admin_password。
八、Docker 客户端配置私有仓库
如果 Harbor 使用企业 CA 证书签发,需要将 CA 证书加入 Docker 信任目录。
创建目录:
sudo mkdir -p /etc/docker/certs.d/harbor.company.local
复制证书:
sudo cp ca.crt /etc/docker/certs.d/harbor.company.local/ca.crt
重启 Docker:
sudo systemctl restart docker
登录 Harbor:
docker login harbor.company.local
测试推送镜像:
docker pull nginx:latest
docker tag nginx:latest harbor.company.local/library/nginx:latest
docker push harbor.company.local/library/nginx:latest
测试拉取镜像:
docker pull harbor.company.local/library/nginx:latest
九、离线镜像同步策略
在完全内网环境中,镜像同步是关键问题。常见做法有三种。
1. 手动导入导出
适合少量镜像。
在外网机器:
docker pull nginx:1.27
docker save nginx:1.27 -o nginx_1.27.tar
传入内网后:
docker load -i nginx_1.27.tar
docker tag nginx:1.27 harbor.company.local/library/nginx:1.27
docker push harbor.company.local/library/nginx:1.27
2. 使用 skopeo 同步
skopeo 可以在不运行 Docker Daemon 的情况下复制镜像。
示例:
skopeo copy docker://docker.io/library/nginx:1.27 \
docker://harbor.company.local/library/nginx:1.27
对于批量镜像,可以结合脚本维护镜像清单。
3. Harbor 复制规则
如果环境允许 Harbor 访问上游仓库,可以配置复制规则,将 Docker Hub、Quay、GHCR 或其他 Harbor 仓库中的镜像同步到内部 Harbor。
建议配置:
- 定时同步;
- 白名单项目;
- 固定版本标签;
- 避免同步
latest作为生产依赖; - 同步后进行漏洞扫描。
十、CI/CD 集成方案
私有化部署不仅要能运行容器,还要能自动构建和发布镜像。
1. GitLab CI 示例
.gitlab-ci.yml 示例:
stages:
- build
- push
variables:
IMAGE_NAME: harbor.company.local/demo/myapp
IMAGE_TAG: $CI_COMMIT_SHORT_SHA
build-image:
stage: build
script:
- docker build -t $IMAGE_NAME:$IMAGE_TAG .
- docker tag $IMAGE_NAME:$IMAGE_TAG $IMAGE_NAME:latest
push-image:
stage: push
script:
- docker login harbor.company.local -u $HARBOR_USER -p $HARBOR_PASSWORD
- docker push $IMAGE_NAME:$IMAGE_TAG
- docker push $IMAGE_NAME:latest
生产环境建议避免直接使用 latest 发布,最好使用 Git Commit、语义化版本或构建号作为镜像标签。
2. Jenkins Pipeline 示例
pipeline {
agent any
environment {
HARBOR = 'harbor.company.local'
IMAGE = 'harbor.company.local/demo/myapp'
TAG = "${env.BUILD_NUMBER}"
}
stages {
stage('Build') {
steps {
sh 'docker build -t $IMAGE:$TAG .'
}
}
stage('Login') {
steps {
sh 'docker login $HARBOR -u $HARBOR_USER -p $HARBOR_PASSWORD'
}
}
stage('Push') {
steps {
sh 'docker push $IMAGE:$TAG'
}
}
}
}
更安全的做法是使用 Jenkins Credentials 管理账号密码,避免明文出现在流水线配置中。
十一、Docker Compose 应用部署
对于非 Kubernetes 场景,Docker Compose 仍然是简单可靠的部署方式。
示例:
services:
app:
image: harbor.company.local/prod/myapp:1.0.0
container_name: myapp
restart: always
ports:
- "8080:8080"
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=prod
volumes:
- ./logs:/app/logs
networks:
- app-net
redis:
image: harbor.company.local/library/redis:7
container_name: redis
restart: always
volumes:
- ./redis-data:/data
networks:
- app-net
networks:
app-net:
driver: bridge
启动:
docker compose up -d
升级:
docker compose pull
docker compose up -d
查看状态:
docker compose ps
docker compose logs -f
十二、安全加固建议
Docker 私有化部署最容易被忽视的部分是安全。生产环境至少应落实以下措施。
1. 启用 HTTPS
Harbor、Registry、GitLab、Jenkins 等所有关键服务都应启用 HTTPS,并使用企业 CA 签发证书。
2. 最小权限原则
Harbor 中应按项目、环境、团队划分权限。例如:
- 开发人员只能推送开发项目;
- 测试人员只能拉取测试镜像;
- 生产环境镜像只能由 CI/CD 服务账号推送;
- 普通用户禁止删除生产镜像。
3. 禁用不安全仓库
除非测试环境,否则不建议在 Docker 中配置 insecure-registries。如果必须使用,也要限制在内网地址范围内。
4. 镜像漏洞扫描
Harbor 可以集成 Trivy,对镜像进行漏洞扫描。建议设置规则:
- 高危漏洞镜像禁止进入生产;
- 严重漏洞必须限期修复;
- 基础镜像定期更新;
- 对扫描结果进行审计留存。
5. 镜像签名
2026 年供应链安全已成为重点。建议使用 Cosign、Notation 或 Notary v2 相关方案,对生产镜像进行签名和验证。
典型流程:
构建镜像 → 漏洞扫描 → 签名 → 推送 Harbor → 部署前验签
6. 控制 Docker Socket 权限
/var/run/docker.sock 拥有极高权限,能控制宿主机上的容器。不要随意将其挂载到业务容器中,也不要让普通用户加入 docker 组。
7. 容器运行安全
建议:
- 非 root 用户运行容器;
- 设置只读文件系统;
- 限制 CPU 和内存;
- 禁止特权模式;
- 使用 seccomp、AppArmor 或 SELinux;
- 限制容器 capabilities;
- 不在镜像中保存密钥。
十三、镜像规范与版本管理
企业内部应建立统一的镜像命名规范。
推荐格式:
harbor.company.local/项目名/应用名:版本号
例如:
harbor.company.local/payment/order-service:1.3.5
harbor.company.local/middleware/mysql:8.4
harbor.company.local/base/openjdk:21
标签建议:
| 标签类型 | 示例 | 说明 |
|---|---|---|
| 语义化版本 | 1.2.0 |
推荐生产使用 |
| Git Commit | a1b2c3d |
便于代码追踪 |
| 构建号 | build-1024 |
适合 CI/CD |
| 环境标签 | dev、test |
可用于非生产 |
| latest | latest |
不建议生产依赖 |
同时建议启用 Harbor 的标签不可变策略,防止同一版本镜像被覆盖。
十四、监控与日志
1. Docker 主机监控
可以使用 Prometheus Node Exporter 采集主机指标,包括:
- CPU;
- 内存;
- 磁盘;
- 网络;
- 文件句柄;
- 系统负载。
2. 容器监控
可使用 cAdvisor 或容器运行时指标采集方案,监控:
- 容器 CPU 使用率;
- 容器内存使用率;
- 容器重启次数;
- 网络流量;
- 文件系统使用量。
3. Harbor 监控
重点关注:
- Harbor 服务状态;
- 镜像仓库存储容量;
- 数据库连接;
- 任务队列;
- 扫描任务状态;
- 复制任务状态;
- 登录失败次数。
4. 日志收集
可以选择:
- ELK / EFK;
- OpenSearch;
- Loki + Promtail;
- Fluent Bit;
- Filebeat。
建议业务容器将日志输出到 stdout/stderr,再由统一日志系统采集,避免容器内日志无限增长。
十五、备份与恢复方案
私有镜像仓库一旦故障,可能直接影响应用发布和扩容,因此必须做好备份。
1. Harbor 需要备份的内容
包括:
- 镜像数据目录;
- PostgreSQL 数据库;
- Redis 数据;
- Harbor 配置文件;
- 证书文件;
- 用户和项目权限配置;
- 扫描和审计数据。
2. 备份策略
建议:
- 每日增量备份;
- 每周全量备份;
- 备份文件异地保存;
- 定期进行恢复演练;
- 备份数据加密;
- 保留至少 30 天历史版本。
3. 恢复原则
恢复时应保证 Harbor 版本、配置文件、数据库和镜像数据一致。不要只备份镜像目录而忽略数据库,否则可能出现镜像层存在但元数据丢失的问题。
十六、高可用设计
对于生产环境,Harbor 单机部署存在单点风险。高可用方案通常包括:
负载均衡器
│
├── Harbor 节点 1
├── Harbor 节点 2
└── Harbor 节点 N
共享存储 / 对象存储
外部 PostgreSQL
外部 Redis
关键点:
- Harbor Core 多实例;
- Registry 存储使用共享文件系统或对象存储;
- PostgreSQL 使用主从或高可用集群;
- Redis 使用哨兵或集群;
- 前端使用 Nginx、HAProxy 或硬件负载均衡;
- TLS 证书统一管理。
如果企业已经有 Kubernetes 平台,也可以使用 Helm 部署 Harbor,并结合存储类、Ingress、外部数据库实现高可用。
十七、常见问题与排查
1. Docker 登录 Harbor 失败
检查:
- 域名是否解析正确;
- 证书是否被 Docker 信任;
- Harbor 用户名密码是否正确;
- Harbor 项目权限是否正确;
- 防火墙是否放通 443 端口。
2. 推送镜像速度慢
可能原因:
- 存储性能不足;
- 网络带宽有限;
- 镜像层过大;
- Harbor 后端数据库压力高;
- Registry 存储未优化。
优化方式:
- 精简镜像;
- 使用多阶段构建;
- 使用 SSD 或对象存储;
- 增加并发资源;
- 清理无用镜像。
3. 磁盘空间快速增长
建议:
- 开启镜像保留策略;
- 定期执行垃圾回收;
- 清理无用标签;
- 规范 CI/CD 镜像标签;
- 避免每次构建都生成大量临时镜像。
4. 容器启动失败
排查:
docker ps -a
docker logs 容器名
docker inspect 容器名
docker compose logs -f
同时检查端口冲突、环境变量、挂载目录权限、镜像架构是否匹配等问题。
十八、推荐落地路线
对于大多数企业,建议按照以下路线推进:
第一阶段:基础可用
- 部署 Docker Engine;
- 部署 Harbor 单机版;
- 配置 HTTPS;
- 建立基础镜像仓库;
- 完成镜像推送和拉取验证。
第二阶段:流程集成
- 接入 GitLab 或 Jenkins;
- 实现自动构建镜像;
- 建立镜像命名规范;
- 增加漏洞扫描;
- 配置镜像保留策略。
第三阶段:安全治理
- 接入 LDAP/OIDC;
- 实施最小权限;
- 引入镜像签名;
- 建立生产镜像准入机制;
- 增加审计和日志留存。
第四阶段:高可用与自动化
- Harbor 高可用改造;
- 接入统一监控;
- 自动化备份恢复;
- 推广 Compose 或 Kubernetes 标准部署;
- 建设完整 DevSecOps 流程。
十九、总结
Docker 私有化部署的重点,不只是“装 Docker”,而是围绕镜像、构建、分发、运行、安全和运维建立一套完整的内部容器交付体系。对于小型团队,可以从 Docker Engine、Docker Compose 和 Harbor 单机版开始;对于企业生产环境,则应重点考虑高可用、权限控制、漏洞扫描、镜像签名、监控日志和备份恢复。
在 2026 年的企业 IT 环境中,容器化已经从效率工具逐渐演变为软件供应链的重要环节。谁能更好地管理镜像来源、构建过程、发布权限和运行安全,谁就能在稳定性、安全性和交付效率上获得更大优势。
一套成熟的 Docker 私有化部署方案,应该具备以下特征:
- 内网环境稳定可用;
- 镜像来源清晰可信;
- 构建发布流程自动化;
- 权限、安全、审计完整;
- 支持备份恢复和高可用;
- 能够与 Kubernetes、CI/CD、监控日志体系平滑集成。
如果企业刚开始建设容器平台,建议先以 Harbor 为核心完成私有镜像仓库建设,再逐步扩展 CI/CD、安全扫描、签名验签和统一运维能力。这样既能快速落地,又能为后续云原生平台升级打下坚实基础。