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

Docker中控制服務(wù)啟動順序的操作方法

 更新時間:2024年10月24日 11:25:00   作者:愛碼少年 00fly.online  
Docker是一種開源的應(yīng)用容器引擎,允許開發(fā)者將應(yīng)用及其依賴打包進(jìn)容器,實現(xiàn)快速、一致的部署,Docker三劍客compose、machine和swarm提供了不同層面的服務(wù)管理和編排,使得在不同環(huán)境中部署應(yīng)用變得簡單高效

一、Docker概述

Docker 是一個開源的應(yīng)用容器引擎,基于 Go 語言 并遵從 Apache2.0 協(xié)議開源。
Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機器上,也可以實現(xiàn)虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。

Docker的應(yīng)用場景

  • Web 應(yīng)用的自動化打包和發(fā)布。
  • 自動化測試和持續(xù)集成、發(fā)布。
  • 在服務(wù)型環(huán)境中部署和調(diào)整數(shù)據(jù)庫或其他的后臺應(yīng)用。
  • 從頭編譯或者擴(kuò)展現(xiàn)有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環(huán)境。

二、Docker三劍客

compose、machine 和 swarm 是docker 原生提供的三大編排工具。

1. Compose

在實際生產(chǎn)環(huán)境中,一個應(yīng)用往往由許多服務(wù)構(gòu)成,而 docker 的最佳實踐是一個容器只運行一個進(jìn)程,因此運行多個微服務(wù)就要運行多個容器。多個容器協(xié)同工作需要一個有效的工具來管理他們,定義這些容器如何相互關(guān)聯(lián)。compose 應(yīng)運而生。

compose 是用來定義和運行一個或多個容器(通常都是多個)運行和應(yīng)用的工具。使用 compose 可以簡化容器鏡像的構(gòu)建以及容器的運行。

compose 使用 YAML 文件來定義多容器之間的關(guān)系。一個 docker-compose up 就可以把完整的應(yīng)用跑起來。

2. Machine

Docker Machine 是一個簡化Docker 安裝的命令行工具。通過一個簡單的命令行即可在相應(yīng)的平臺上安裝 Docker,為用戶提供了靈活的功能,使得用戶可以在任一主機上運行 Docker 容器。簡單說,一個 Docker Machine 就是一個 Docker host 主機和經(jīng)過配置的 Docker client 的結(jié)合體。

3. Swarm

Swarm 是 Docker 社區(qū)提供的原生支持 Docker 集群的工具。 它可以把多個 Docker 主機組成的系統(tǒng)轉(zhuǎn)換成為單一的虛擬 Docker 主機。Swarm 對外提供兩種 API。一種是標(biāo)準(zhǔn)的 Docker API,例如 Dokku、Compose、Krane、Flynn、Deis、Jenkins等;另一種是 Swarm 的集群管理 API,用于集群的管理。
Swarm工具本身不是很成熟,不建議用在生產(chǎn)環(huán)境。
而 Google 開源的Kubernetes 是目前容器生態(tài)圈中最受歡迎的編排部署工具。

三、簡要需求

1. 樣例工程

https://gitee.com/00fly/microservice-all-in-one/tree/master/micro-service

git clone https://gitee.com/00fly/microservice-all-in-one.git

2. 代碼模塊

模塊功能說明
microservice-eureka注冊中心-
microservice-front前端工程后臺訪問網(wǎng)關(guān)接口
microservice-gateway網(wǎng)關(guān)路由、聚合接口文檔
microservice-movie微服務(wù)1-
microservice-user微服務(wù)2-

3. 調(diào)用方向

前端工程front

服務(wù)網(wǎng)關(guān)gateway

微服務(wù)movie

微服務(wù)user

服務(wù)注冊中心1

服務(wù)注冊中心2

4. 期望啟動順序

① eureka --> ②user --> ③ movie --> ④ gateway --> ⑤front

四、思路分析

1.各走各路

簡單來說就是: 分組啟動,必須保證服務(wù)在同一網(wǎng)絡(luò)內(nèi)

1.)docker-compose -f指定不同配置文件

springboot有一核心原則:約定大于配置,在compose也類似,我們知道docker-compose中默認(rèn)的配置文件為docker-compose.yml,這并不意味著我們只能使用此配置文件,實際上我們可以通過類似 docker-compose -f xxx.yml來指定。
具體文件見:https://gitee.com/00fly/microservice-all-in-one/tree/master/micro-service/docker/compose-network-step-by-step

將此目錄上傳到安裝了docker的lunix服務(wù)器目錄,依次執(zhí)行0-4 sh,鏡像已經(jīng)上傳到阿里,發(fā)現(xiàn)容器啟動成功。

2.)docker-compose up -d service-name指定服務(wù)名

具體文件見:https://gitee.com/00fly/microservice-all-in-one/tree/master/micro-service/docker/compose-step-by-step

全部的服務(wù)均在docker-compose.yml中指定,服務(wù)均位于同一網(wǎng)絡(luò)內(nèi)。

3.)兩種方式比較

指定不同配置文件
優(yōu)點:步驟清晰,服務(wù)劃分一目了然
缺點:需要提前指定網(wǎng)絡(luò),后期調(diào)整服務(wù)啟動順序,需要修改yml文件,稍顯麻煩,維護(hù)不便。

指定服務(wù)名
優(yōu)點:統(tǒng)一使用默認(rèn)compose配置文件,后期調(diào)整服務(wù)啟動順序方便。

2. 等等我

借助wait-for.sh實現(xiàn)
需要注意的是:此腳本需要提前打包到鏡像內(nèi)

1.)腳本

wait-for.sh

#!/bin/sh
TIMEOUT=15
QUIET=0
echoerr() {
  if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi
}
usage() {
  exitcode="$1"
  cat << USAGE >&2
Usage:
  $cmdname host:port [-t timeout] [-- command args]
  -q | --quiet                        Do not output any status messages
  -t TIMEOUT | --timeout=timeout      Timeout in seconds, zero for no timeout
  -- COMMAND ARGS                     Execute command with args after the test finishes
USAGE
  exit "$exitcode"
}
wait_for() {
  for i in `seq $TIMEOUT` ; do
    nc -z "$HOST" "$PORT" > /dev/null 2>&1
    result=$?
    if [ $result -eq 0 ] ; then
      if [ $# -gt 0 ] ; then
        exec "$@"
      fi
      exit 0
    fi
    sleep 1
  done
  echo "Operation timed out" >&2
  exit 1
}
while [ $# -gt 0 ]
do
  case "$1" in
    *:* )
    HOST=$(printf "%s\n" "$1"| cut -d : -f 1)
    PORT=$(printf "%s\n" "$1"| cut -d : -f 2)
    shift 1
    ;;
    -q | --quiet)
    QUIET=1
    shift 1
    ;;
    -t)
    TIMEOUT="$2"
    if [ "$TIMEOUT" = "" ]; then break; fi
    shift 2
    ;;
    --timeout=*)
    TIMEOUT="${1#*=}"
    shift 1
    ;;
    --)
    shift
    break
    ;;
    --help)
    usage 0
    ;;
    *)
    echoerr "Unknown argument: $1"
    usage 1
    ;;
  esac
done
if [ "$HOST" = "" -o "$PORT" = "" ]; then
  echoerr "Error: you need to provide a host and port to test."
  usage 2
fi
wait_for "$@"

2.)如何使用

用法
sh wait-for.sh {檢測地址:{檢測端口} -- {檢測成功后執(zhí)行腳本}·

舉例如下

sh wait-for.sh www.baidu.com:80 -- echo "baidu is up"

具體文件見:https://gitee.com/00fly/microservice-all-in-one/blob/master/micro-service/docker/compose-wait/docker-compose.yml

執(zhí)行restart.sh

#!/bin/bash
docker-compose down && docker-compose --compatibility up -d && docker stats

3.)執(zhí)行結(jié)果

啟動eureka

啟動user

啟動movie

啟動gateway

啟動front

我們也可以查看日志

Operation timed out就是wait-for.sh打印的等待日志信息。

五、關(guān)于depends_on

有同學(xué)已經(jīng)注意到,在docker-compose.yml中, 可以使用depends_on

以下是一些關(guān)于 depends_on 的詳解:

  • 啟動順序:

通過在服務(wù)的配置中使用 depends_on,您可以告訴 Docker Compose 在啟動容器時按照指定的順序啟動服務(wù)。例如,如果服務(wù) A 依賴于服務(wù) B 和服務(wù) C,則在啟動時,Docker Compose 會先啟動服務(wù) B 和服務(wù) C,然后才會啟動服務(wù) A。

  • 僅表示依賴關(guān)系:

depends_on 只表示依賴關(guān)系,而不會等待依賴的服務(wù)完全可用。它只確保在依賴的服務(wù)啟動后再啟動當(dāng)前服務(wù)。因此,依賴的服務(wù)可能仍在進(jìn)行初始化或準(zhǔn)備階段,而不一定已經(jīng)完全可用。如果需要等待服務(wù)完全可用,可以結(jié)合使用其他工具或技術(shù),例如健康檢查或等待腳本。

  • 無法保證健康狀態(tài):

depends_on 并不能保證依賴的服務(wù)在啟動后處于健康狀態(tài)。它只負(fù)責(zé)在啟動時按照指定順序啟動服務(wù),但并不檢查服務(wù)的健康狀態(tài)或等待服務(wù)變?yōu)榭捎脿顟B(tài)。對于檢查服務(wù)健康狀態(tài),可以使用其他機制,例如使用健康檢查命令或工具。

  • 并行啟動:

默認(rèn)情況下,Docker Compose 會盡可能并行啟動服務(wù),而不是完全按照 depends_on 指定的依賴關(guān)系順序啟動。這是因為 Docker Compose 會嘗試最大化容器的并發(fā)啟動,以提高啟動效率。如果需要強制按照依賴關(guān)系順序啟動,請使用 depends_on 結(jié)合 restart 關(guān)鍵字的 condition: [“service_started”] 選項。

綜上所述,depends_on 關(guān)鍵字允許您定義 Docker Compose 服務(wù)之間的依賴關(guān)系,但它并不能保證服務(wù)的可用性或健康狀態(tài)。

到此這篇關(guān)于Docker中如何控制服務(wù)啟動順序的文章就介紹到這了,更多相關(guān)Docker控制服務(wù)啟動順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 從拉取到遷移詳解Docker鏡像管理的完全指南

    從拉取到遷移詳解Docker鏡像管理的完全指南

    Docker 鏡像是容器化技術(shù)的核心組成部分,高效地管理鏡像是每個開發(fā)者和運維人員的必備技能,本文將深入探討 Docker 鏡像的全生命周期管理以及解決常見拉取問題的實用技巧
    2025-09-09
  • Docker鏡像如何移動或復(fù)制到另一臺服務(wù)器

    Docker鏡像如何移動或復(fù)制到另一臺服務(wù)器

    文章介紹了如何在不同服務(wù)器之間移動或復(fù)制Docker鏡像,包括使用dockersave和dockerload、DockerRegistry、以及dockerexport和dockerimport命令的方法
    2025-02-02
  • 詳解Docker基于已有的鏡像制新的鏡像

    詳解Docker基于已有的鏡像制新的鏡像

    本篇文章主要介紹了Docker基于已有的鏡像制新的鏡像,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 如何給一個正在運行的Docker容器動態(tài)添加Volume

    如何給一個正在運行的Docker容器動態(tài)添加Volume

    這篇文章主要介紹了如何給一個正在運行的Docker容器動態(tài)添加Volume,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • docker常用命令整理匯總(新手必備!)

    docker常用命令整理匯總(新手必備!)

    這篇文章主要給大家介紹了關(guān)于docker常用命令的相關(guān)資料,包括docker的啟動、停止、重啟、創(chuàng)建、查看等等,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • docker構(gòu)建的鏡像的三種方式小結(jié)

    docker構(gòu)建的鏡像的三種方式小結(jié)

    這篇文章主要為大家詳細(xì)介紹了docker中構(gòu)建的鏡像的三種方式,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-04-04
  • 詳解使用Docker容器來源碼編譯etcd

    詳解使用Docker容器來源碼編譯etcd

    這篇文章主要介紹了詳解使用Docker容器來源碼編譯etcd,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • docker內(nèi)網(wǎng)搭建dns使用域名訪問替代ip:port的操作

    docker內(nèi)網(wǎng)搭建dns使用域名訪問替代ip:port的操作

    這篇文章主要介紹了docker內(nèi)網(wǎng)搭建dns使用域名訪問替代ip:port的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 詳解用Docker搭建外部可以訪問的mysql

    詳解用Docker搭建外部可以訪問的mysql

    這篇文章主要介紹了詳解用Docker搭建外部可以訪問的mysql,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Ollama在Docker下的安裝與配置詳細(xì)教程

    Ollama在Docker下的安裝與配置詳細(xì)教程

    這篇文章主要介紹了如何通過Docker拉取Ollama鏡像并運行,包括可視化界面和命令行兩種方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02

最新評論

德令哈市| 孝昌县| 吉隆县| 天峨县| 板桥市| 海宁市| 民县| 洛隆县| 黔东| 井研县| 翁牛特旗| 金坛市| 莲花县| 金寨县| 蒙山县| 南投市| 伊吾县| 巴林左旗| 西峡县| 泗水县| 太康县| 岑溪市| 宁化县| 江西省| 兰坪| 富民县| 天全县| 汤阴县| 襄城县| 和平区| 甘肃省| 自贡市| 东至县| 伊宁市| 鸡西市| 乐安县| 晋江市| 沿河| 利川市| 淳安县| 越西县|