分享多伦多服务器 Docker 容器化实战,从单体应用迁移到微服务的完整流程。
容器化是现代应用部署的基础。本文分享多伦多服务器 Docker 容器化实战。
Docker 基础 1) 镜像:应用的只读模板 2) 容器:镜像的运行实例 3) 仓库:存储和分发镜像 4) Dockerfile:构建镜像的脚本 5) Compose:多容器编排
单体应用容器化 1) 编写 Dockerfile:基于合适的基础镜像 2) 安装依赖:系统包和应用依赖 3) 拷贝代码:COPY 应用代码 4) 配置环境:ENV、EXPOSE、CMD 5) 构建镜像:docker build 6) 运行容器:docker run
Dockerfile 最佳实践 1) 多阶段构建:减小镜像体积 2) 选择精简基础镜像:alpine 3) 合并 RUN 命令:减少镜像层数 4) 使用 .dockerignore:排除无关文件 5) 非 root 用户运行:安全 6) 明确版本号:可复现
微服务拆分 1) 按业务领域拆分:用户、订单、商品 2) 每个服务独立部署 3) 服务间通信:REST 或 gRPC 4) 数据库按服务拆分 5) 分布式事务:最终一致性
Compose 编排 ```yaml version: '3' services: web: image: myapp/web:latest ports: - "80:80" depends_on: - api api: image: myapp/api:latest environment: - DB_HOST=db db: image: postgres:15 volumes: - db_data:/var/lib/postgresql/data volumes: db_data: ```
容器网络 1) bridge:默认网络,容器间通信 2) host:共享主机网络 3) overlay:跨主机通信 4) 自定义网络:按服务分组 5) 网络隔离:不同环境网络隔离
数据持久化 1) Volume:Docker 管理的卷 2) Bind Mount:挂载主机目录 3) tmpfs:内存文件系统 4) 数据库用 Volume,配置文件用 Bind Mount
镜像仓库 1) 私有仓库:Harbor、Registry 2) 云仓库:Docker Hub、ECR、ACR 3) 镜像扫描:漏洞扫描 4) 签名验证:确保镜像可信
CI/CD 流程 1) 代码提交触发 CI 2) 运行测试 3) 构建镜像 4) 推送仓库 5) Ansible 或 K8s 部署 6) 健康检查
容器安全 1) 非 root 用户 2) 镜像漏洞扫描 3) 只读文件系统 4) 限制资源(CPU、内存) 5) 安全的基础镜像 6) 定期更新镜像
监控和日志 1) 容器监控:cAdvisor、Prometheus 2) 日志收集:Fluentd、Filebeat 3) 日志聚合:ELK、Loki 4) 告警:AlertManager
常见问题 问题一:镜像太大 修复:多阶段构建、alpine 基础镜像、清理缓存。
问题二:容器启动慢 修复:优化 Dockerfile、预热镜像、减少启动步骤。
问题三:容器数据丢失 修复:使用 Volume 持久化数据。
问题四:容器间无法通信 修复:同一网络、使用服务名访问。
问题五:资源占用高 修复:限制资源、优化应用。
总结:容器化是应用部署的趋势。Docker + Compose 适合中小规模,大规模用 Kubernetes。合理规划镜像、网络、存储,才能发挥容器化的优势。