文章目录
- 项目名称: 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 构建镜像,不推送到仓库:
- # 本地运行 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 参数推送镜像 基础镜像支持多架构 网络连接正常,能够访问镜像仓库和基础镜像源
- 非 root 用户运行 RUN groupadd -g 1000 www && useradd -u 1000 -g www www USER www 敏感信息管理 使用环境变量注入敏感信息 避免密码硬编码 使用专用镜像仓库账号 不在 Dockerfile 中包含敏感信息 最小化攻击面 只暴露必要端口 使用官方基础镜像 定期更新基础镜像 移除不需要的软件和服务
- 将不常变化的操作放在 Dockerfile 前面,利用 Docker 缓存 分离依赖安装和代码复制 启用 OPcache 提高 PHP 性能 配置适当的 PHP-FPM 进程数 使用 Redis 缓存减轻数据库压力 优化 Nginx 配置,启用 gzip 压缩 使用多阶段构建减小镜像体积 适用版本: CRMEB 商城系统 v2.0 到此这篇关于Trae快速构建自己项目的docker镜像的文章就介绍到这了,更多相关Trae构建docker镜像内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!
目录
- 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 参数推送镜像
- 基础镜像支持多架构
- 网络连接正常,能够访问镜像仓库和基础镜像源
docker buildx use multiarch)--platform linux/amd64,linux/arm64 参数--push 参数推送镜像
- 非 root 用户运行
RUN groupadd -g 1000 www && useradd -u 1000 -g www www
USER www
- 敏感信息管理
- 使用环境变量注入敏感信息
- 避免密码硬编码
- 使用专用镜像仓库账号
- 不在 Dockerfile 中包含敏感信息
- 最小化攻击面
- 只暴露必要端口
- 使用官方基础镜像
- 定期更新基础镜像
- 移除不需要的软件和服务
- 将不常变化的操作放在 Dockerfile 前面,利用 Docker 缓存
- 分离依赖安装和代码复制
- 启用 OPcache 提高 PHP 性能
- 配置适当的 PHP-FPM 进程数
- 使用 Redis 缓存减轻数据库压力
- 优化 Nginx 配置,启用 gzip 压缩
- 使用多阶段构建减小镜像体积
适用版本: CRMEB 商城系统 v2.0
到此这篇关于Trae快速构建自己项目的docker镜像的文章就介绍到这了,更多相关Trae构建docker镜像内容请搜索风君子博客以前的文章或继续浏览下面的相关文章,希望大家以后多多支持风君子博客!