Trae快速构建自己项目的docker镜像

Written by

in

文章目录
  • 目录
    • Docker镜像构建规范(CRMEB项目)
      • 项目概述
      • 镜像仓库地址
      • 环境准备
      • 多架构镜像构建与推送(生产环境)
        • 构建并推送各服务镜像
        • 构建完整应用镜像
        • 一键构建脚本
      • 镜像标签规范
        • 镜像验证
          • 本地开发调试(默认)
            • 构建本地镜像
          • 镜像测试
            • Dockerfile 分层优化
              • 故障排查
                • 常见问题
                • 构建失败检查清单
              • 安全最佳实践
                • 性能优化

                Trae 设置添加项目规则,我这个是用的腾讯云个人免费镜像,镜像地址改成自己的,账号密码也改成自己的,就可以直接使用,就可以全自动维护自己的镜像了

                ---
                alwaysApply: false
                description: 陀螺匠项目Docker镜像构建规范与最佳实践,包含Dockerfile编写、分层优化、多架构构建、腾讯云镜像仓库管理
                ---

                • 项目名称: CRMEB 商城系统
                • 技术栈: ThinkPHP 6.x + Workerman + PHP 7.4 + MySQL 5.7 + Redis + Nginx + Docker
                • 镜像仓库: 腾讯云容器镜像服务 (ccr.ccs.tencentyun.com)
                • 构建要求: 必须构建多架构镜像(linux/amd64 + linux/arm64)

                服务 镜像地址
                PHP ccr.ccs.tencentyun.com/crmebky_php/php
                MySQL ccr.ccs.tencentyun.com/crmebky_php/mysql
                Redis ccr.ccs.tencentyun.com/crmebky_php/redis
                Nginx ccr.ccs.tencentyun.com/crmebky_php/nginx
                完整应用 ccr.ccs.tencentyun.com/crmebky_php/crmebky

                # 登录腾讯云容器镜像服务
                docker login ccr.ccs.tencentyun.com
                # 使用现有的多架构构建器
                docker buildx use multiarch

                注意:以下操作仅用于生产环境推送镜像到仓库,本地开发调试请使用上面的【本地开发调试】章节。

                必须构建多架构镜像,支持 linux/amd64 和 linux/arm64 平台。

                # 生成时间标签(强制要求)
                export IMAGE_TAG=$(date +%Y%m%d-%H%M%S)
                # PHP 镜像
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/php:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/php:$IMAGE_TAG 
                  ./docker-compose-dev/php --push
                # MySQL 镜像
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/mysql:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/mysql:$IMAGE_TAG 
                  ./docker-compose-dev/mysql --push
                # Redis 镜像
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/redis:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/redis:$IMAGE_TAG 
                  ./docker-compose-dev/redis --push
                # Nginx 镜像
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/nginx:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/nginx:$IMAGE_TAG 
                  ./docker-compose-dev/nginx --push

                # 进入项目根目录
                cd .
                # 或者从.version文件中读取
                
                export IMAGE_TAG=$(cat .version 2>/dev/null || date +%Y%m%d-%H%M%S)
                
                docker buildx build --platform linux/amd64,linux/arm64 
                  -f docker-compose-dev/allinone/Dockerfile 
                  -t ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/crmebky:$IMAGE_TAG 
                  --push ./docker-compose-dev/allinone
                

                #!/bin/bash
                IMAGE_TAG=$(date +%Y%m%d-%H%M%S)
                echo "镜像标签: $IMAGE_TAG"
                
                export DOCKER_BUILDKIT=1
                docker buildx use multiarch
                
                # PHP 镜像
                echo "构建 PHP 镜像..."
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/php:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/php:$IMAGE_TAG 
                  --push ./docker-compose-dev/php
                
                # MySQL 镜像
                echo "构建 MySQL 镜像..."
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/mysql:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/mysql:$IMAGE_TAG 
                  --push ./docker-compose-dev/mysql
                
                # Redis 镜像
                echo "构建 Redis 镜像..."
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/redis:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/redis:$IMAGE_TAG 
                  --push ./docker-compose-dev/redis
                
                # Nginx 镜像
                echo "构建 Nginx 镜像..."
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/nginx:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/nginx:$IMAGE_TAG 
                  --push ./docker-compose-dev/nginx
                
                # 完整应用镜像
                echo "构建完整应用镜像..."
                export IMAGE_TAG=$(cat .version 2>/dev/null || date +%Y%m%d-%H%M%S)
                docker buildx build --platform linux/amd64,linux/arm64 
                  -f docker-compose-dev/allinone/Dockerfile 
                  -t ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest 
                  -t ccr.ccs.tencentyun.com/crmebky_php/crmebky:$IMAGE_TAG 
                  --push ./docker-compose-dev/allinone
                
                echo "构建完成!标签: latest, $IMAGE_TAG"
                

                标签类型 格式 说明
                latest latest 最新稳定版本
                时间标签 YYYYMMDD-HHMMSS 每次推送必须添加
                版本标签 v2.0.1 语义化版本
                环境标签 dev/test 开发/测试环境

                强制要求: 每次推送必须让用户确认地址和标签,推送成功后提示用户要不要推送"latest"分支。

                # 查看多架构信息
                docker buildx imagetools inspect ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest
                
                # 查看 manifest
                docker manifest inspect ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest
                

                本地开发调试时,使用普通 docker build 构建镜像,不推送到仓库:

                # 进入 docker-compose-dev 目录
                cd ./docker-compose-dev
                
                # 构建 PHP 镜像
                docker build -t crmeb-php:latest ./php
                
                # 构建 MySQL 镜像
                docker build -t crmeb-mysql:latest ./mysql
                
                # 构建 Redis 镜像
                docker build -t crmeb-redis:latest ./redis
                
                # 构建 Nginx 镜像
                docker build -t crmeb-nginx:latest ./nginx
                
                # 使用 docker-compose 启动本地镜像
                docker-compose -f docker-compose.build.yml up -d
                
                # 查看日志
                docker-compose -f docker-compose.build.yml logs -f
                
                # 测试访问
                curl http://localhost:8011
                
                # 进入 PHP 容器调试
                docker exec -it crmeb_php bash
                
                # 停止并删除测试容器
                docker-compose -f docker-compose.build.yml down
                

                # 本地运行 PHP 镜像测试
                docker run -d -p 9000:9000 --name test-php 
                  crmeb-php:latest
                
                # 检查 PHP 版本和扩展
                docker exec test-php php -v
                docker exec test-php php -m
                
                # 清理测试容器
                docker rm -f test-php
                
                # 本地运行 MySQL 镜像测试
                docker run -d -p 3306:3306 --name test-mysql 
                  -e MYSQL_ROOT_PASSWORD=123456 
                  crmeb-mysql:latest
                
                # 检查 MySQL 版本
                docker exec test-mysql mysql -V
                
                # 清理测试容器
                docker rm -f test-mysql
                
                # 本地运行 Redis 镜像测试
                docker run -d -p 6379:6379 --name test-redis 
                  crmeb-redis:latest
                
                # 检查 Redis 版本
                docker exec test-redis redis-server -v
                
                # 清理测试容器
                docker rm -f test-redis
                
                # 本地运行 Nginx 镜像测试
                docker run -d -p 80:80 --name test-nginx 
                  crmeb-nginx:latest
                
                # 检查 Nginx 版本
                docker exec test-nginx nginx -v
                
                # 清理测试容器
                docker rm -f test-nginx
                

                # 1. 基础层
                FROM php:7.4-fpm
                
                # 2. 系统依赖层
                RUN apt-get update && apt-get install -y 
                    libpng-dev libjpeg-dev libfreetype6-dev 
                    libcurl4-openssl-dev libbcmath-dev libmbstring-dev 
                    libzip-dev unzip git 
                    && docker-php-ext-configure gd 
                    && docker-php-ext-install gd curl bcmath mbstring zip pdo pdo_mysql
                
                # 3. PHP 扩展层
                RUN pecl install redis 
                    && docker-php-ext-enable redis
                
                # 4. 应用层
                COPY . /var/www
                RUN composer install --no-dev --optimize-autoloader
                
                # 5. 配置层
                COPY php.ini /usr/local/etc/php/
                

                # 查看构建历史
                docker history ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest
                
                # 进入容器调试
                docker exec -it <容器名> bash
                
                # 查看资源使用
                docker stats <容器名>
                
                # 查看日志
                docker logs -f <容器名>
                
                # 查看构建过程中的详细日志
                docker buildx build --platform linux/amd64,linux/arm64 
                  -t ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest 
                  --push ./docker-compose-dev/allinone --progress=plain
                

                • Docker 版本 ≥ 20.10.0
                • 已登录腾讯云镜像仓库
                • Buildx 构建器已创建并启用(使用 docker buildx use multiarch
                • 包含 --platform linux/amd64,linux/arm64 参数
                • 包含 --push 参数推送镜像
                • 基础镜像支持多架构
                • 网络连接正常,能够访问镜像仓库和基础镜像源

                1. 非 root 用户运行
                RUN groupadd -g 1000 www && useradd -u 1000 -g www www
                USER www
                
                1. 敏感信息管理
                • 使用环境变量注入敏感信息
                • 避免密码硬编码
                • 使用专用镜像仓库账号
                • 不在 Dockerfile 中包含敏感信息
                1. 最小化攻击面
                • 只暴露必要端口
                • 使用官方基础镜像
                • 定期更新基础镜像
                • 移除不需要的软件和服务

                • 将不常变化的操作放在 Dockerfile 前面,利用 Docker 缓存
                • 分离依赖安装和代码复制
                • 启用 OPcache 提高 PHP 性能
                • 配置适当的 PHP-FPM 进程数
                • 使用 Redis 缓存减轻数据库压力
                • 优化 Nginx 配置,启用 gzip 压缩
                • 使用多阶段构建减小镜像体积

                适用版本: CRMEB 商城系统 v2.0

                到此这篇关于Trae快速构建自己项目的docker镜像的文章就介绍到这了,更多相关Trae构建docker镜像内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!

                站内搜索