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

基于Docker+Watchtower自動化部署后端服務

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

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

前置條件

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

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

部署步驟

步驟 1:創(chuàng)建項目目錄結構

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

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

步驟 2:登錄鏡像倉庫

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

通用登錄命令

# 替換為你的鏡像倉庫地址、用戶名和密碼/令牌
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. 阿里云容器鏡像服務 (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 文件,以下是通用模板,只需替換尖括號 <> 中的內容即可適配你的后端服務:

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

關鍵配置說明

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

步驟 4:啟動自動化部署服務

進入項目目錄,執(zhí)行以下命令啟動所有服務:

cd ~/your-project
docker compose up -d

Docker 會自動完成以下操作:

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

通用日常運維操作

1. 查看服務運行狀態(tài)

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

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

2. 查看服務日志

# 實時查看所有服務日志
docker compose logs -f

# 實時查看后端服務日志
docker compose logs -f backend

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

3. 手動更新鏡像

若需跳過 Watchtower 定時任務,立即更新后端服務:

# 拉取最新鏡像
docker compose pull backend

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

4. 停止和刪除服務

# 停止所有服務
docker compose down

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

5. 驗證自動化更新

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

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

高級配置與最佳實踐

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

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

# 在項目目錄下創(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. 多服務部署

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

  1. 為每個服務創(chuàng)建獨立的項目目錄
  2. 在每個服務的 docker-compose.yml 中添加不同的 WATCHTOWER_SCOPE
  3. 全局只需部署一個 Watchtower 服務(或為每個服務組部署獨立的 Watchtower)

3. 配置更新通知

Watchtower 支持多種通知方式,當容器更新完成后自動發(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

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

相關文章

  • Spring Cloud中使用jib進行docker部署的步驟詳解

    Spring Cloud中使用jib進行docker部署的步驟詳解

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

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

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

    docker cp 拷貝文件 和 進入容器的操作

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

    chatgpt-web之docker打包流程

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

    Docker?部署?OnlyOffice?文檔服務器的操作方法

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

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

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

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

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

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

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

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

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

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

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

最新評論

米易县| 兴宁市| 乐东| 宣恩县| 华坪县| 手游| 化德县| 乌兰浩特市| 北京市| 舒城县| 惠安县| 扶沟县| 曲沃县| 浪卡子县| 连山| 萨迦县| 志丹县| 岗巴县| 广汉市| 景谷| 博白县| 海兴县| 普兰店市| 西和县| 荣成市| 韩城市| 方城县| 墨竹工卡县| 德庆县| 泊头市| 廊坊市| 利辛县| 宣恩县| 凤翔县| 新竹市| 东至县| 新余市| 蓝山县| 珠海市| 姚安县| 西丰县|