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

Docker Stack部署Java Web項目的實現(xiàn)

 更新時間:2023年06月13日 09:26:43   作者:WEIII  
本文主要介紹了Docker Stack部署Java Web項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

本篇主要記錄 Docker Stack 部署編排中部分鍵或元素的疑難點,例如網(wǎng)絡(luò)和數(shù)據(jù)卷的配置區(qū)別用法。之后再演示一個Java Web項目如何應(yīng)用到 Docker Stack 中。

部分鍵/元素用法

Networks

定義頂級鍵networks可以創(chuàng)建網(wǎng)絡(luò),在services中定義次級network可以讓服務(wù)加入網(wǎng)絡(luò)。
如下示例中,創(chuàng)建了一個網(wǎng)絡(luò)wei,且將服務(wù)wei-app連接到這個網(wǎng)絡(luò)中。

services:
  wei-app:
    image: jre8:4.0
    networks:
      - wei
networks:
  wei:

Services Ports

ports可用于暴露容器的端口。注意端口映射在network_mode: host網(wǎng)絡(luò)模式下無法使用,否則會報錯。

  • target,容器端口。
  • published,對外開放的服務(wù)端口??梢栽O(shè)置一個范圍內(nèi)端口(形如:start-end),因此這是用字符串表示的。
  • host_ip,主機 IP 映射,未指定則意味著所有網(wǎng)絡(luò)接口(0.0.0.0)。
  • protocol,端口協(xié)議(tcpudp),未指定則意味著任何協(xié)議。
  • mode,host則開放每個節(jié)點上的主機端口,ingress則對端口實現(xiàn)負載均衡。
services:
  wei-app:
    image: jre8:4.0
    ports:
      - published: "80"
        target: 8080
        mode: ingress

Volumes

volumes可以是要掛載的主機路徑或者指定的命名數(shù)據(jù)卷。

如果說掛載的是主機路徑,且只被一個服務(wù)使用,那么基本上只需在services內(nèi)定義次級volumes,而不用定義頂級volumes;如果是想要 volume 是多個服務(wù)間復(fù)用的,那么必須在頂級volumes聲明命名數(shù)據(jù)卷。

頂級鍵volumes之下的值可以是空的,這時是用的 Docker 中默認的配置來創(chuàng)建數(shù)據(jù)卷。

以下示例中,定義了命名數(shù)據(jù)卷db-data,并且在backend服務(wù)中使用了db-data數(shù)據(jù)卷。

services:
  backend:
    image: awesome/backend
    volumes:
      - type: volume
        source: db-data
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: /var/run/postgres/postgres.sock
        target: /var/run/postgres/postgres.sock
volumes:
  db-data:

Healthcheck

用于配置檢查服務(wù)容器是否為healthy狀態(tài)。

  • test,用于定義檢查容器健康狀態(tài)的命令。為字符串或列表形式。若為列表形式,第一個元素必須為NONECMDCMD-SHELL其一;如果為字符串則等效于CMD-SHELLCMD-SHELL會運行字符串形式的命令,它使用的是容器中默認的 shell(在 Linux 中是/bin/sh)。NONE則禁用健康檢查,可以用于禁用鏡像中已配置的健康檢查。
  • interval,健康檢查命令執(zhí)行的間隔時間。
  • timeout,超時,如果檢查時間超過時間則認為檢查失敗。
  • retries,重試次數(shù),連續(xù)多次重試健康檢查失敗則認為容器處于unhealthy狀態(tài)。
  • start_period,用于緩沖容器啟動的時間。如果在此期間健康檢查失敗則不計入重試次數(shù)。

示例一:

# Hit the local web app
test: ["CMD", "curl", "-f", "http://localhost"]

示例二:

### 這兩個是等效的
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
test: curl -f https://localhost || exit 1

示例三:

services:
  backend:
    image: awesome/backend
    healthcheck:
      test: wget -q -O- localhost:8080/actuator/health | grep UP || exit 1
      interval: 5s
      timeout: 2s
      retries: 10
      start_period: 10s

項目的應(yīng)用

通過對 Docker Swarm 以及 Docker Stack 的相關(guān)了解后,就可以在實際的項目中快速部署一個完整的應(yīng)用程序棧。

項目架構(gòu)示意圖

本例是以 Docker Desktop for Mac 為平臺的,將演示項目以單集群形式部署,項目包含兩個 Java Web 應(yīng)用服務(wù):demo-admin 和 demo-app,并且分別運行2個實例。

Java Web 項目

本例的 Java Web 應(yīng)用程序以 Spring Boot 為框架,并且特別地集成了 Spring Boot Actuator。
Spring Boot Actuator,可以用于對應(yīng)用程序的監(jiān)控和管理,它本身提供了一些 Http 端點方便我們查看應(yīng)用的狀態(tài),包括 Health 健康信息、Info 應(yīng)用信息、HTTP Request 跟蹤信息、Metrics 信息等。

那么集成 Spring Boot Actuator 的用處是什么?舉例一個簡單的場景,假設(shè)要判斷 Java 服務(wù)部署后是否可用,那么可以怎么做。最簡單的我們可以手動向服務(wù)發(fā)起一次請求,根據(jù)請求的響應(yīng)即可判斷。而 Spring Boot Actuator 正好可以幫忙做這樣的事。而更好的使用場景是,與 Docker 的 healthcheck 機制一同使用,可以更好地做到服務(wù)回滾與滾動更新,且在單集群單實例部署情況下十分有用。

引入 Spring Boot Actuator 依賴

services:
  backend:
    image: awesome/backend
    healthcheck:
      test: wget -q -O- localhost:8080/actuator/health | grep UP || exit 1
      interval: 5s
      timeout: 2s
      retries: 10
      start_period: 10s

本地啟動應(yīng)用并測試端點

curl localhost:8080/actuator/health
### 服務(wù)未啟動/啟動中時返回
curl: (7) Failed to connect to localhost port 8080: Connection refused
### 服務(wù)已啟動時返回
{"status":"UP"}

項目的棧編排

網(wǎng)絡(luò)配置

棧的編排中,創(chuàng)建了一個overlay驅(qū)動類型的demo網(wǎng)絡(luò),這可以讓服務(wù)間通過服務(wù)名通信。

服務(wù)編排

demo-admin服務(wù)為說明:其對外開放的服務(wù)端口是8080,容器內(nèi)的 Java Web 應(yīng)用進程監(jiān)聽8080端口,服務(wù)連接到demo網(wǎng)絡(luò),并使用ingress路由組網(wǎng)實現(xiàn)端口負載均衡。
demo-app服務(wù)與demo-admin服務(wù)的部署區(qū)別在于,demo-app服務(wù)啟動兩個實例,而demo-admin服務(wù)只啟動一個實例,因此demo-admin服務(wù)以start-first方式保證更新時的服務(wù)可用性。

健康檢查

healthcheck健康檢查中,通過wget -q -O- localhost:8080/actuator/health | grep UP || exit 1命令判斷服務(wù)是否可用來決定容器是否為健康狀態(tài)。

wget -q -O- localhost:8080/actuator/health | grep UP的結(jié)果不是UP時則exit 1退出狀態(tài)碼為1,表示服務(wù)不可用。

version: "3.9"
services:
  demo-admin:
    image: jre8:4.0-arm64
    ports:
      - published: 8080
        target: 8080
        mode: ingress
    networks:
      - demo
    deploy:
      mode: replicated
      replicas: 1
      update_config:
        parallelism: 1
        order: start-first
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
      rollback_config:
        parallelism: 1
        order: start-first
    volumes:
      - type: bind
        source: /Users/wei/data/project/demo/demo-admin
        target: /data/project/demo/demo-admin
    working_dir: /data/project/demo/demo-admin/jar/dev/
    healthcheck:
      test: wget -q -O- localhost:8080/actuator/health | grep UP || exit 1
      interval: 5s
      timeout: 2s
      retries: 10
      start_period: 10s
    environment:
      JAVA_OPT_EXT: -server -Xmx512m -Xms512m -Xmn256m -Xss256k
      JAVA_OPTS: -Djava.security.egd=file:/dev/./urandom --spring.config.location=file:./ --spring.profiles.active=dev
    command: java -jar demo-admin-2.0.0.jar
  demo-app:
    image: jre8:4.0-arm64
    ports:
      - published: 8081
        target: 8081
        mode: ingress
    networks:
      - demo
    deploy:
      mode: replicated
      replicas: 2
      update_config:
        parallelism: 1
        order: stop-first
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s
      rollback_config:
        parallelism: 1
        order: stop-first
    volumes:
      - type: bind
        source: /Users/wei/data/project/demo/demo-app
        target: /data/project/demo/demo-app
    working_dir: /data/project/demo/demo-app/jar/dev/
    healthcheck:
      test: wget -q -O- localhost:8081/actuator/health | grep UP || exit 1
      interval: 5s
      timeout: 2s
      retries: 10
      start_period: 10s
    environment:
      JAVA_OPT_EXT: -server -Xmx512m -Xms512m -Xmn256m -Xss256k
      JAVA_OPTS: -Djava.security.egd=file:/dev/./urandom --spring.config.location=file:./ --spring.profiles.active=dev
    command: java -jar demo-app-2.0.0.jar
networks:
  demo:
    driver: overlay

部署項目

部署命令

docker stack services demo
ID             NAME         MODE 				 REPLICAS IMAGE            PORTS
6w0nmrunl0rq   demo_admin   replicated   1/1     	jre8:4.0-arm64   *:8080->8080/tcp
p6jzkyy12c9a   demo_app     replicated   2/2     	jre8:4.0-arm64   *:8081->8081/tcp

查看服務(wù)

docker stack ps demo
ID             NAME           IMAGE            NODE             DESIRED STATE   CURRENT STATE           ERROR     PORTS
lot0ukm6cqqo   demo_admin.1   jre8:4.0-arm64   docker-desktop   Running         Running 6 minutes ago             
jnb7wfovocfw   demo_app.1     jre8:4.0-arm64   docker-desktop   Running         Running 6 minutes ago             
n5xixujzuidd   demo_app.2     jre8:4.0-arm64   docker-desktop   Running         Running 6 minutes ago

查看運行 task

docker stack ps demo
ID             NAME           IMAGE            NODE             DESIRED STATE   CURRENT STATE           ERROR     PORTS
lot0ukm6cqqo   demo_admin.1   jre8:4.0-arm64   docker-desktop   Running         Running 6 minutes ago             
jnb7wfovocfw   demo_app.1     jre8:4.0-arm64   docker-desktop   Running         Running 6 minutes ago             
n5xixujzuidd   demo_app.2     jre8:4.0-arm64   docker-desktop   Running         Running 6 minutes ago

參考

[1] Networks top-level element
[2] Services top-level element
[3] Volumes top-level element
[4] HEALTHCHECK

到此這篇關(guān)于Docker Stack部署Java Web項目的實現(xiàn)的文章就介紹到這了,更多相關(guān)Docker Stack部署Java Web內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • CentOS7虛擬機安裝并配置docker套件

    CentOS7虛擬機安裝并配置docker套件

    這篇文章主要介紹了CentOS7虛擬機安裝并配置docker套件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Docker同時安裝MySQL和MariaDB的方法步驟

    Docker同時安裝MySQL和MariaDB的方法步驟

    這篇文章主要介紹了Docker同時安裝MySQL和MariaDB的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Docker一行命令完成FTP服務(wù)搭建的實現(xiàn)

    Docker一行命令完成FTP服務(wù)搭建的實現(xiàn)

    這篇文章主要介紹了Docker一行命令完成FTP服務(wù)搭建的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • docker?run容器運行的方法實現(xiàn)

    docker?run容器運行的方法實現(xiàn)

    本文主要介紹了docker?run容器運行的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解

    Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解

    這篇文章主要介紹了Docker mongoDB 4.2.1 安裝并收集springboot日志,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 使用 docker部署tomcat并接入skywalking的使用

    使用 docker部署tomcat并接入skywalking的使用

    這里主要介紹了使用 docker 部署 tomact 并接入 skywalking 的使用,因為在網(wǎng)上并沒有查到太多相關(guān)的信息,所以這里記錄下來,需要對有需求的小伙伴提供一些幫助
    2021-04-04
  • 詳解Docker退出容器不關(guān)閉容器的方法

    詳解Docker退出容器不關(guān)閉容器的方法

    進入docker容器后如果退出容器,容器就會變成Exited的狀態(tài),那么如何退出容器讓容器不關(guān)閉呢?現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Docker部署MySQL并實現(xiàn)客戶端連接

    Docker部署MySQL并實現(xiàn)客戶端連接

    這篇文章介紹了Docker部署MySQL并實現(xiàn)客戶端連接的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-01-01
  • Docker如何使用nginx搭建tomcat集群(圖文詳解)

    Docker如何使用nginx搭建tomcat集群(圖文詳解)

    這篇文章主要介紹了Docker使用nginx搭建tomcat集群的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • docker私有倉庫harbor搭建過程

    docker私有倉庫harbor搭建過程

    這篇文章主要介紹了docker私有倉庫harbor搭建過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06

最新評論

米泉市| 湘乡市| 响水县| 霍林郭勒市| 阿拉尔市| 通城县| 临江市| 永靖县| 易门县| 麻栗坡县| 桐庐县| 怀集县| 诸暨市| 冷水江市| 长阳| 黄梅县| 富民县| 普洱| 绥化市| 威信县| 曲水县| 新平| 古交市| 新沂市| 临清市| 太康县| 独山县| 南川市| 巫山县| 开封市| 祁门县| 漠河县| 呼伦贝尔市| 新巴尔虎右旗| 武夷山市| 孟津县| 漠河县| 运城市| 墨竹工卡县| 上犹县| 苍南县|