日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解Docker引擎Swarm

Swarm是Docker公司推出的用來(lái)管理docker集群的平臺(tái),幾乎全部用GO語(yǔ)言來(lái)完成的開(kāi)發(fā)的,代碼開(kāi)源在https://github.com/docker/swarm, 它是將一群Docker宿主機(jī)變成一個(gè)單一的虛擬主機(jī),Swarm使用標(biāo)準(zhǔn)的Docker API接口作為其前端的訪問(wèn)入口,換言之,各種形式的Docker

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到光澤網(wǎng)站設(shè)計(jì)與光澤網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋光澤地區(qū)。

Client(compose,docker-py等)均可以直接與Swarm通信,甚至Docker本身都可以很容易的與Swarm集成,這大大方便了用戶將原本基于單節(jié)點(diǎn)的系統(tǒng)移植到Swarm上,同時(shí)Swarm內(nèi)置了對(duì)Docker網(wǎng)絡(luò)插件的支持,用戶也很容易的部署跨主機(jī)的容器集群服務(wù)。

Docker Swarm 和 Docker Compose 一樣,都是 Docker 官方容器編排項(xiàng)目,但不同的是,Docker Compose 是一個(gè)在單個(gè)服務(wù)器或主機(jī)上創(chuàng)建多個(gè)容器的工具,而 Docker Swarm 則可以在多個(gè)服務(wù)器或主機(jī)上創(chuàng)建容器集群服務(wù),對(duì)于微服務(wù)的部署,顯然 Docker Swarm 會(huì)更加適合。

從 Docker 1.12.0 版本開(kāi)始,Docker Swarm 已經(jīng)包含在 Docker 引擎中(docker swarm),并且已經(jīng)內(nèi)置了服務(wù)發(fā)現(xiàn)工具,我們就不需要像之前一樣,再配置 Etcd 或者 Consul 來(lái)進(jìn)行服務(wù)發(fā)現(xiàn)配置了。

n只是一個(gè)調(diào)度器(Scheduler)加路由器(router),Swarm自己不運(yùn)行容器,它只是接受Docker客戶端發(fā)來(lái)的請(qǐng)求,調(diào)度適合的節(jié)點(diǎn)來(lái)運(yùn)行容器,這就意味著,即使Swarm由于某些原因掛掉了,集群中的節(jié)點(diǎn)也會(huì)照常運(yùn)行,放Swarm重新恢復(fù)運(yùn)行之后,他會(huì)收集重建集群信息。

技術(shù)概要

如果把 Docker 詳細(xì)而又好用的文檔照搬到這里那將太丟人了,所以我將簡(jiǎn)要概括下這個(gè)技術(shù)的概要。我們已經(jīng)有了 Docker,對(duì)吧?,F(xiàn)在,你想要更多的服務(wù)器作為 Docker 主機(jī),但同時(shí)你希望它們屬于同一個(gè)邏輯上的實(shí)體。也就是說(shuō),你想建立一個(gè)集群。 我們先從一個(gè)主機(jī)組成的集群開(kāi)始。當(dāng)你在一個(gè)主機(jī)上初始化一個(gè) Swarm 集群,這臺(tái)主機(jī)將成為這個(gè)集群的管理者manager。從技術(shù)角度來(lái)講,它成為了共識(shí)組consensus group中的一個(gè)節(jié)點(diǎn)node。其背后的數(shù)學(xué)邏輯建立在 Raft 算法之上。管理者manager負(fù)責(zé)調(diào)度任務(wù)。而具體的任務(wù)則會(huì)委任給各個(gè)加入了 Swarm 集群的工作者worker節(jié)點(diǎn)。這些操作將由 Node API 所管理。雖說(shuō)我討厭 API 這個(gè)詞匯,但我必須在這里用到它。

Service API 是這個(gè)實(shí)現(xiàn)中的第二個(gè)組件。它允許管理者manager節(jié)點(diǎn)在所有的 Swarm 集群節(jié)點(diǎn)上創(chuàng)建一個(gè)分布式的服務(wù)。這個(gè)服務(wù)可以被復(fù)制replicated,也就是說(shuō)它們(LCTT 譯注:指這些服務(wù))會(huì)由平衡機(jī)制被分配到集群中(LCTT 譯注:指 replicated 模式,多個(gè)容器實(shí)例將會(huì)自動(dòng)調(diào)度任務(wù)到集群中的一些滿足條件的節(jié)點(diǎn)),或者可以分配給全局(LCTT 譯注:指 global 模式),也就是說(shuō)每個(gè)節(jié)點(diǎn)都會(huì)運(yùn)行一個(gè)容器實(shí)例。

此外還有更多的功課需要做,但這些信息已經(jīng)足夠你上路了。現(xiàn)在,我們開(kāi)始整些實(shí)際的。我們的目標(biāo)平臺(tái)是 CentOS 7.2,有趣的是在我寫(xiě)這篇教程的時(shí)候,它的軟件倉(cāng)庫(kù)中只有 1.10 版的 Docker,也就是說(shuō)我必須手動(dòng)更新以使用 Swarm。我們將在另一篇教程中討論這個(gè)問(wèn)題。接下來(lái)我們還有一個(gè)跟進(jìn)的指南,其中涵蓋了如何將新的節(jié)點(diǎn)加入我們現(xiàn)有的集群(LCTT 譯注:指剛剛建立的單節(jié)點(diǎn)集群),并且我們將使用 Fedora 進(jìn)行一個(gè)非對(duì)稱的配置。至此,請(qǐng)確保正確的配置已經(jīng)就位,并有一個(gè)工作的集群?jiǎn)?dòng)并正在運(yùn)行(LCTT 譯注:指第一個(gè)節(jié)點(diǎn)的 Docker 已經(jīng)安裝并已進(jìn)入 Swarm 模式,但到這里筆者并沒(méi)有介紹如何初始化 Swarm 集群,不過(guò)別擔(dān)心下章會(huì)講)。

配置鏡像和服務(wù)

我將嘗試配置一個(gè)負(fù)載均衡的 Apache 服務(wù),并使用多個(gè)容器實(shí)例通過(guò)唯一的 IP 地址提供頁(yè)面內(nèi)容。挺標(biāo)準(zhǔn)的吧(LCTT 譯注:指這個(gè)負(fù)載均衡的網(wǎng)頁(yè)服務(wù)器)。這個(gè)例子同時(shí)也突出了你想要使用集群的大多數(shù)原因:可用性、冗余、橫向擴(kuò)展以及性能。當(dāng)然,你同時(shí)需要考慮網(wǎng)絡(luò)和儲(chǔ)存這兩塊,但它們超出了這篇指南所涉及的范圍了。

這個(gè) Dockerfile 模板其實(shí)可以在官方鏡像倉(cāng)庫(kù)里的 httpd 下找到。你只需一個(gè)最簡(jiǎn)單的設(shè)置來(lái)起步。至于如何下載或創(chuàng)建自己的鏡像,請(qǐng)參考我的入門(mén)指南,鏈接可以在這篇教程的頂部可以找到。

docker build -t my-apache2 .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM httpd:2.4
Trying to pull repository docker.io/library/httpd ...
2.4: Pulling from docker.io/library/httpd
8ad8b3f87b37: Pull complete
c95e1f92326d: Pull complete
96e8046a7a4e: Pull complete
00a0d292c371: Pull complete
3f7586acab34: Pull complete
Digest: sha256:3ad4d7c4f1815bd1c16788a57f81b413...a915e50a0d3a4
Status: Downloaded newer image for docker.io/httpd:2.4
---> fe3336dd034d
Step 2 : COPY ../public-html/ /usr/local/apache2/htdocs/
...

Docker 引擎的 Swarm 模式之入門(mén)!Docker 引擎的 Swarm 模式之入門(mén)!

Image created

在你繼續(xù)下面的步驟之前,你應(yīng)該確保你能無(wú)錯(cuò)誤的啟動(dòng)一個(gè)容器實(shí)例并能鏈接到這個(gè)網(wǎng)頁(yè)服務(wù)器上(LCTT 譯注:使用下面的命令)。一旦你確保你能連上,我們就可以開(kāi)始著手創(chuàng)建一個(gè)分布式的服務(wù)。

docker run -dit --name my-running-app my-apache2

將這個(gè) IP 地址輸入瀏覽器,看看會(huì)出現(xiàn)什么。

Swarm 初始化和配置

下一步就是啟動(dòng) Swarm 集群了。你將需要這些最基礎(chǔ)的命令來(lái)開(kāi)始,它們與 Docker 博客中的例子非常相似:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest

這里我們做了什么?我們創(chuàng)建了一個(gè)叫做 frontent 的服務(wù),它有五個(gè)容器實(shí)例。同時(shí)我們還將主機(jī)的 80 端口和這些容器的 80 端口相綁定。我們將使用剛剛新創(chuàng)建的 Apache 鏡像來(lái)做這個(gè)測(cè)試。然而,當(dāng)你在自己的電腦上直接鍵入上面的指令時(shí),你將看到下面的錯(cuò)誤:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.

這意味著你沒(méi)有將你的主機(jī)(節(jié)點(diǎn))配置成一個(gè) Swarm 管理者manager。你可以在這臺(tái)主機(jī)上初始化 Swarm 集群或是讓它加入一個(gè)現(xiàn)有的集群。由于我們目前還沒(méi)有一個(gè)現(xiàn)成的集群,我們將初始化它(LCTT 譯注:指初始化 Swarm 集群并使當(dāng)前節(jié)點(diǎn)成為 manager):

docker swarm init
Swarm initialized: current node (dm58mmsczqemiikazbfyfwqpd) is now a manager.

為了向這個(gè) Swarm 集群添加一個(gè)工作者worker,請(qǐng)執(zhí)行下面的指令:

docker swarm join \
--token SWMTKN-1-4ofd46a2nfyvrqwu8w5oeetukrbylyznxla
9srf9vxkxysj4p8-eu5d68pu5f1ci66s7w4wjps1u \
10.0.2.15:2377

為了向這個(gè) Swarm 集群添加一個(gè)管理者manager,請(qǐng)執(zhí)行 docker swarm join-token manager 并按照指示操作。

操作后的輸出不用解釋已經(jīng)很清楚明了。我們成功的創(chuàng)建了一個(gè) Swarm 集群。新的節(jié)點(diǎn)們將需要正確的令牌token來(lái)加入這個(gè) Swarm 集群。如果你需要配置防火墻,你還需找到它的 IP 地址和端口(LCTT 譯注:指 Docker 的 Swarm 模式通訊所需的端口,默認(rèn) 2377)。此外,你還可以向 Swarm 集群中添加管理者節(jié)點(diǎn)?,F(xiàn)在,重新執(zhí)行剛剛的服務(wù)創(chuàng)建指令:

docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
6lrx1vhxsar2i50is8arh4ud1

測(cè)試連通性

現(xiàn)在,我們來(lái)驗(yàn)證下我們的服務(wù)是否真的工作了。從某些方面講,這很像我們?cè)?Vagrant 和 coreOS 中做的事情那樣。畢竟它們的原理幾乎相同。相同指導(dǎo)思想的不同實(shí)現(xiàn)罷了(LCTT 譯注:筆者觀點(diǎn),無(wú)法茍同)。首先需要確保 docker ps 能夠給出正確的輸出。你應(yīng)該能看到所創(chuàng)建服務(wù)的多個(gè)容器副本。

docker ps
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS              
NAMES
cda532f67d55        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.1.2sobjfchdyucschtu2xw6ms9a
75fe6e0aa77b        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.4.ag77qtdeby9fyvif5v6c4zcpc
3ce824d3151f        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.2.b6fqg6sf4hkeqs86ps4zjyq65
eda01569181d        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.5.0rmei3zeeh8usagg7fn3olsp4
497ef904e381        my-apache2:latest   "httpd-foreground"  
2 minutes ago       Up 2 minutes        80/tcp              frontend.3.7m83qsilli5dk8rncw3u10g5a

我也測(cè)試了不同的、非常規(guī)的端口,它們都能正常工作。對(duì)于你如何連接服務(wù)器和收取請(qǐng)求你將會(huì)有很多可配置的余地。你可以使用 localhost 或者 Docker 網(wǎng)絡(luò)接口(筆者注:應(yīng)該是指 Docker 的默認(rèn)網(wǎng)橋 docker0,其網(wǎng)關(guān)為 172.17.0.1) 的 IP 地址的正確端口去訪問(wèn)。下面的例子使用了端口 1080:

Replicated Web service works

至此,這是一個(gè)非常粗略、簡(jiǎn)單的開(kāi)始。真正的挑戰(zhàn)是創(chuàng)建一個(gè)優(yōu)化過(guò)的、可擴(kuò)展的服務(wù),但是它們需要一個(gè)準(zhǔn)確的技術(shù)用例。此外,你還會(huì)用到 docker info 和 docker service(還有 inspect 和 ps)命令來(lái)詳細(xì)了解你的集群是如何工作的。

可能會(huì)遇到的問(wèn)題

你可能會(huì)在把玩 Docker 和 Swarm 時(shí)遇到一些小的問(wèn)題(也許沒(méi)那么?。?。比如 SELinux 也許會(huì)抱怨你正在執(zhí)行一些非法的操作(LCTT 譯注:指在強(qiáng)制訪問(wèn)控制策略中沒(méi)有權(quán)限的操作)。然而,這些錯(cuò)誤和警告應(yīng)該不會(huì)對(duì)你造成太多阻礙。

SELinux alert

  • docker service 不是一條命令(docker service is not a docker command)當(dāng)你嘗試執(zhí)行必須的命令去創(chuàng)建一個(gè)復(fù)制模式replicated的服務(wù)時(shí),你可能會(huì)遇到一條錯(cuò)誤說(shuō) docker: ‘service’ is not a docker command(LCTT 譯注:見(jiàn)下面的例子)。這表示你的 Docker 版本不對(duì)(使用 -v 選項(xiàng)來(lái)檢查)。我們將在將來(lái)的教程討論如何修復(fù)這個(gè)問(wèn)題。

    docker service create --name frontend --replicas 5 -p 80:80/tcp my-apache2:latest
    docker: 'service' is not a docker command.
    
  • docker tag 無(wú)法識(shí)別(docker tag not recognized)你也許會(huì)看到下面的錯(cuò)誤:

    docker service create -name frontend -replicas 5 -p 80:80/tcp my-apache2:latest
    Error response from daemon: rpc error: code = 3 desc = ContainerSpec: "-name" is not a valid repository/tag
    

    關(guān)于這個(gè)錯(cuò)誤已經(jīng)有多個(gè)相關(guān)的討論和帖子了。其實(shí)這個(gè)錯(cuò)誤也許相當(dāng)無(wú)辜。你也許是從瀏覽器粘貼的命令,在瀏覽器中的橫線也許沒(méi)被正確解析(筆者注:應(yīng)該用 –name 而不是 -name)。就是這么簡(jiǎn)單的原因所導(dǎo)致的。

擴(kuò)展閱讀

關(guān)于這個(gè)話題還有很多可談的,包含 1.12 版之前的 Swarm 集群實(shí)現(xiàn)(筆者注:舊的 Swarm 集群實(shí)現(xiàn),下文亦作獨(dú)立版本,需要 Consul 等應(yīng)用提供服務(wù)發(fā)現(xiàn)),以及當(dāng)前的 Docker 版本提供的(筆者注:新的 Swarm 集群實(shí)現(xiàn),亦被稱為 Docker 引擎的 Swarm 模式)。也就是說(shuō),請(qǐng)別偷懶花些時(shí)間閱讀以下內(nèi)容:

  • Docker Swarm 概述(獨(dú)立版本的 Swarm 集群安裝)
  • 構(gòu)建一個(gè)生產(chǎn)環(huán)境的 Swarm 集群(獨(dú)立版本安裝)
  • 安裝并創(chuàng)建一個(gè) Docker Swarm 集群(獨(dú)立版本安裝)
  • Docker 引擎 Swarm 概述(對(duì)于 1.12 版)
  • Swarm 模式入門(mén)(對(duì)于 1.12 版)

總結(jié)

你總算看到這里了。到這里仍然無(wú)法保證你學(xué)到了什么,但我相信你還是會(huì)覺(jué)得這篇文章有些用的。它涵蓋了一些基礎(chǔ)的概念,以及一個(gè) Swarm 集群模式是如何工作的以及它能做什么的概述,與此同時(shí)我們也成功的下載了并創(chuàng)建了我們的網(wǎng)頁(yè)服務(wù)器的鏡像,并且在之后基于它運(yùn)行了多個(gè)集群式的容器實(shí)例。雖然我們目前只在單一節(jié)點(diǎn)做了以上實(shí)驗(yàn),但是我們會(huì)在將來(lái)解釋清楚(LCTT 譯注:以便解釋清楚多節(jié)點(diǎn)的 Swarm 集群操作)。并且我們解決了一些常見(jiàn)的問(wèn)題。

我希望你能認(rèn)為這篇指南足夠有趣。結(jié)合著我過(guò)去所寫(xiě)的關(guān)于 Docker 的文章,這些文章應(yīng)該能給你一個(gè)像樣的解釋,包括:怎么樣操作鏡像、網(wǎng)絡(luò)棧、儲(chǔ)存、以及現(xiàn)在的集群。就當(dāng)熱身吧。的確,請(qǐng)享受并期待在新的 Docker 教程中與你見(jiàn)面。我控幾不住我記幾啊。


網(wǎng)站名稱:詳解Docker引擎Swarm
標(biāo)題URL:http://www.5511xx.com/article/dheosgo.html