云原生与容器--Docker 容器化最佳实践

张开发
2026/4/15 5:28:42 15 分钟阅读

分享文章

云原生与容器--Docker 容器化最佳实践
系列导读本篇将深入讲解 Docker 容器化的最佳实践与生产经验。文章目录一、Docker 基础1.1 核心概念1.2 常用命令二、镜像最佳实践2.1 基础镜像选择2.2 镜像优化原则三、Dockerfile 优化3.1 优化前3.2 优化后3.3 .dockerignore四、容器编排4.1 Docker Compose4.2 常用命令五、生产实践5.1 安全实践5.2 日志管理5.3 健康检查5.4 资源限制总结一、Docker 基础1.1 核心概念┌─────────────────────────────────────────────────────────────┐ │ Docker 核心概念 │ ├─────────────────────────────────────────────────────────────┤ │ 镜像 (Image)只读模板 │ │ 容器 (Container)镜像的运行实例 │ │ 仓库 (Registry)镜像存储 │ │ Dockerfile镜像构建脚本 │ └─────────────────────────────────────────────────────────────┘1.2 常用命令# 镜像操作dockerbuild-tapp:v1.# 构建镜像dockerpush registry/app:v1# 推送镜像dockerpull registry/app:v1# 拉取镜像dockerimages# 查看镜像dockerrmi app:v1# 删除镜像# 容器操作dockerrun-d-p8080:8080 app:v1# 运行容器dockerps# 查看容器dockerlogscontainer# 查看日志dockerexec-itcontainersh# 进入容器dockerstopcontainer# 停止容器dockerrmcontainer# 删除容器二、镜像最佳实践2.1 基础镜像选择基础镜像大小适用场景ubuntu~70MB需要完整系统alpine~5MB精简环境distroless~2MB仅运行时openjdk:11-jre-slim~200MBJava 应用2.2 镜像优化原则1. 选择最小基础镜像 2. 减少镜像层数 3. 使用多阶段构建 4. 清理缓存文件 5. 使用 .dockerignore三、Dockerfile 优化3.1 优化前FROM openjdk:11 WORKDIR /app COPY . . RUN apt-get update apt-get install -y maven RUN mvn clean package EXPOSE 8080 CMD [java, -jar, app.jar]3.2 优化后# 构建阶段 FROM maven:3.8-openjdk-11 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn clean package -DskipTests # 运行阶段 FROM openjdk:11-jre-slim WORKDIR /app # 创建非 root 用户 RUN groupadd -r appuser useradd -r -g appuser appuser # 复制构建产物 COPY --frombuilder /app/target/*.jar app.jar # 设置权限 RUN chown -R appuser:appuser /app USER appuser EXPOSE 8080 # 健康检查 HEALTHCHECK --interval30s --timeout3s \ CMD curl -f http://localhost:8080/health || exit 1 # JVM 优化 ENV JAVA_OPTS-Xms256m -Xmx512m -XX:UseG1GC ENTRYPOINT [sh, -c, java $JAVA_OPTS -jar app.jar]3.3 .dockerignore# .dockerignore .git .gitignore .idea *.md target/ *.log .env Dockerfile docker-compose.yml四、容器编排4.1 Docker Compose# docker-compose.ymlversion:3.8services:app:build:.ports:-8080:8080environment:-SPRING_PROFILES_ACTIVEprod-JAVA_OPTS-Xms256m-Xmx512mdepends_on:-mysql-redisnetworks:-app-networkrestart:unless-stoppeddeploy:resources:limits:cpus:1memory:512Mmysql:image:mysql:8.0environment:-MYSQL_ROOT_PASSWORDroot-MYSQL_DATABASEmydbvolumes:-mysql-data:/var/lib/mysqlnetworks:-app-networkredis:image:redis:7-alpinevolumes:-redis-data:/datanetworks:-app-networknetworks:app-network:driver:bridgevolumes:mysql-data:redis-data:4.2 常用命令# 启动docker-composeup-d# 查看状态docker-composeps# 查看日志docker-composelogs-fapp# 扩容docker-composeup-d--scaleapp3# 停止docker-composedown五、生产实践5.1 安全实践# 1. 使用非 root 用户 RUN groupadd -r appuser useradd -r -g appuser appuser USER appuser # 2. 只复制必要文件 COPY --chownappuser:appuser app.jar /app/ # 3. 不存储敏感信息 # 使用环境变量或 Secret 管理5.2 日志管理# 日志驱动配置services:app:logging:driver:json-fileoptions:max-size:10mmax-file:35.3 健康检查HEALTHCHECK --interval30s --timeout3s --start-period5s --retries3 \ CMD curl -f http://localhost:8080/health || exit 15.4 资源限制deploy:resources:limits:cpus:1memory:512Mreservations:cpus:0.5memory:256M总结✅Docker 基础镜像、容器、仓库✅镜像最佳实践基础镜像选择、优化原则✅Dockerfile 优化多阶段构建、安全配置✅容器编排Docker Compose✅生产实践安全、日志、健康检查下篇预告Service Mesh (Istio) 入门实战作者刘~浪地球系列云原生与容器二更新时间2026-04-14

更多文章