最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker滾動標簽無感升級+一鍵回滾的完整方案

 更新時間:2026年06月01日 10:03:45   作者:駕馭人生  
本文詳細介紹了Docker鏡像滾動更新機制,涵蓋大版本與小版本升級規(guī)則,提供極簡命令操作,確保升級無縫無感,覆蓋開發(fā)、測試、生產全流程,支持運維人員快速掌握,需要的朋友可以參考下

文檔說明

  • 閱讀對象:開發(fā)人員、運維人員
  • 文檔特點:無冗余專業(yè)術語,全流程傻瓜式分步操作,所有命令可直接復制運行,零思考成本;原生長命令全部配套極簡封裝短命令,一套文檔覆蓋研發(fā)+運維全流程
  • 核心機制:master分支僅存放代碼,禁止構建任何Docker鏡像;所有鏡像僅由Gitlab網頁Tag觸發(fā)構建,自動生成固定版本鏡像+滾動latest鏡像,同大版本小版本升級無需修改任何yml配置
  • 脫敏后適配服務:biz-schedule-service 業(yè)務調度服務
  • 脫敏后適配環(huán)境:Jenkins雙并行流水線(.NET Windows編譯 + Linux Docker構建)、通用Nexus私有鏡像倉庫、Docker Compose編排、Gitlab代碼倉庫

【文檔開篇一句話核心總結·必看】

  1. ? 同大版本小版本迭代(2.3.0→2.3.1):接口完全兼容,無需修改docker-compose.yml任何配置,直接執(zhí)行up/upall極簡命令即可完成無感升級;
  2. ? 跨大版本迭代(2.x→3.x):架構、接口不兼容,流水線不會自動切換latest滾動標簽,必須手動修改compose鏡像標簽后再執(zhí)行升級;
  3. ?? 版本回滾全場景紅線:禁止使用docker compose pull拉取鏡像,統(tǒng)一使用roll命令本地重置滾動標簽,全程無需改動配置文件。

1. 方案整體規(guī)則(必看,5秒讀懂核心邏輯)

1.1 版本升級邊界規(guī)則

  1. 大版本升級(2.x → 3.x):接口/架構不兼容,必須手動修改docker-compose.yml鏡像標簽,沿用原有傳統(tǒng)升級流程
  2. 小版本升級(2.3.0 → 2.3.1):Bug修復、兼容功能迭代,全程無需修改任何docker-compose.yml配置文件
  3. 版本回滾能力:流水線永久保留固定版本鏡像,支持一鍵回滾,線上故障可快速兜底,版本全程可追溯
  4. 存量兼容:完全兼容現有通用服務器安裝腳本,無需改動原有部署腳本與上線流程

1.2 雙鏡像標簽分工(流水線自動生成,無需人工干預)

鏡像標簽類型示例核心作用是否覆蓋
固定精準版本標簽2.3.2用于版本記錄、故障回滾,永久保存在鏡像倉庫,不可刪除禁止覆蓋
主版本滾動標簽2-latestdocker-compose.yml固定綁定該標簽,每次發(fā)版自動指向當前2系列最新鏡像每次發(fā)版自動覆蓋

1.3 三大分支使用紅線(嚴禁違規(guī)操作)

  1. master分支:代碼主干分支,禁止構建、禁止推送任何Docker鏡像,僅用于合并最終穩(wěn)定代碼
  2. develop分支:測試環(huán)境專用分支,僅生成beta測試鏡像,禁止部署至生產環(huán)境
  3. Git Tag:生產鏡像唯一構建入口,固定格式:v主版本.次版本.補丁版本(例:v2.3.2),僅允許在Gitlab網頁端創(chuàng)建,禁止本地命令行打Tag

2. 開發(fā)端:Gitlab網頁打Tag發(fā)版步驟(無命令行,純點擊操作)

關鍵說明:本項目所有版本Tag均僅在Gitlab網頁手動創(chuàng)建,無需本地Git命令、無需本地推送Tag,全程網頁點擊即可觸發(fā)流水線

進入項目Gitlab主頁,切換至【分支】頁面,確認所有代碼已合并至master主干分支

頂部導航點擊【標簽】,進入標簽管理頁,點擊右上角【新建標簽】

規(guī)范填寫標簽信息(嚴格遵守格式,禁止自定義):

  • 標簽名稱:v2.3.2(必須小寫v開頭)
  • 來源分支:選擇master
  • 發(fā)布說明:可選填寫本次迭代更新內容

點擊【創(chuàng)建標簽】,系統(tǒng)自動觸發(fā)Jenkins流水線,無需人工額外操作

流水線執(zhí)行完成,自動生成2個生產鏡像并推送至通用私有Nexus倉庫:

  • 固定版本鏡像:nexus\.docker\.com/public\-docker/biz\-schedule\-service:2\.3\.2
  • 滾動最新鏡像:nexus\.docker\.com/public\-docker/biz\-schedule\-service:2\-latest

禁止操作清單:禁止直接推送master分支代碼觸發(fā)鏡像構建;禁止私自修改Tag格式;禁止本地命令行打Tag推送;禁止人工修改Nexus倉庫latest鏡像標簽

3. Jenkins流水線說明(已上線,無需修改)

3.1 流水線整體邏輯

流水線采用雙并行流程,完全保留原有業(yè)務邏輯,僅調整Docker鏡像構建觸發(fā)規(guī)則,不影響原有Windows端IIS發(fā)布流程:

  1. Dotnet Windows流程:保留原有代碼編譯、壓縮包上傳、IIS發(fā)布,無任何變更
  2. Docker Linux流程:關閉master分支鏡像構建,僅Tag觸發(fā)時自動生成固定版本+滾動雙鏡像

3.2 完整Jenkinsfile配置(已脫敏,可直接復用)

pipeline {
    agent any
    stages {
        stage('Parallel Stage') {
            parallel {
                stage('Dotnet Flow') {
                    agent {
                        label "windows"
                    }
                    stages {
                        stage('Build Push') {
                            when {
                                not {
                                    buildingTag()
                                }
                            }
                            steps {
                                bat "dotnet clean"
                                bat "dotnet build -c Release"
                            }
                        }
                        stage('Build Tag') {
                            when {
                                buildingTag()
                            }
                            steps {
                                bat "dotnet clean"
                                bat "dotnet publish .\\host\\Biz.ScheduleService.HttpApi.Host\\Biz.ScheduleService.HttpApi.Host.csproj -p:PublishProfile=FolderProfile -o .\\host\\Biz.ScheduleService.HttpApi.Host\\Publish -c Release -p:Version=${env.TAG_NAME.substring(1)}"
                                bat "dotnet publish .\\host\\Biz.ScheduleService.DbMigrator\\Biz.ScheduleService.DbMigrator.csproj -p:PublishProfile=FolderProfile -o .\\host\\Biz.ScheduleService.DbMigrator\\Publish -c Release -p:Version=${env.TAG_NAME.substring(1)}"
                            }
                        }
                        stage('Archive Push') {
                            when {
                                branch 'master'
                                not { buildingTag() }
                            }
                            steps {
                                bat "xcopy .\\host\\Biz.ScheduleService.HttpApi.Host\\Publish\\* .\\bin\\Host\\ /E/Y"
                                bat "xcopy .\\host\\Biz.ScheduleService.DbMigrator\\Publish\\* .\\bin\\DbMigrator\\ /E/Y"
                                nexusArtifactUploader(
                                    nexusVersion: 'nexus3',
                                    protocol: 'http',
                                    nexusUrl: "${env.NEXUS_SERVER}",
                                    groupId: 'raw',
                                    version: "${env.BRANCH_NAME}",
                                    repository: 'public-raw',
                                    credentialsId: 'nexus-admin',
                                    artifacts: [
                                        [artifactId: 'Biz-Schedule-Service',file: "bin\\Package.zip",type: 'zip']
                                    ]
                                )
                                bat "rmdir /s /q bin"
                            }
                        }
                    }
                }
                stage('Docker Flow') {
                    agent {
                        label "linux"
                    }
                    stages {
                        stage('Build Beta Image') {
                            when { branch 'develop' }
                            steps {
                                script{
                                    docker.build("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:beta", "--build-arg http_proxy=${env.NAT_PROXY} --build-arg https_proxy=${env.NAT_PROXY} -f host/Biz.ScheduleService.HttpApi.Host/Dockerfile host/Biz.ScheduleService.HttpApi.Host")
                                    docker.withRegistry("${env.NEXUS_SERVER}",'nexus-admin'){
                                        docker.image("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:beta").push()
                                    }
                                }
                            }
                        }
                        stage('Master Skip Build') {
                            when { branch 'master' }
                            steps { echo "master分支禁止構建鏡像,等待Tag觸發(fā)發(fā)版" }
                        }
                        stage('Build Release Image') {
                            when { buildingTag() }
                            steps {
                                script{
                                    env.FULL_VERSION = env.TAG_NAME.substring(1)
                                    env.MAJOR_VERSION = env.FULL_VERSION.split("\\.")[0]
                                    // 構建固定版本鏡像
                                    docker.build("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:${env.FULL_VERSION}", "--build-arg http_proxy=${env.NAT_PROXY} --build-arg https_proxy=${env.NAT_PROXY} -f host/Biz.ScheduleService.HttpApi.Host/Dockerfile host/Biz.ScheduleService.HttpApi.Host")
                                    // 綁定滾動latest標簽
                                    docker.image("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:${env.FULL_VERSION}").tag("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:${env.MAJOR_VERSION}-latest")
                                    // 推送雙標簽至倉庫
                                    docker.withRegistry("${env.NEXUS_SERVER}",'nexus-admin'){
                                        docker.image("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:${env.FULL_VERSION}").push()
                                        docker.image("${env.NEXUS_SERVER}/public-docker/biz-schedule-service:${env.MAJOR_VERSION}-latest").push()
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

4. Docker Compose 固定配置(一次配置,永久無需修改)

4.1 生產環(huán)境配置(脫敏版)

version: '3.8'
services:
  biz-schedule-service:
    image: nexus.docker.com/public-docker/biz-schedule-service:2-latest
    container_name: biz-schedule-service
    restart: always
    ports:
      - 55021:80
    hostname: biz-schedule-service
    volumes:
      - ./biz-schedule-service/Logs:/app/Logs
      - ./biz-schedule-service/config/appsettings.json:/app/appsettings.json
    environment:
      - ASPNETCORE_URLS=http://localhost:80
      - TZ=Asia/Shanghai
    logging:
      driver: json-file
      options:
        max-size: 10m
        max-file: '3'
    networks:
      - public-net
      - internal-net
    healthcheck:
      test: ["CMD", "curl", "-s", "http://localhost:80/Health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
networks:
  public-net:
  internal-net:

4.2 測試環(huán)境配置(脫敏版)

version: '3.8'
services:
  biz-schedule-service:
    image: nexus.docker.com/public-docker/biz-schedule-service:beta
    container_name: biz-schedule-service-test
    restart: always
    ports:
      - 55021:80
    hostname: biz-schedule-service-test
    volumes:
      - ./biz-schedule-service/Logs:/app/Logs
      - ./biz-schedule-service/config/appsettings.json:/app/appsettings.json
    environment:
      - ASPNETCORE_URLS=http://localhost:80
      - TZ=Asia/Shanghai
    logging:
      driver: json-file
      options:
        max-size: 10m
        max-file: '3'
    networks:
      - public-net
      - internal-net
    healthcheck:
      test: ["CMD", "curl", "-s", "http://localhost:80/Health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s
networks:
  public-net:
  internal-net:

5. 運維升級操作手冊(原生長命令 + 配套極簡封裝命令 雙版本)

5.1 前置準備(必看前置要求)

  • 流水線Tag構建完成,Nexus私有倉庫已更新2-latest最新鏡像
  • 硬性前置要求:運維執(zhí)行所有docker compose相關命令前,必須人工手動cd進入docker-compose.yml同級目錄,禁止在其他目錄執(zhí)行命令
  • 提前部署后文docker極簡快捷運維腳本,全程只用單單詞短命令,無需敲冗長原生命令

5.2 單服務升級(僅升級調度服務,最小業(yè)務影響)

原生原始長命令(參考)

# 拉取最新滾動鏡像
docker compose pull biz-schedule-service
# 僅重啟當前服務,不重啟依賴服務,最小業(yè)務影響
docker compose up -d --no-deps biz-schedule-service

極簡封裝短命令(推薦日常使用)

# 極簡核心命令(僅升級)
up biz-schedule-service

5.3 多服務升級(兩種場景)

場景1:全部服務統(tǒng)一升級

原生長命令

docker compose pull
docker compose up -d

極簡短命令

# 極簡核心命令(僅升級)
upall

場景2:指定多個服務精準升級(不影響其他服務)

極簡腳本已支持多服務傳參,用法和原生命令完全一致,生產建議分批升級,降低風險

原生長命令

docker compose pull 服務1 服務2
docker compose up -d --no-deps 服務1 服務2

極簡短命令

up 服務名1 服務名2      # 批量精準升級多個服務,互不影響其他業(yè)務服務

5.4 升級結果校驗(通用)

原生長命令

docker compose ps
docker compose logs -f biz-schedule-service

極簡短命令

# 極簡排查命令
ps                  # 查看容器狀態(tài)
log biz-schedule-service # 實時啟動日志

6. 運維回滾操作手冊(全文核心紅線)

全文最重要紅線(強制執(zhí)行):docker compose pull 只能拉取當前標簽指向的最新鏡像,無法自動拉取歷史舊版本,所有回滾操作禁止使用pull命令,必須本地重置鏡像標簽后重啟服務

6.1 臨時緊急回滾(不改yml配置,快速恢復業(yè)務)

場景1:單服務回滾(生產推薦,最小影響)

原生長命令(步驟繁瑣)

# 1.拉取需要回滾的歷史固定版本鏡像
docker pull nexus.docker.com/public-docker/biz-schedule-service:2.3.1
# 2.本地覆蓋滾動標簽,切回舊版本
docker tag nexus.docker.com/public-docker/biz-schedule-service:2.3.1 nexus.docker.com/public-docker/biz-schedule-service:2-latest
# 3.重啟服務完成回滾
docker compose up -d --no-deps biz-schedule-service

極簡短命令(一行直接回滾)

roll biz-schedule-service 2.3.1   # 一鍵回滾至指定歷史固定版本,無需改yml

場景2/場景3:多服務/全服務回滾

極簡腳本roll函數可按需擴展,生產環(huán)境禁止批量全量回滾,推薦單服務逐個回滾,精準控制故障影響范圍

6.2 永久固定版本回滾(長期鎖定舊版本,關閉自動滾動)

直接修改compose鏡像標簽為固定版本,徹底脫離滾動標簽體系,后續(xù)不再跟隨流水線自動升級:

image: nexus.docker.com/public-docker/biz-schedule-service:2.3.1

7. 大版本升級流程(2.x → 3.x 架構不兼容升級)

  1. 核心底層原理:流水線僅會對同一個主版本覆蓋latest標簽(2-latest永遠只更新2系列鏡像),不會生成跨主版本標簽,從源頭杜絕無序升級,因此大版本切換必須人工介入
  2. 開發(fā)在Gitlab打新版Tag:v3.0.0,流水線自動生成3.0.0固定鏡像、3-latest滾動鏡像
  3. 運維手動修改docker-compose.yml,將鏡像標簽從2-latest 修改為 3-latest
  4. 同步腳本修改:編輯運維快捷腳本,將roll函數內硬編碼的2-latest改為3-latest,保證回滾命令正常使用
  5. 修改完成后,執(zhí)行極簡升級命令upall 完成全量大版本升級

8. 存量腳本兼容說明

現有通用服務器安裝腳本無需任何代碼修改,腳本初始化部署時直接寫入2-latest滾動標簽即可,完全適配本次滾動升級方案,原有服務器初始化、批量部署邏輯保持不變。

9. 常見問題FAQ(一線運維現場排錯全覆蓋)

問題1:執(zhí)行up后鏡像沒有更新
原因:服務器本地緩存舊版2-latest鏡像
解決:執(zhí)行prune清理本地懸空鏡像,再重新執(zhí)行up升級

問題2:docker compose pull能否自動拉取舊版本?
答案:絕對不能,pull僅能拉取當前標簽指向的最新鏡像,回滾必須使用roll命令重置本地鏡像標簽

問題3:是否可以使用不帶主版本的latest標簽?
禁止:嚴禁直接使用:latest,會造成跨版本無序升級,破壞版本管控體系

問題4:能否手動修改Nexus倉庫內latest鏡像?
禁止:所有鏡像標簽變更統(tǒng)一由Jenkins流水線執(zhí)行,人工修改會導致多環(huán)境版本不一致

問題5:能否刪除倉庫內歷史固定版本鏡像?
禁止:固定版本鏡像為回滾兜底資源,永久保留,不可清理刪除

問題6:大版本升級是否需要改兩處配置?(重點答疑)
答案:必須修改兩處:①docker-compose.yml內鏡像latest標簽 ②運維腳本roll函數內硬編碼latest標簽,兩處同步修改后方可正常升級+回滾

問題7:ps命令報錯exit status 14:no configuration file provided
根因:當前目錄無docker-compose.yml文件
解決方案:人工手動cd切換至yml同級目錄,無任何自動目錄跳轉工具,運維自主管控工作目錄

10. 全流程總覽

  1. 開發(fā)合并代碼至master(master分支禁止構建鏡像)
  2. Gitlab網頁創(chuàng)建vX.Y.Z Tag → 自動觸發(fā)Jenkins流水線
  3. 流水線生成固定版本鏡像+同主版本滾動latest鏡像(僅同大版本自動滾動,跨大版本不自動變更
  4. 運維手動cd進入compose目錄 → 執(zhí)行up/upall極簡命令完成同大版本小版本升級(無需改配置)
  5. 線上異常 → 執(zhí)行roll極簡命令一鍵回滾(禁止pull回滾)
  6. 跨大版本迭代 → 同步修改yml配置+運維腳本,再執(zhí)行upall升級

11. 配套Docker極簡運維腳本部署(傻瓜式分步操作)

前文所有升級、回滾、啟停、日志短命令,均依賴該自定義bash腳本;部署后新開終端、服務器重啟均可永久使用,無需記憶原生docker compose長命令。兩種部署方式二選一即可,推薦方式一,操作最簡單

腳本前置統(tǒng)一說明

  1. 腳本僅終端加載別名/函數,無后臺進程、無網絡請求、無端口監(jiān)聽,無網絡報錯風險
  2. 所有命令必須填寫完整服務名,不支持模糊匹配,生產環(huán)境操作更安全
  3. 所有命令完全兼容docker compose原生邏輯,不改動容器、鏡像、網絡底層規(guī)則
  4. 全程不配置任何自動切換目錄腳本/別名,所有命令依賴運維人工cd切換工作目錄
  5. 重裝終端、重新登錄會話、服務器重啟,命令均可自動生效

方式一:直接追加寫入系統(tǒng)bashrc(推薦首選,一步到位)

全局強制硬性規(guī)范(全文統(tǒng)一,強制執(zhí)行)

  1. 腳本部署無目錄限制,任意目錄均可部署
  2. 使用所有docker compose快捷命令前,必須人工手動cd切換至docker-compose.yml所在目錄
  3. 全程不配置任何自動切目錄別名、不做多環(huán)境自動目錄跳轉,回歸原生運維操作規(guī)范

步驟1:備份系統(tǒng)原生環(huán)境配置(必做,出錯可一鍵回滾)

# 備份原有bash配置文件,備份文件和原文件同目錄
cp ~/.bashrc ~/.bashrc.bak

# 校驗備份是否成功,出現.bak文件即為備份完成
ll ~/ | grep bashrc

步驟2:一鍵寫入全套完整運維快捷命令(直接全選復制,一次性粘貼執(zhí)行,無空白缺失)

cat >> ~/.bashrc <<EOF
# Docker Compose 完整全套運維快捷腳本(最終完整版,無任何刪減)
# 適配2-latest滾動標簽發(fā)版方案,包含:升級/回滾/啟停/日志/容器進入/鏡像清理/狀態(tài)監(jiān)控 全功能
# 規(guī)則:1.全命令單單詞好記 2.必填完整服務名,無模糊匹配 3.無后臺常駐、無網絡報錯
# 適用:日常全場景運維 + 本次版本升級/回滾專項需求

# ========== 基礎別名 ==========
alias ll='ls -la --color=auto'
alias cgrep='grep --color=auto'

# ========== 全局實時監(jiān)控 ==========
refresh() {
  while true;do clear;docker compose ps;sleep 1;done
}

# ========== 一、版本升級(適配本次滾動標簽) ==========
# 單服務小版本升級:拉取最新鏡像+無依賴重啟,不影響其他服務
up() {
  docker compose pull $1
  docker compose up -d --no-deps $1
}
# 全部服務統(tǒng)一升級
upall() {
  docker compose pull
  docker compose up -d
}

# ========== 二、版本回滾(本次方案專屬,禁止pull回滾) ==========
# 一鍵回滾:拉取歷史固定版本 → 本地覆蓋滾動latest標簽 → 無依賴重啟服務
roll() {
  svc=$1
  old_tag=$2
  base_img="nexus.docker.com/public-docker/${svc}"
  docker pull ${base_img}:${old_tag}
  docker tag ${base_img}:${old_tag} ${base_img}:2-latest
  docker compose up -d --no-deps $svc
}

# ========== 三、服務啟停/重啟全套命令 ==========
restart() {
  docker compose restart --no-deps $1
}
restartall() {
  docker compose restart
}
stop() {
  docker compose stop $1
}
start() {
  docker compose start $1
}

# ========== 四、全套日志排查命令 ==========
log() {
  docker compose logs -f --tail 200 $1
}
historylog() {
  docker compose logs --tail 500 $1
}
glog() {
  docker compose logs --tail 1000 $1 | grep $2
}

# ========== 五、容器狀態(tài)核查全套命令 ==========
ps() {
  docker compose ps
}
img() {
  docker compose images
}
port() {
  docker compose port $1
}
stat() {
  docker compose stats --no-stream $(docker compose ps --quiet $1)
}
uptimec() {
  docker compose ps --format "table {{.Names}}\t{{.Status}}\t{{.CreatedAt}}" $1
}

# ========== 六、容器運維全套操作 ==========
into() {
  docker compose exec -it $1 bash
}
build() {
  docker compose up -d --no-deps --build $1
}
rmsvc() {
  docker compose rm -f $1
}
prune() {
  docker image prune -f
}
cleanall() {
  docker compose down
}
EOF

步驟3:加載配置,讓所有短命令立即生效

# 重載bash配置文件,無需斷開終端重連
source ~/.bashrc

步驟4:驗證腳本部署成功

# 執(zhí)行容器狀態(tài)查詢短命令,正常輸出容器列表即部署完成
ps

方式二:獨立外部腳本掛載(干凈隔離版,不污染原生bashrc)

將所有快捷命令單獨放在獨立sh文件,和系統(tǒng)原生配置完全隔離,后續(xù)維護、刪除更方便,分步完整命令如下

步驟1:統(tǒng)一存放運維腳本目錄,規(guī)范管理文件

# 創(chuàng)建專屬腳本目錄,后續(xù)所有運維腳本統(tǒng)一存放
mkdir -p /opt/docker-cmd/

# 進入目錄
cd /opt/docker-cmd/

步驟2:新建獨立命令腳本,粘貼【純凈版無外層包裹腳本】

關鍵區(qū)分提醒:方式一腳本帶cat&gt;&gt;EOF外層包裹;方式二獨立sh文件禁止粘貼外層EOF代碼,僅復制下方純凈腳本,避免腳本執(zhí)行報錯

# ========== 基礎別名 ==========
alias ll='ls -la --color=auto'
alias cgrep='grep --color=auto'

# ========== 全局實時監(jiān)控 ==========
refresh() {
  while true;do clear;docker compose ps;sleep 1;done
}

# ========== 一、版本升級 ==========
up() {
  docker compose pull $1
  docker compose up -d --no-deps $1
}
upall() {
  docker compose pull
  docker compose up -d
}

# ========== 二、版本回滾 ==========
roll() {
  local svc=$1
  local old_tag=$2
  base_img="nexus.docker.com/public-docker/${svc}"
  docker pull ${base_img}:${old_tag}
  docker tag ${base_img}:${old_tag} ${base_img}:2-latest
  docker compose up -d --no-deps $1
}

# ========== 三、服務啟停重啟 ==========
restart() {
  docker compose restart --no-deps $1
}
restartall() {
  docker compose restart
}
stop() {
  docker compose stop $1
}
start() {
  docker compose start $1
}

# ========== 四、日志排查 ==========
log() {
  docker compose logs -f --tail 200 $1
}
historylog() {
  docker compose logs --tail 500 $1
}
glog() {
  docker compose logs --tail 1000 $1 | grep $2
}

# ========== 五、容器狀態(tài)核查 ==========
ps() {
  docker compose ps
}
img() {
  docker compose images
}
port() {
  docker compose port $1
}
stat() {
  docker compose stats --no-stream $(docker compose ps --quiet $1)
}
uptimec() {
  docker compose ps --no-trunc --format "table {{.Names}}\t{{.Status}}\t{{.CreatedAt}}" $1
}

# ========== 六、容器運維 ==========
into() {
  docker compose exec -it $1 bash
}
build() {
  docker compose up -d --no-deps --build $1
}
rmsvc() {
  docker compose rm -f $1
}
prune() {
  docker image prune -f
}
cleanall() {
  docker compose down
}
# 創(chuàng)建獨立腳本文件
vim docker-short-cmd.sh

VIM編輯器標準操作 + 現場三大報錯一站式解決方案

Vim標準寫入步驟(杜絕粘貼亂碼)

  • 執(zhí)行 vim docker\-short\-cmd\.sh 打開文件,默認命令模式
  • 必須按下小寫i,進入INSERT編輯模式(左下角顯示INSERT)
  • 全選粘貼上方純凈版腳本代碼,嚴禁復制帶EOF外層包裹代碼
  • 粘貼完成,按ESC退回命令模式
  • 輸入 :wq保存退出

報錯1:E45: &#39;readonly&#39; option is set 只讀報錯
- 報錯原因:文件權限不足、系統(tǒng)標記只讀
- 臨時應急保存:命令模式輸入 :wq\! 強制保存退出
- 永久修復權限:chmod 644 docker\-short\-cmd\.sh

報錯2:exit status 14 無配置文件報錯(現場實測報錯)
?? 硬性規(guī)范,不可繞過:不做任何自動目錄跳轉腳本/別名
- 根因:當前執(zhí)行目錄無docker-compose.yml
- 標準解決:運維人工手動cd切換至yml同級目錄,自主管控工作目錄

報錯3:新開終端快捷命令失效
- 根因:僅臨時source未寫入開機自啟配置
- 解決:按照文檔步驟寫入bashrc,終端重啟自動加載命令

步驟3:添加腳本執(zhí)行權限

chmod +x /opt/docker-cmd/docker-short-cmd.sh

步驟4:設置終端開機自動加載腳本

# 將腳本引用寫入bashrc,每次登錄終端自動加載
echo "source /opt/docker-cmd/docker-short-cmd.sh" >> ~/.bashrc

步驟5:立即生效+驗證可用性

# 重載配置
source ~/.bashrc

# 驗證命令
ps

步驟6:腳本異常一鍵回滾(應急兜底)

# 還原備份的原生bash配置,一秒恢復服務器初始狀態(tài)
cp ~/.bashrc.bak ~/.bashrc && source ~/.bashrc

補充1:腳本維護與大版本適配說明

1. 腳本日常修改維護方式

  • 方式一(bashrc內嵌):直接編輯 vim \~/\.bashrc,修改底部腳本后執(zhí)行 source \~/\.bashrc 重載
  • 方式二(獨立sh腳本):直接編輯 vim /opt/docker\-cmd/docker\-short\-cmd\.sh,重載配置即可,不污染系統(tǒng)原生配置

2. roll回滾腳本大版本適配(重點)

當前roll函數硬編碼2-latest,僅適配2.x系列版本;后續(xù)升級至3.x及以上大版本時,必須同步修改腳本內標簽:將2\-latest 全局替換為 3\-latest,重載腳本后回滾功能方可正常使用

補充2:腳本完整卸載步驟(無殘留清理)

方式一:卸載bashrc內嵌版腳本

# 還原備份配置,一鍵徹底卸載
cp ~/.bashrc.bak ~/.bashrc && source ~/.bashrc

方式二:卸載獨立外部腳本版(完整清理)

# 1. 刪除自動加載配置行
sed -i '/docker-short-cmd.sh/d' ~/.bashrc

# 2. 刪除腳本整個目錄
rm -rf /opt/docker-cmd/

# 3. 重載環(huán)境,命令徹底失效
source ~/.bashrc

補充3:生產環(huán)境安全紅線

  • 快捷腳本僅限root管理員使用,禁止普通業(yè)務用戶加載,防止誤回滾、誤刪容器
  • 服務器重啟、終端重連,快捷命令自動生效,無需重復部署
  • 鏡像緩存異常優(yōu)先執(zhí)行prune清理懸空鏡像,再執(zhí)行升級操作
  • 禁止私自修改腳本內部函數,所有腳本變更統(tǒng)一登記備案

12. 極簡命令速查表(值班直接復制,無需翻閱全文)

## ??全局前置強制步驟(所有命令執(zhí)行前必做)
## 人工手動cd進入docker-compose.yml所在目錄,無任何自動目錄跳轉
cd /data/compose-project/

## 一、核心高頻命令(升級+回滾,生產90%場景使用)
up biz-schedule-service     # 單服務小版本無感升級,無需改yml
upall                       # 全局所有服務統(tǒng)一升級
roll biz-schedule-service 2.3.1  # 一鍵回滾,嚴禁pull回滾

## ??大版本升級硬性要求(2.x→3.x)
# 1. 修改docker-compose.yml:2-latest → 3-latest
# 2. 修改運維腳本roll函數:2-latest → 3-latest
# 3. 執(zhí)行upall完成全量升級

## 二、日常運維全套命令
# 服務啟停重啟
restart 服務名        # 無依賴單服務重啟
restartall            # 全部服務重啟
stop 服務名           # 停止指定服務
start 服務名          # 啟動指定服務

# 日志排查
log 服務名            # 實時滾動日志
historylog 服務名     # 查看近500行歷史日志
glog 服務名 關鍵詞    # 日志關鍵詞過濾

# 容器狀態(tài)監(jiān)控
ps                    # 查看容器運行狀態(tài)
img                   # 查看本地鏡像列表
port 服務名           # 查看端口映射
stat 服務名           # 查看容器CPU/內存占用
uptimec 服務名        # 查看容器運行時長

# 容器深度運維
into 服務名           # 進入容器終端
build 服務名          # 本地重建容器
rmsvc 服務名          # 強制刪除容器(保留數據卷)
prune                 # 清理懸空鏡像
cleanall              # 銷毀全部容器+網絡
refresh               # 全屏實時監(jiān)控容器狀態(tài)

以上就是Docker滾動標簽無感升級+一鍵回滾的完整方案的詳細內容,更多關于Docker滾動標簽無感升級與一鍵回滾的資料請關注腳本之家其它相關文章!

相關文章

  • Docker 安裝 MySQL 并實現遠程連接教程

    Docker 安裝 MySQL 并實現遠程連接教程

    這篇文章主要介紹了Docker 安裝 MySQL 并實現遠程連接的教程,幫助大家更好的理解和使用docker容器,感興趣的朋友可以了解下
    2020-09-09
  • docker-compose部署mysql數據庫完整步驟

    docker-compose部署mysql數據庫完整步驟

    Docker-Compose項目是Docker官方的開源項目,負責實現對Docker容器集群的快速編排,這篇文章主要給大家介紹了關于docker-compose部署mysql數據庫的完整步驟,需要的朋友可以參考下
    2024-05-05
  • 使用Docker構建Python FastAPI鏡像的最佳實踐

    使用Docker構建Python FastAPI鏡像的最佳實踐

    本文分享了優(yōu)化Python FastAPI應用Docker部署的關鍵技巧:使用slim基礎鏡像減小體積,通過多階段構建分離編譯與運行環(huán)境,利用.dockerignore排除無關文件,推薦采用非root用戶運行增強安全性,需要的朋友可以參考下
    2026-02-02
  • docker國內鏡像源配置及走代理設置小結

    docker國內鏡像源配置及走代理設置小結

    本文主要介紹了配置Docker國內鏡像源及代理設置,以加快鏡像拉取速度,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-01-01
  • 詳解docker中Dockerfile指令創(chuàng)建鏡像

    詳解docker中Dockerfile指令創(chuàng)建鏡像

    這篇文章主要介紹了詳解docker中Dockerfile指令創(chuàng)建鏡像,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Docker?Compose?Start命令優(yōu)雅重啟容器服務詳解

    Docker?Compose?Start命令優(yōu)雅重啟容器服務詳解

    Docker Compose Start 是用于重啟已停止容器的輕量級命令,優(yōu)勢在于快速恢復服務、保持容器狀態(tài)及資源節(jié)約,這篇文章主要介紹了Docker?Compose?Start命令優(yōu)雅重啟容器服務的相關資料,需要的朋友可以參考下
    2025-08-08
  • Docker運行hello-world鏡像失敗或超時的問題

    Docker運行hello-world鏡像失敗或超時的問題

    在安裝Docker并嘗試運行hello-world時,可能會遇到超時問題,這通常是由于默認的鏡像源訪問速度慢造成的,解決這個問題的辦法是更換鏡像源,雖然許多人推薦使用阿里云的鏡像源,對Docker hello-world超時問題感興趣的朋友一起看看吧
    2024-09-09
  • Docker Compose 與 Harbor 私有倉庫詳解

    Docker Compose 與 Harbor 私有倉庫詳解

    本文將探討Docker Compose多容器編排工具與Harbor企業(yè)級私有倉庫的核心技術,幫助讀者掌握從容器管理到鏡像安全存儲的完整解決方案,感興趣的朋友一起看看吧
    2025-06-06
  • Docker部署安裝Nginx的詳細過程

    Docker部署安裝Nginx的詳細過程

    Nginx 是一款高性能的 web 服務器、反向代理服務器以及電子郵件(IMAP/POP3/SMTP)代理服務器,這篇文章主要介紹了Docker部署安裝Nginx,需要的朋友可以參考下
    2024-04-04
  • 詳解Ubuntu Docker Registry 搭建私有倉庫

    詳解Ubuntu Docker Registry 搭建私有倉庫

    這篇文章主要介紹了詳解Ubuntu Docker Registry 搭建私有倉庫,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02

最新評論

吴旗县| 城市| 河北区| 武义县| 姚安县| 普兰店市| 安新县| 卓资县| 兴山县| 布尔津县| 视频| 塘沽区| 开远市| 邛崃市| 玉溪市| 深泽县| 盐源县| 台江县| 伊吾县| 五华县| 新野县| 习水县| 古田县| 静乐县| 英吉沙县| 依安县| 册亨县| 怀远县| 望城县| 青阳县| 大方县| 宁陕县| 长春市| 耒阳市| 青龙| 高青县| 两当县| 贡嘎县| 淳化县| 南丹县| 平阴县|