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

Docker滾動(dòng)標(biāo)簽無感升級+一鍵回滾的完整方案

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

文檔說明

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

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

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

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

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

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

1.2 雙鏡像標(biāo)簽分工(流水線自動(dòng)生成,無需人工干預(yù))

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

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

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

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

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

進(jìn)入項(xiàng)目Gitlab主頁,切換至【分支】頁面,確認(rèn)所有代碼已合并至master主干分支

頂部導(dǎo)航點(diǎn)擊【標(biāo)簽】,進(jìn)入標(biāo)簽管理頁,點(diǎn)擊右上角【新建標(biāo)簽】

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

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

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

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

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

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

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

3.1 流水線整體邏輯

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

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

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

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分支禁止構(gòu)建鏡像,等待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]
                                    // 構(gòu)建固定版本鏡像
                                    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")
                                    // 綁定滾動(dòng)latest標(biāo)簽
                                    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")
                                    // 推送雙標(biāo)簽至倉庫
                                    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 生產(chǎn)環(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. 運(yùn)維升級操作手冊(原生長命令 + 配套極簡封裝命令 雙版本)

5.1 前置準(zhǔn)備(必看前置要求)

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

5.2 單服務(wù)升級(僅升級調(diào)度服務(wù),最小業(yè)務(wù)影響)

原生原始長命令(參考)

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

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

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

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

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

原生長命令

docker compose pull
docker compose up -d

極簡短命令

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

場景2:指定多個(gè)服務(wù)精準(zhǔn)升級(不影響其他服務(wù))

極簡腳本已支持多服務(wù)傳參,用法和原生命令完全一致,生產(chǎn)建議分批升級,降低風(fēng)險(xiǎn)

原生長命令

docker compose pull 服務(wù)1 服務(wù)2
docker compose up -d --no-deps 服務(wù)1 服務(wù)2

極簡短命令

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

5.4 升級結(jié)果校驗(yàn)(通用)

原生長命令

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

極簡短命令

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

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

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

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

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

原生長命令(步驟繁瑣)

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

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

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

場景2/場景3:多服務(wù)/全服務(wù)回滾

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

6.2 永久固定版本回滾(長期鎖定舊版本,關(guān)閉自動(dòng)滾動(dòng))

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

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

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

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

8. 存量腳本兼容說明

現(xiàn)有通用服務(wù)器安裝腳本無需任何代碼修改,腳本初始化部署時(shí)直接寫入2-latest滾動(dòng)標(biāo)簽即可,完全適配本次滾動(dòng)升級方案,原有服務(wù)器初始化、批量部署邏輯保持不變。

9. 常見問題FAQ(一線運(yùn)維現(xiàn)場排錯(cuò)全覆蓋)

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

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

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

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

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

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

問題7:ps命令報(bào)錯(cuò)exit status 14:no configuration file provided
根因:當(dāng)前目錄無docker-compose.yml文件
解決方案:人工手動(dòng)cd切換至yml同級目錄,無任何自動(dòng)目錄跳轉(zhuǎn)工具,運(yùn)維自主管控工作目錄

10. 全流程總覽

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# ========== 二、版本回滾(本次方案專屬,禁止pull回滾) ==========
# 一鍵回滾:拉取歷史固定版本 → 本地覆蓋滾動(dòng)latest標(biāo)簽 → 無依賴重啟服務(wù)
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
}

# ========== 三、服務(wù)啟停/重啟全套命令 ==========
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
}

# ========== 六、容器運(yùn)維全套操作 ==========
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:驗(yàn)證腳本部署成功

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

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

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

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

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

# 進(jìn)入目錄
cd /opt/docker-cmd/

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

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

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

# ========== 全局實(shí)時(shí)監(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
}

# ========== 三、服務(wù)啟停重啟 ==========
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
}

# ========== 六、容器運(yùn)維 ==========
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)建獨(dú)立腳本文件
vim docker-short-cmd.sh

VIM編輯器標(biāo)準(zhǔn)操作 + 現(xiàn)場三大報(bào)錯(cuò)一站式解決方案

Vim標(biāo)準(zhǔn)寫入步驟(杜絕粘貼亂碼)

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

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

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

報(bào)錯(cuò)3:新開終端快捷命令失效
- 根因:僅臨時(shí)source未寫入開機(jī)自啟配置
- 解決:按照文檔步驟寫入bashrc,終端重啟自動(dòng)加載命令

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

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

步驟4:設(shè)置終端開機(jī)自動(dòng)加載腳本

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

步驟5:立即生效+驗(yàn)證可用性

# 重載配置
source ~/.bashrc

# 驗(yàn)證命令
ps

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

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

補(bǔ)充1:腳本維護(hù)與大版本適配說明

1. 腳本日常修改維護(hù)方式

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

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

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

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

方式一:卸載bashrc內(nèi)嵌版腳本

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

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

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

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

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

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

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

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

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

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

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

## 二、日常運(yùn)維全套命令
# 服務(wù)啟停重啟
restart 服務(wù)名        # 無依賴單服務(wù)重啟
restartall            # 全部服務(wù)重啟
stop 服務(wù)名           # 停止指定服務(wù)
start 服務(wù)名          # 啟動(dòng)指定服務(wù)

# 日志排查
log 服務(wù)名            # 實(shí)時(shí)滾動(dòng)日志
historylog 服務(wù)名     # 查看近500行歷史日志
glog 服務(wù)名 關(guān)鍵詞    # 日志關(guān)鍵詞過濾

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

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

以上就是Docker滾動(dòng)標(biāo)簽無感升級+一鍵回滾的完整方案的詳細(xì)內(nèi)容,更多關(guān)于Docker滾動(dòng)標(biāo)簽無感升級與一鍵回滾的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Docker 安裝 MySQL 并實(shí)現(xiàn)遠(yuǎn)程連接教程

    Docker 安裝 MySQL 并實(shí)現(xiàn)遠(yuǎn)程連接教程

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

    docker-compose部署mysql數(shù)據(jù)庫完整步驟

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

    使用Docker構(gòu)建Python FastAPI鏡像的最佳實(shí)踐

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

    docker國內(nèi)鏡像源配置及走代理設(shè)置小結(jié)

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

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

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

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

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

    Docker運(yùn)行hello-world鏡像失敗或超時(shí)的問題

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

    Docker Compose 與 Harbor 私有倉庫詳解

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

    Docker部署安裝Nginx的詳細(xì)過程

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

    詳解Ubuntu Docker Registry 搭建私有倉庫

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

最新評論

揭阳市| 自贡市| 巴彦淖尔市| 洮南市| 商城县| 沙坪坝区| 旬邑县| 民勤县| 五华县| 邹平县| 广西| 湄潭县| 南开区| 太原市| 桑植县| 囊谦县| 泉州市| 奎屯市| 溧阳市| 张家港市| 清丰县| 巴南区| 班戈县| 光泽县| 诏安县| 苏尼特右旗| 肥西县| 凌云县| 贵阳市| 芮城县| 昌江| 古田县| 太保市| 锦屏县| 克什克腾旗| 浪卡子县| 海淀区| 沙坪坝区| 桑植县| 柏乡县| 福州市|