容器端口映射与存储卷管理、微服务项目管理、compose语法详解、compose项目管理、harbor仓库安装部署、harbor仓库配置管理

一、容器端口映射:让外部访问容器服务

容器默认运行在隔离网络中,需通过 端口映射(Port Mapping) 暴露服务。

🔧 基本语法

复制代码
docker run -p <宿主机端口>:<容器端口> [镜像]

📌 常见场景示例

场景 命令
映射 Web 服务 docker run -d -p 8080:80 nginx
映射 MySQL docker run -d -p 3306:3306 mysql:8.0
随机映射(测试用) docker run -d -P nginx → 自动分配高位端口
多端口映射 docker run -p 8080:80 -p 8443:443 nginx

验证

复制代码
curl http://localhost:8080        # 访问 Nginx
telnet localhost 3306             # 测试数据库连通性

⚠️ 注意事项

  • 避免端口冲突:确保宿主机端口未被占用;
  • 安全限制 :生产环境建议通过 反向代理(Nginx/HAProxy) 暴露服务,而非直接映射;
  • IPv6 支持 :使用 -p [::1]:8080:80 绑定 IPv6。

二、存储卷管理:实现数据持久化与共享

容器删除后,内部文件系统随之消失。存储卷(Volume) 解决数据持久化问题。

🗂 三种存储方式对比

类型 命令 特点 适用场景
Bind Mount -v /host/path:/container/path 直接挂载宿主机目录 配置文件、代码热更新
Named Volume -v myvol:/data Docker 管理的命名卷 数据库、日志等持久化数据
tmpfs --tmpfs /tmp 内存临时文件系统 敏感缓存(如 session)

💡 实战:MySQL 数据持久化

复制代码
# 创建命名卷
docker volume create mysql_data

# 启动 MySQL 并挂载
docker run -d \
  --name mysql-db \
  -e MYSQL_ROOT_PASSWORD=Root123! \
  -v mysql_data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0

✅ 即使删除容器,mysql_data 卷中的数据依然保留,重建容器时重新挂载即可恢复。

🔍 查看与管理卷

复制代码
# 列出所有卷
docker volume ls

# 查看卷详情(含挂载路径)
docker volume inspect mysql_data

# 清理未使用卷
docker volume prune

三、微服务项目管理:为什么需要编排?

一个典型 Web 应用包含:

  • 前端:Nginx 静态资源
  • 后端:Python/Java API 服务
  • 数据库:MySQL
  • 缓存:Redis

若手动启动 4 个容器并配置网络、依赖、重启策略,极易出错。Docker Compose 应运而生。


四、Compose 语法详解:声明式定义多服务应用

Compose 使用 YAML 文件 描述整个应用栈。

📄 docker-compose.yml 核心结构

复制代码
version: '3.8'

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    depends_on:
      - api
    restart: unless-stopped

  api:
    build: ./myapp          # 从 Dockerfile 构建
    environment:
      - DB_HOST=db
      - REDIS_HOST=redis
    ports:
      - "5000"
    depends_on:
      - db
      - redis

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: Root123!
      MYSQL_DATABASE: appdb
    volumes:
      - db_data:/var/lib/mysql
    restart: always

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  db_data:
  redis_data:

🔑 关键字段说明

字段 作用
build 指定构建上下文(含 Dockerfile)
image 使用现成镜像
ports 端口映射("宿主:容器"
volumes 挂载卷或目录
environment 设置环境变量(替代 -e
depends_on 启动顺序依赖(⚠️ 不等待服务就绪!)
restart 重启策略(always, unless-stopped
networks 自定义网络(默认已创建 bridge 网络)

💡 服务发现 :Compose 自动为服务创建 DNS 记录,如 api 容器可通过 http://db:3306 访问数据库。


五、Compose 项目管理:开发到部署全流程

🚀 常用命令

命令 说明
docker compose up -d 后台启动所有服务
docker compose down 停止并删除容器、网络(不删卷!
docker compose logs -f api 实时查看 api 服务日志
docker compose exec db mysql -u root -p 进入 db 容器执行命令
docker compose config 验证 YAML 语法

🔄 开发工作流

复制代码
# 1. 修改代码
echo "New feature" >> myapp/app.py

# 2. 仅重建 api 服务
docker compose build api

# 3. 重启 api
docker compose up -d api

# 4. 验证
curl http://localhost

优势:无需重启整个应用栈,提升开发效率。


六、Harbor 仓库安装部署(生产级)

前提:已安装 Docker 和 Docker Compose

步骤 1:下载离线安装包

复制代码
wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
tar -zxvf harbor-offline-installer-v2.11.0.tgz
cd harbor

步骤 2:配置 harbor.yml

复制代码
# 必改项
hostname: harbor.yourcompany.com

# HTTPS(生产必须)
https:
  port: 443
  certificate: /data/cert/harbor.yourcompany.com.crt
  private_key: /data/cert/harbor.yourcompany.com.key

# 数据库密码
database:
  password: StrongDBPass123!

# 管理员密码
harbor_admin_password: Admin@2025!

步骤 3:安装

复制代码
sudo ./install.sh --with-trivy --with-chartmuseum

参数说明:

  • --with-trivy:启用漏洞扫描
  • --with-chartmuseum:支持 Helm Chart 存储(K8s 场景)

步骤 4:访问 Web UI

浏览器打开 https://harbor.yourcompany.com,登录账号:admin / Admin@2025!


七、Harbor 仓库配置管理:企业级治理

1. 项目(Project)管理

  • 创建私有项目 :如 prod/web, dev/ai
  • 设置公开/私有:基础镜像可设为公开,业务镜像设为私有

2. 成员与角色

角色 权限
项目管理员 全权限
开发者 推送/拉取
访客 仅拉取
维护者 管理成员+查看日志

3. 镜像安全策略

  • 漏洞扫描:自动扫描推送的镜像,阻断高危 CVE 镜像部署;
  • 内容信任:启用 Notary,确保只拉取签名镜像;
  • 不可变标签 :防止覆盖 v1.0.0 等正式版本。

4. 镜像生命周期

  • 保留规则:自动清理旧镜像(如保留最近 20 个版本);
  • Webhook:镜像推送后触发 CI/CD 流水线。

5. 与 Compose 集成

复制代码
# docker-compose.yml 中使用私有镜像
services:
  api:
    image: harbor.yourcompany.com/prod/web-api:v1.2.0
    pull_policy: always

前提 :所有部署节点需先 docker login harbor.yourcompany.com


八、完整工作流示例:从开发到上线

复制代码
graph LR
A[开发者写代码] --> B[本地 docker compose up 测试]
B --> C[Git 提交]
C --> D[CI 流水线:构建镜像 + 推送 Harbor]
D --> E[CD 流水线:拉取镜像 + docker compose up 生产]
E --> F[Harbor 扫描漏洞 + 审计日志]
相关推荐
数据与后端架构提升之路16 小时前
Seata 全景拆解:AT、TCC、Saga 该怎么选?告别“一把梭”的架构误区
分布式·架构
檐下翻书17316 小时前
在线绘制水流量示意图
论文阅读·架构·毕业设计·流程图·论文笔记
dajun18112345619 小时前
油气能源开采工艺流程示意图绘制
信息可视化·架构·流程图·能源
Asher阿舍技术站19 小时前
【5G无线接入技术系列】四、无线接口架构
5g·架构
青火coding20 小时前
SOFAServerless架构的意义
java·运维·中间件·架构·serverless
不做码农好多年,该何去何从。21 小时前
zookeeper是什么可以做什么?
分布式·zookeeper·云原生
檐下翻书17321 小时前
免费在线工艺流程图制作工具_生产/化工/食品工艺流程绘制模板
人工智能·金融·架构·流程图·论文笔记·pcb工艺
程序员泠零澪回家种桔子1 天前
MCP架构核心组件
人工智能·ai·架构
Trouvaille ~1 天前
【Linux】进程间通信(二):命名管道与进程池架构实战
linux·c++·chrome·架构·进程间通信·命名管道·进程池
Data-Miner1 天前
122页满分可编辑PPT | 企业4A数字化架构演进与治理方案
架构