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

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

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

Docker镜像构建规范(CRMEB项目)

项目概述

  • 项目名称: 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

环境准备

bash 复制代码
# 登录腾讯云容器镜像服务
docker login ccr.ccs.tencentyun.com

# 使用现有的多架构构建器
docker buildx use multiarch

多架构镜像构建与推送(生产环境)

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

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

构建并推送各服务镜像

bash 复制代码
# 生成时间标签(强制要求)
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

构建完整应用镜像

bash 复制代码
# 进入项目根目录
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

一键构建脚本

bash 复制代码
#!/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"分支。

镜像验证

bash 复制代码
# 查看多架构信息
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 构建镜像,不推送到仓库:

构建本地镜像

bash 复制代码
# 进入 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

镜像测试

bash 复制代码
# 本地运行 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

Dockerfile 分层优化

dockerfile 复制代码
# 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/

故障排查

常见问题

bash 复制代码
# 查看构建历史
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 用户运行
dockerfile 复制代码
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 压缩
  • 使用多阶段构建减小镜像体积

最后更新时间 : 2026-03-25
适用版本: CRMEB 商城系统 v2.0

相关推荐
milo.qu2 小时前
RockyLinux9.7 docker部署Jisti Meet
linux·docker·容器
Goboy2 小时前
「我的第一次移动端 AI 办公」TRAE SOLO 三端联动, 通勤路上就把活干了,这设计,老罗看了都想当场退役
人工智能·ai编程·trae
梦想与想象-广州大智汇4 小时前
自建docker加速镜像,使用 Cloudflare Workers/Pages 部署加速教程
运维·docker·容器
AI服务老曹5 小时前
架构师视角:如何构建支持GB28181/RTSP的异构AI视频平台?从Docker部署到源码交付的深度实践
人工智能·docker·音视频
用户78937733908537 小时前
Docker 部署踩坑记录:从“构建失败”到“服务跑通”,以及为什么数据被清空了
python·docker
Slow菜鸟8 小时前
Docker 学习篇(三)| Docker安装指南(Linux版)
linux·学习·docker
炸炸鱼.12 小时前
容器技术入门与 Docker 环境部署
docker
宁静@星空12 小时前
007-Docker构建 jar 包成镜像
docker·容器·jar
A-刘晨阳13 小时前
K8s之负载均衡
linux·运维·容器·kubernetes·负载均衡
xmlhcxr14 小时前
从 0 到 1 落地企业级 DevOps CI/CD 流水线:基于 GitLab+Jenkins+Harbor 的完整实践
运维·docker·gitlab·jenkins·harbor·devops