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

基于Docker+Watchtower自動化部署后端服務(wù)

 更新時(shí)間:2026年05月17日 09:04:22   作者:我叫黑大帥  
本文提供了一套生產(chǎn)級通用后端服務(wù)自動化部署方案,基于 Docker Compose 編排 + Watchtower 自動更新機(jī)制,適用于所有已容器化的后端應(yīng)用,希望對大家有所幫助

本文提供一套生產(chǎn)級通用后端服務(wù)自動化部署方案,基于 Docker Compose 編排 + Watchtower 自動更新機(jī)制,適用于所有已容器化的后端應(yīng)用(Java/Go/Python/Node.js 等)。實(shí)現(xiàn) "一次配置,終身自動更新",徹底解決手動部署、版本更新、容器重啟等繁瑣運(yùn)維問題。

前置條件

在開始部署前,請確保你的服務(wù)器已滿足以下通用要求:

  • 服務(wù)器已安裝 Docker 20.10+Docker Compose V2+ (推薦使用官方一鍵安裝腳本)
  • 你的后端代碼已打包為Docker 鏡像,并推送到任意鏡像倉庫(Docker Hub/GitHub GHCR / 阿里云 ACR / 騰訊云 TCR 等)
  • 服務(wù)器可正常訪問你的鏡像倉庫(私有倉庫需提前獲取訪問憑證
  • 服務(wù)器已開放后端服務(wù)所需的端口(如 8080、3000 等)

部署步驟

步驟 1:創(chuàng)建項(xiàng)目目錄結(jié)構(gòu)

在服務(wù)器上創(chuàng)建標(biāo)準(zhǔn)化的項(xiàng)目目錄,用于存放配置文件、日志、靜態(tài)資源等持久化數(shù)據(jù):

# 創(chuàng)建通用項(xiàng)目目錄結(jié)構(gòu)(可根據(jù)實(shí)際需求調(diào)整)
mkdir -p ~/your-project/{logs,data,config,static}
  • logs/:存放后端服務(wù)日志文件
  • data/:存放數(shù)據(jù)庫、文件存儲等持久化數(shù)據(jù)
  • config/:存放后端服務(wù)配置文件
  • static/:存放靜態(tài)資源(圖片、視頻、文檔等)

步驟 2:登錄鏡像倉庫

根據(jù)你使用的鏡像倉庫類型,執(zhí)行對應(yīng)的登錄命令,獲取鏡像拉取權(quán)限:

通用登錄命令

# 替換為你的鏡像倉庫地址、用戶名和密碼/令牌
docker login [鏡像倉庫地址] -u [用戶名] --password-stdin

常見鏡像倉庫登錄示例

# 1. Docker Hub
docker login -u your-docker-username --password-stdin

# 2. GitHub Container Registry (GHCR)
export GITHUB_TOKEN=your-github-personal-access-token
export GITHUB_USER=[你github的user]
echo $GITHUB_TOKEN | docker login ghcr.io -u $GITHUB_USER --password-stdin

# 3. 阿里云容器鏡像服務(wù) (ACR)
docker login registry.cn-hangzhou.aliyuncs.com -u your-aliyun-username --password-stdin

登錄成功后,終端會提示 Login Succeeded。

步驟 3:編寫通用 Docker Compose 配置文件

~/your-project 目錄下創(chuàng)建 docker-compose.yml 文件,以下是通用模板,只需替換尖括號 <> 中的內(nèi)容即可適配你的后端服務(wù):

# 通用后端服務(wù)自動化部署配置
# 使用 Watchtower 實(shí)現(xiàn)鏡像自動檢測與更新
version: '3.8'
services:
  # 你的后端服務(wù)
  backend:
    image: <你的后端鏡像地址:標(biāo)簽> # 例如: ghcr.io/username/backend:latest
    container_name: <容器名稱> # 例如: my-backend
    restart: always # 容器異常自動重啟
    ports:
      - "<主機(jī)端口>:<容器內(nèi)端口>" # 例如: "8080:8080"
    volumes:
      # 掛載日志目錄(將容器內(nèi)日志映射到宿主機(jī))
      - ./logs:/app/logs
      # 掛載數(shù)據(jù)目錄(持久化數(shù)據(jù)庫、文件等數(shù)據(jù))
      - ./data:/app/data
      # 掛載配置文件(如需外部配置)
      # - ./config/application.yml:/app/application.yml:ro
    environment:
      # 時(shí)區(qū)配置(統(tǒng)一為上海時(shí)區(qū))
      - TZ=Asia/Shanghai
      # 你的后端服務(wù)環(huán)境變量(根據(jù)實(shí)際需求添加)
      - SPRING_PROFILES_ACTIVE=prod
      - DATABASE_URL=jdbc:mysql://db:3306/mydb
      - REDIS_URL=redis://redis:6379
    extra_hosts:
      # 允許容器訪問宿主機(jī)服務(wù)(如需連接宿主機(jī)數(shù)據(jù)庫/Redis)
      - "host.docker.internal:host-gateway"
    healthcheck:
      # 健康檢查配置(確保服務(wù)正常啟動后才對外提供服務(wù))
      test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:<容器內(nèi)端口>/health"]
      interval: 30s # 檢查間隔
      timeout: 3s # 超時(shí)時(shí)間
      start_period: 10s # 啟動等待時(shí)間
      retries: 3 # 重試次數(shù)
    labels:
      # Watchtower 自動更新標(biāo)簽(必須添加)
      - "com.centurylinklabs.watchtower.enable=true"
      # Watchtower 作用域標(biāo)簽(可選,用于區(qū)分不同服務(wù)組)
      - "com.centurylinklabs.watchtower.scope=backend"
    depends_on:
      # 如需依賴其他服務(wù)(如數(shù)據(jù)庫、Redis),在此處聲明
      # - db
      # - redis
  # Watchtower 自動更新服務(wù)(全局只需部署一個)
  watchtower:
    image: containrrr/watchtower:1.7.1
    container_name: watchtower
    restart: always
    volumes:
      # 掛載Docker套接字,用于管理容器生命周期
      - /var/run/docker.sock:/var/run/docker.sock
      # 掛載Docker認(rèn)證配置,用于拉取私有鏡像
      - /root/.docker/config.json:/config.json:ro
    environment:
      - TZ=Asia/Shanghai
      # 僅監(jiān)控帶有 com.centurylinklabs.watchtower.enable=true 標(biāo)簽的容器
      - WATCHTOWER_LABEL_ENABLE=true
      # 作用域配置(與后端服務(wù)保持一致)
      - WATCHTOWER_SCOPE=backend
      # 自動清理更新后的舊鏡像,釋放磁盤空間
      - WATCHTOWER_CLEANUP=true
      # 定時(shí)檢查更新(Cron表達(dá)式:秒 分 時(shí) 日 月 周)
      # 示例:每天凌晨2點(diǎn)檢查更新
      - WATCHTOWER_SCHEDULE=0 0 2 * * *
      # 包含重啟中的容器
      - WATCHTOWER_INCLUDE_RESTARTING=true
      # 不包含已停止的容器
      - WATCHTOWER_INCLUDE_STOPPED=false
      # 更新完成后發(fā)送通知(可選,支持Slack/釘釘/企業(yè)微信等)
      # - WATCHTOWER_NOTIFICATIONS=slack
      # - WATCHTOWER_NOTIFICATION_URL=slack://webhook-url
      # 調(diào)試模式(生產(chǎn)環(huán)境建議關(guān)閉)
      - WATCHTOWER_DEBUG=false

關(guān)鍵配置說明

配置項(xiàng)作用通用建議
restart: always容器退出時(shí)自動重啟生產(chǎn)環(huán)境必須開啟
volumes數(shù)據(jù)持久化所有需要保留的數(shù)據(jù)都應(yīng)掛載到宿主機(jī)
healthcheck服務(wù)健康檢查必須實(shí)現(xiàn) /health 接口,確保服務(wù)可用性
WATCHTOWER_SCHEDULE更新檢查頻率建議設(shè)置在業(yè)務(wù)低峰期(如凌晨 2-4 點(diǎn))
WATCHTOWER_CLEANUP自動清理舊鏡像生產(chǎn)環(huán)境必須開啟,避免磁盤爆滿

步驟 4:啟動自動化部署服務(wù)

進(jìn)入項(xiàng)目目錄,執(zhí)行以下命令啟動所有服務(wù):

cd ~/your-project
docker compose up -d

Docker 會自動完成以下操作:

  1. 拉取后端服務(wù)和 Watchtower 的最新鏡像
  2. 按照配置創(chuàng)建并啟動容器
  3. Watchtower 開始監(jiān)控后端服務(wù)的鏡像更新

通用日常運(yùn)維操作

1. 查看服務(wù)運(yùn)行狀態(tài)

# 查看所有容器狀態(tài)
docker compose ps

# 查看單個容器狀態(tài)
docker ps | grep <容器名稱>

2. 查看服務(wù)日志

# 實(shí)時(shí)查看所有服務(wù)日志
docker compose logs -f

# 實(shí)時(shí)查看后端服務(wù)日志
docker compose logs -f backend

# 查看最近100行日志
docker compose logs --tail 100 backend

3. 手動更新鏡像

若需跳過 Watchtower 定時(shí)任務(wù),立即更新后端服務(wù):

# 拉取最新鏡像
docker compose pull backend

# 重啟后端服務(wù)(Watchtower會自動執(zhí)行此步驟)
docker compose restart backend

4. 停止和刪除服務(wù)

# 停止所有服務(wù)
docker compose down

# 停止服務(wù)并刪除數(shù)據(jù)卷(謹(jǐn)慎使用!會刪除所有持久化數(shù)據(jù))
docker compose down -v

5. 驗(yàn)證自動化更新

當(dāng)你將新版本的后端鏡像推送到鏡像倉庫后,Watchtower 會在配置的時(shí)間自動執(zhí)行以下操作:

  1. 檢測到鏡像有新版本
  2. 拉取最新鏡像
  3. 停止舊容器
  4. 使用新鏡像啟動新容器
  5. 清理舊鏡像全程無需人工干預(yù),服務(wù)中斷時(shí)間僅為容器重啟時(shí)間(通常幾秒)。

高級配置與最佳實(shí)踐

1. 使用 .env 文件管理環(huán)境變量

為避免在 docker-compose.yml 中硬編碼敏感信息,推薦使用 .env 文件管理環(huán)境變量:

# 在項(xiàng)目目錄下創(chuàng)建 .env 文件
touch ~/your-project/.env

.env 文件中添加環(huán)境變量:

# 數(shù)據(jù)庫配置
DATABASE_URL=jdbc:mysql://db:3306/mydb
DATABASE_USERNAME=root
DATABASE_PASSWORD=your-password

# Redis配置
REDIS_URL=redis://redis:6379
REDIS_PASSWORD=your-redis-password

# Watchtower配置
WATCHTOWER_SCHEDULE=0 0 2 * * *

然后在 docker-compose.yml 中引用這些變量:

environment:
  - DATABASE_URL=${DATABASE_URL}
  - DATABASE_USERNAME=${DATABASE_USERNAME}
  - DATABASE_PASSWORD=${DATABASE_PASSWORD}

2. 多服務(wù)部署

如果需要在同一臺服務(wù)器上部署多個后端服務(wù),只需:

  1. 為每個服務(wù)創(chuàng)建獨(dú)立的項(xiàng)目目錄
  2. 在每個服務(wù)的 docker-compose.yml 中添加不同的 WATCHTOWER_SCOPE
  3. 全局只需部署一個 Watchtower 服務(wù)(或?yàn)槊總€服務(wù)組部署獨(dú)立的 Watchtower)

3. 配置更新通知

Watchtower 支持多種通知方式,當(dāng)容器更新完成后自動發(fā)送通知:

environment:
  # 釘釘通知
  - WATCHTOWER_NOTIFICATIONS=dingtalk
  - WATCHTOWER_NOTIFICATION_URL=dingtalk://token@secret

  # 企業(yè)微信通知
  - WATCHTOWER_NOTIFICATIONS=wechatwork
  - WATCHTOWER_NOTIFICATION_URL=wechatwork://webhook-url

  # 郵件通知
  - WATCHTOWER_NOTIFICATIONS=email
  - WATCHTOWER_NOTIFICATION_EMAIL_FROM=your-email@example.com
  - WATCHTOWER_NOTIFICATION_EMAIL_TO=admin@example.com
  - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.example.com
  - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
  - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=your-email@example.com
  - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=your-email-password

到此這篇關(guān)于基于Docker+Watchtower自動化部署后端服務(wù)的文章就介紹到這了,更多相關(guān)Docker Watchtower自動化部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud中使用jib進(jìn)行docker部署的步驟詳解

    Spring Cloud中使用jib進(jìn)行docker部署的步驟詳解

    這篇文章主要介紹了Spring Cloud中使用jib進(jìn)行docker部署的步驟詳解,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • docker使用dockercompose編排一個Hadoop集群方式

    docker使用dockercompose編排一個Hadoop集群方式

    這篇文章主要介紹了docker使用dockercompose編排一個Hadoop集群方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • docker cp 拷貝文件 和 進(jìn)入容器的操作

    docker cp 拷貝文件 和 進(jìn)入容器的操作

    這篇文章主要介紹了docker cp 拷貝文件 和 進(jìn)入容器的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • chatgpt-web之docker打包流程

    chatgpt-web之docker打包流程

    這篇文章主要介紹了chatgpt-web中docker的打包流程,文中有詳細(xì)的代碼示例,對學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-05-05
  • Docker?部署?OnlyOffice?文檔服務(wù)器的操作方法

    Docker?部署?OnlyOffice?文檔服務(wù)器的操作方法

    本文詳細(xì)介紹了如何使用Docker部署OnlyOffice文檔服務(wù)器,包括準(zhǔn)備工作、設(shè)置變量和目錄結(jié)構(gòu)、創(chuàng)建并運(yùn)行OnlyOffice容器、訪問OnlyOffice文檔服務(wù)器以及配置和管理,通過這些步驟,你可以在本地快速搭建一個強(qiáng)大的文檔編輯平臺,感興趣的朋友一起看看吧
    2025-02-02
  • 在Dockerfile中copy和add的區(qū)別及說明

    在Dockerfile中copy和add的區(qū)別及說明

    COPY和ADD都是Dockerfile中用于文件復(fù)制的命令,但COPY僅用于本地文件或目錄的復(fù)制,不支持自動解壓縮;而ADD除了復(fù)制本地文件或目錄外,還支持解壓縮和從URL下載文件,在一般情況下,建議使用COPY命令
    2025-03-03
  • 使用Docker部署Tomcat的實(shí)現(xiàn)示例

    使用Docker部署Tomcat的實(shí)現(xiàn)示例

    在本地編寫好了Spring項(xiàng)目,為了實(shí)現(xiàn)能夠隨時(shí)地訪問,所以需要將項(xiàng)目部署到服務(wù)器,本文主要介紹了使用Docker部署Tomcat的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • docker將鏡像打包為.tar包實(shí)現(xiàn)方法

    docker將鏡像打包為.tar包實(shí)現(xiàn)方法

    使用tar包格式進(jìn)行壓縮,方便在不同的docker主機(jī)之間進(jìn)行遷移和備份,下面這篇文章主要給大家介紹了關(guān)于docker將鏡像打包為.tar包的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2024-07-07
  • Docker查看正在運(yùn)行的容器目錄的實(shí)現(xiàn)方式

    Docker查看正在運(yùn)行的容器目錄的實(shí)現(xiàn)方式

    這篇文章主要介紹了Docker查看正在運(yùn)行的容器目錄的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析(推薦)

    Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析(推薦)

    這篇文章主要介紹了Spring?Boot?分層打包?Docker?鏡像實(shí)踐及分析,本文通過圖文并茂的形式實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-12-12

最新評論

紫云| 永吉县| 鄂温| 关岭| 平武县| 孟津县| 诸暨市| 张家川| 彭山县| 建瓯市| 奎屯市| 大悟县| 泰兴市| 新晃| 大悟县| 望城县| 中阳县| 天水市| 廉江市| 南皮县| 南皮县| 镇平县| 大姚县| 莱西市| 双鸭山市| 万荣县| 靖西县| 尉氏县| 大厂| 东源县| 农安县| 邹平县| 桐乡市| 洛隆县| 益阳市| 石首市| 太湖县| 瑞昌市| 潞城市| 策勒县| 正阳县|