Trae快速構(gòu)建自己項(xiàng)目的docker鏡像
Trae 設(shè)置添加項(xiàng)目規(guī)則,我這個(gè)是用的騰訊云個(gè)人免費(fèi)鏡像,鏡像地址改成自己的,賬號(hào)密碼也改成自己的,就可以直接使用,就可以全自動(dòng)維護(hù)自己的鏡像了
--- alwaysApply: false description: 陀螺匠項(xiàng)目Docker鏡像構(gòu)建規(guī)范與最佳實(shí)踐,包含Dockerfile編寫(xiě)、分層優(yōu)化、多架構(gòu)構(gòu)建、騰訊云鏡像倉(cāng)庫(kù)管理 ---
Docker鏡像構(gòu)建規(guī)范(CRMEB項(xiàng)目)
項(xiàng)目概述
- 項(xiàng)目名稱: CRMEB 商城系統(tǒng)
- 技術(shù)棧: ThinkPHP 6.x + Workerman + PHP 7.4 + MySQL 5.7 + Redis + Nginx + Docker
- 鏡像倉(cāng)庫(kù): 騰訊云容器鏡像服務(wù) (ccr.ccs.tencentyun.com)
- 構(gòu)建要求: 必須構(gòu)建多架構(gòu)鏡像(linux/amd64 + linux/arm64)
鏡像倉(cāng)庫(kù)地址
| 服務(wù) | 鏡像地址 |
|---|---|
| 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 |
| 完整應(yīng)用 | ccr.ccs.tencentyun.com/crmebky_php/crmebky |
環(huán)境準(zhǔn)備
# 登錄騰訊云容器鏡像服務(wù) docker login ccr.ccs.tencentyun.com # 使用現(xiàn)有的多架構(gòu)構(gòu)建器 docker buildx use multiarch
多架構(gòu)鏡像構(gòu)建與推送(生產(chǎn)環(huán)境)
注意:以下操作僅用于生產(chǎn)環(huán)境推送鏡像到倉(cāng)庫(kù),本地開(kāi)發(fā)調(diào)試請(qǐng)使用上面的【本地開(kāi)發(fā)調(diào)試】章節(jié)。
必須構(gòu)建多架構(gòu)鏡像,支持 linux/amd64 和 linux/arm64 平臺(tái)。
構(gòu)建并推送各服務(wù)鏡像
# 生成時(shí)間標(biāo)簽(強(qiáng)制要求) 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
構(gòu)建完整應(yīng)用鏡像
# 進(jìn)入項(xiàng)目根目錄 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
一鍵構(gòu)建腳本
#!/bin/bash IMAGE_TAG=$(date +%Y%m%d-%H%M%S) echo "鏡像標(biāo)簽: $IMAGE_TAG" export DOCKER_BUILDKIT=1 docker buildx use multiarch # PHP 鏡像 echo "構(gòu)建 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 "構(gòu)建 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 "構(gòu)建 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 "構(gòu)建 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 # 完整應(yīng)用鏡像 echo "構(gòu)建完整應(yīng)用鏡像..." 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 "構(gòu)建完成!標(biāo)簽: latest, $IMAGE_TAG"
鏡像標(biāo)簽規(guī)范
| 標(biāo)簽類(lèi)型 | 格式 | 說(shuō)明 |
|---|---|---|
| latest | latest | 最新穩(wěn)定版本 |
| 時(shí)間標(biāo)簽 | YYYYMMDD-HHMMSS | 每次推送必須添加 |
| 版本標(biāo)簽 | v2.0.1 | 語(yǔ)義化版本 |
| 環(huán)境標(biāo)簽 | dev/test | 開(kāi)發(fā)/測(cè)試環(huán)境 |
強(qiáng)制要求: 每次推送必須讓用戶確認(rèn)地址和標(biāo)簽,推送成功后提示用戶要不要推送"latest"分支。
鏡像驗(yàn)證
# 查看多架構(gòu)信息 docker buildx imagetools inspect ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest # 查看 manifest docker manifest inspect ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest
本地開(kāi)發(fā)調(diào)試(默認(rèn))
本地開(kāi)發(fā)調(diào)試時(shí),使用普通 docker build 構(gòu)建鏡像,不推送到倉(cāng)庫(kù):
構(gòu)建本地鏡像
# 進(jìn)入 docker-compose-dev 目錄 cd ./docker-compose-dev # 構(gòu)建 PHP 鏡像 docker build -t crmeb-php:latest ./php # 構(gòu)建 MySQL 鏡像 docker build -t crmeb-mysql:latest ./mysql # 構(gòu)建 Redis 鏡像 docker build -t crmeb-redis:latest ./redis # 構(gòu)建 Nginx 鏡像 docker build -t crmeb-nginx:latest ./nginx # 使用 docker-compose 啟動(dòng)本地鏡像 docker-compose -f docker-compose.build.yml up -d # 查看日志 docker-compose -f docker-compose.build.yml logs -f # 測(cè)試訪問(wèn) curl http://localhost:8011 # 進(jìn)入 PHP 容器調(diào)試 docker exec -it crmeb_php bash # 停止并刪除測(cè)試容器 docker-compose -f docker-compose.build.yml down
鏡像測(cè)試
# 本地運(yùn)行 PHP 鏡像測(cè)試 docker run -d -p 9000:9000 --name test-php \ crmeb-php:latest # 檢查 PHP 版本和擴(kuò)展 docker exec test-php php -v docker exec test-php php -m # 清理測(cè)試容器 docker rm -f test-php # 本地運(yùn)行 MySQL 鏡像測(cè)試 docker run -d -p 3306:3306 --name test-mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ crmeb-mysql:latest # 檢查 MySQL 版本 docker exec test-mysql mysql -V # 清理測(cè)試容器 docker rm -f test-mysql # 本地運(yùn)行 Redis 鏡像測(cè)試 docker run -d -p 6379:6379 --name test-redis \ crmeb-redis:latest # 檢查 Redis 版本 docker exec test-redis redis-server -v # 清理測(cè)試容器 docker rm -f test-redis # 本地運(yùn)行 Nginx 鏡像測(cè)試 docker run -d -p 80:80 --name test-nginx \ crmeb-nginx:latest # 檢查 Nginx 版本 docker exec test-nginx nginx -v # 清理測(cè)試容器 docker rm -f test-nginx
Dockerfile 分層優(yōu)化
# 1. 基礎(chǔ)層
FROM php:7.4-fpm
# 2. 系統(tǒng)依賴層
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 擴(kuò)展層
RUN pecl install redis \
&& docker-php-ext-enable redis
# 4. 應(yīng)用層
COPY . /var/www
RUN composer install --no-dev --optimize-autoloader
# 5. 配置層
COPY php.ini /usr/local/etc/php/
故障排查
常見(jiàn)問(wèn)題
# 查看構(gòu)建歷史 docker history ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest # 進(jìn)入容器調(diào)試 docker exec -it <容器名> bash # 查看資源使用 docker stats <容器名> # 查看日志 docker logs -f <容器名> # 查看構(gòu)建過(guò)程中的詳細(xì)日志 docker buildx build --platform linux/amd64,linux/arm64 \ -t ccr.ccs.tencentyun.com/crmebky_php/crmebky:latest \ --push ./docker-compose-dev/allinone --progress=plain
構(gòu)建失敗檢查清單
- Docker 版本 ≥ 20.10.0
- 已登錄騰訊云鏡像倉(cāng)庫(kù)
- Buildx 構(gòu)建器已創(chuàng)建并啟用(使用
docker buildx use multiarch) - 包含
--platform linux/amd64,linux/arm64參數(shù) - 包含
--push參數(shù)推送鏡像 - 基礎(chǔ)鏡像支持多架構(gòu)
- 網(wǎng)絡(luò)連接正常,能夠訪問(wèn)鏡像倉(cāng)庫(kù)和基礎(chǔ)鏡像源
安全最佳實(shí)踐
- 非 root 用戶運(yùn)行
RUN groupadd -g 1000 www && useradd -u 1000 -g www www USER www
- 敏感信息管理
- 使用環(huán)境變量注入敏感信息
- 避免密碼硬編碼
- 使用專用鏡像倉(cāng)庫(kù)賬號(hào)
- 不在 Dockerfile 中包含敏感信息
- 最小化攻擊面
- 只暴露必要端口
- 使用官方基礎(chǔ)鏡像
- 定期更新基礎(chǔ)鏡像
- 移除不需要的軟件和服務(wù)
性能優(yōu)化
- 將不常變化的操作放在 Dockerfile 前面,利用 Docker 緩存
- 分離依賴安裝和代碼復(fù)制
- 啟用 OPcache 提高 PHP 性能
- 配置適當(dāng)?shù)?PHP-FPM 進(jìn)程數(shù)
- 使用 Redis 緩存減輕數(shù)據(jù)庫(kù)壓力
- 優(yōu)化 Nginx 配置,啟用 gzip 壓縮
- 使用多階段構(gòu)建減小鏡像體積
適用版本: CRMEB 商城系統(tǒng) v2.0
到此這篇關(guān)于Trae快速構(gòu)建自己項(xiàng)目的docker鏡像的文章就介紹到這了,更多相關(guān)Trae構(gòu)建docker鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章

Trae中安裝和使用 Skills的實(shí)現(xiàn)步驟
本文將詳細(xì)介紹什么是 Skills,為什么需要使用 Skills,以及四種不同的安裝方法,幫助你快速上手并提升開(kāi)發(fā)效率,感興趣的可以了解一下2026-05-15
TRAE 重磅上線 Skills功能:從入門(mén)到實(shí)戰(zhàn)
TRAE生態(tài)迎來(lái)了Skills(Beta)功能的升級(jí),該功能能夠簡(jiǎn)化專業(yè)工作流的構(gòu)建,提供更加輕量化的解決方案,下面就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2026-05-15



