成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

代碼級干貨 | 進(jìn)階Docker 1.12,全新的分布式應(yīng)用捆綁包

2i18ns / 2628人閱讀

摘要:利用分布式應(yīng)用捆綁包簡稱部署服務(wù)相較于利用大量參數(shù)創(chuàng)建網(wǎng)絡(luò)及服務(wù),這里我們選擇使用一個文件。

在Docker 1.12版本中,全新的Swarm捆綁包相較于原有編排及調(diào)度機制做出了巨大改進(jìn)。它不再需要運行一組獨立的Swarm容器,這部分容器已經(jīng)被直接捆綁在Docker Engine當(dāng)中,故障轉(zhuǎn)移策略更為可靠,服務(wù)發(fā)現(xiàn)機制實現(xiàn)內(nèi)置,新的網(wǎng)絡(luò)功能極為順暢……看起來很棒是不是? 數(shù)人云這就帶大家一起去探索一二。

在之前的文章中,我們已經(jīng)介紹了如何利用命令在Swarm集群當(dāng)中運行Docker服務(wù)。相信Docker Compose所實現(xiàn)的簡化效果會令大家印象深刻。相較于強行記憶命令后的全部參考以實現(xiàn)服務(wù)運行,現(xiàn)在大家只需要將一切設(shè)置指定為Docker Compose文件,而后利用簡單的docker-compose up –d命令運行容器即可。毫無疑問,這樣的處理方式比在docker service create命令之后添加一大堆參數(shù)要簡單得多。

而在上手新的Swarm時,我個人的第一印象是“太棒了”,接下來則是“我不想硬背與服務(wù)相關(guān)的一大堆參數(shù)”。Compose文件的回歸簡直令人熱淚盈眶。

新版本的一大顯著變化在于,容器管理已經(jīng)由客戶端(Docker Compose)轉(zhuǎn)移至服務(wù)器端(Docker Serivce)。如此一來,Docker Compose就顯得有些過時了(至少在使用由Docker Serivce部署的容器時是如此)。當(dāng)然,大家還是可以在單一服務(wù)器環(huán)境下利用Docker Compose運行容器,但其作用恐怕也就僅限于此了。因此,我們到底要如何處理已經(jīng)創(chuàng)建完成的這一大堆docker-compose.yml文件?

好消息是,我們可以分布式應(yīng)用捆綁包或者簡稱dab文件替代docker service命令行中的參數(shù)。壞消息是……咱們還是先探索好的這部分內(nèi)容吧。

我們這里首先構(gòu)建一套由Docker設(shè)備構(gòu)成的演示Swarm集群。

環(huán)境設(shè)置

在本示例中,我們假定大家已經(jīng)擁有包含有Docker Engine v1.12+的Docker Machine v0.8+版本。最簡單的獲取方式就是使用Docker Toolbox。

如果大家身為Windows用戶,則可利用Git Bash(同樣通過Docker Toolbox進(jìn)行安裝)運行全部示例。

這里將不再贅述環(huán)境的設(shè)置步驟。我們將創(chuàng)建三個節(jié)點,并利用其構(gòu)建起一套Swarm集群。

docker-machine create -d virtualbox node-1
 docker-machine create -d virtualbox node-2
 docker-machine create -d virtualbox node-3
 eval $(docker-machine env node-1)
 docker swarm init 
    --advertise-addr $(docker-machine ip node-1) 
    --listen-addr $(docker-machine ip node-1):2377
 TOKEN=$(docker swarm join-token -q worker)
 eval $(docker-machine env node-2)
 docker swarm join --token $TOKEN $(docker-machine ip node-1):2377
 eval $(docker-machine env node-3)
 docker swarm join --token $TOKEN $(docker-machine ip node-1):2377


包含三個節(jié)點的Docker Swarm集群

現(xiàn)在我們已經(jīng)擁有了Swarm集群,下面利用一個dab文件部署一項服務(wù)。

利用分布式應(yīng)用捆綁包(簡稱DAB)部署服務(wù)

相較于利用大量參數(shù)創(chuàng)建網(wǎng)絡(luò)及Docker服務(wù),這里我們選擇使用一個dab文件。大家可以將其作為Swarm當(dāng)中的Docker Compose。至于Swarm,我指的是docker swarm、docker service以及其它來自1.12+版本的新機制(而非以往作為獨立容器運行的Swarm)。

相較于指定新格式的具體細(xì)節(jié)以建立服務(wù),這里我們直接使用docker-compose.yml文件完成設(shè)置。

讓我們首先檢查演示服務(wù)的代碼。

git clone https://github.com/vfarcic/go-demo.git
 cd go-demo
 cat docker-compose.yml

最后一項命令會輸出Docker Compose項目定義,其具體內(nèi)容如下。

version: "2"
 services:
  app:
    image: vfarcic/go-demo
    ports:
      - 8080
  db:
    image: mongo

如大家所見,這個項目非常簡單。其中只包含兩項服務(wù),app服務(wù)為后端并公開一個API,其利用第二項服務(wù)(db)進(jìn)行數(shù)據(jù)存儲與檢索。app服務(wù)公開端口8080,并將其作為API的入口點。

將此Docker Compose定義轉(zhuǎn)化為捆綁包需要進(jìn)行兩步操作。首先,我們需要提取相關(guān)鏡像。該bundle的創(chuàng)建會首先進(jìn)行鏡像評估,而后將docker-compose.yml文件的內(nèi)容與之相合,最終輸出為dab文件。

下面進(jìn)行嘗試。

eval $(docker-machine env node-1) 
docker-compose pull
docker-compose bundle

現(xiàn)在這一流程已經(jīng)完成,看看結(jié)果如何。

cat godemo.dab

其輸出結(jié)果如下所示:

{
  "Services": {
    "app": {
      "Image": "vfarcic/go-demo@sha256:f7436796b1cd6812ba63ea82c6523a5164ae7f8a3c05daa9e4ac4bd78341d709",
      "Networks": [
        "default"
      ],
      "Ports": [
        {
          "Port": 8080,
          "Protocol": "tcp"
        }
      ]
    },
    "db": {
      "Image": "mongo@sha256:e599c71179c2bbe0eab56a7809d4a8d42ddcb625b32a7a665dc35bf5d3b0f7c4",
      "Networks": [
        "default"
      ]
    }
  },
  "Version": "0.1"
}

我們剛剛創(chuàng)建的godemo.dab文件非常簡單。其中包含的兩項服務(wù)與docker-compose.yml文件相匹配。每項服務(wù)都指定了與提取的哈希值相符合的鏡像。鏡像部分之后為默認(rèn)網(wǎng)絡(luò),包括相關(guān)服務(wù)以及需要開啟的端口。

這部分輸出結(jié)果中至少包含兩個問題。第一,我們不需要開啟任何端口。相反,我們應(yīng)當(dāng)使用反向代理將全部請求重新定向至該服務(wù)。新的Docker Swarm網(wǎng)絡(luò)功能已經(jīng)整合了一項代理,我們應(yīng)當(dāng)直接加以利用。

第二個問題在于,我們并沒有指定任何約束條件。將不受約束的服務(wù)部署至集群當(dāng)中無疑會引發(fā)嚴(yán)重的問題。

大家可以參閱此docker-compose-swarm.yml文件以獲取一項更好但同樣非常簡單的Compose定義。其內(nèi)容如下所示:

version: "2" 
services: 
  app:
    image: vfarcic/go-demo
    mem_limit: 250m 
  db:
    image: mongo
    mem_limit: 500m

可以看到,我們移除了端口部分內(nèi)容并添加了一項mem_limit約束。這個Compose文件仍然非常簡單。

下面創(chuàng)建新的捆綁包輸出結(jié)果。

docker-compose -f docker-compose-swarm.yml bundle

運行bundle命令后的輸出結(jié)果如下所示:

WARNING: Unsupported key "mem_limit" in services.app - ignoring
WARNING: Unsupported key "mem_limit" in services.db - ignoring
Wrote bundle to godemo.dab

現(xiàn)在我們來談第一條壞消息。目前的bundle格式還存在諸多局限。我們可以利用其處理非常簡單的場景,然而一旦指定任何復(fù)雜的內(nèi)容,系統(tǒng)即會給出警告。在本示例中,我們忽略內(nèi)存限制警告。

現(xiàn)在我們暫時不理這一限制警告,嘗試部署剛剛創(chuàng)建的新捆綁包。

docker deploy godemo

運行deploy命令后的輸出結(jié)果如下所示:

Loading bundle from godemo.dab
Creating network godemo_default
Creating service godemo_app
Creating service godemo_db

現(xiàn)在網(wǎng)絡(luò)與服務(wù)都已經(jīng)創(chuàng)建完成。我們可以列出全部服務(wù)進(jìn)行確認(rèn)。

docker stack ps godemo

可以看到由兩項服務(wù)構(gòu)成的堆棧,每項服務(wù)都被部署在我們的這套三節(jié)點集群中的某個位置,而且當(dāng)前狀態(tài)為running。如果顯示的狀態(tài)與此不符,則請等待一會兒讓容器完成提取,再重新運行此命令。

不過其中仍存在功能缺失的問題。我們的內(nèi)存限制被忽略了,而且還沒有創(chuàng)建外部網(wǎng)絡(luò)proxy并將app服務(wù)附加至該代理處。

要解決這個問題,我們可以執(zhí)行service update命令。舉例來說,我們可以手動創(chuàng)建proxy網(wǎng)絡(luò)并將其中添加容器。我們也可以使用service update命令設(shè)置內(nèi)存限制。然而,如果我們進(jìn)行這樣的操作,那么一開始就不應(yīng)該使用捆綁包機制。

接下來該做些什么?

在大家決定放棄bundle之前,請注意這套方案尚處于實驗階段。本篇教程只是為了讓大家先嘗嘗鮮。我們預(yù)計其未來將迎來巨大改進(jìn),且能夠全面支持Swarm提供的各項功能。

現(xiàn)在的問題是,我們當(dāng)前能夠做些什么。這里建議大家選擇以下幾種作法:其一,等待bundle完成實驗階段并支持Docker Swarm能夠提供的全部功能; 其二,使用Whaleprint項目,其基本上相當(dāng)于dab文件與其它功能(例如約束)以及Terraform方案的結(jié)合體。此項目很有前途,不過與bundle一樣,其同樣處于起步階段。

希望本篇文章能夠幫助大家了解全新Swarm的發(fā)展方向。目前bundle還在開發(fā)當(dāng)中,我們預(yù)計其未來將成為一種向集群部署服務(wù)的可靠備選方案??偠灾⒆阌诋?dāng)下期待未來才是最重要的,千萬別被其簡陋的現(xiàn)狀所嚇退。

因此,我建議大家對頒式應(yīng)用捆綁包加以關(guān)注并靜待其發(fā)展成熟。在此期間,通過命令或者嘗試Wahleprint項目則是最好的選擇。

?
PS,數(shù)人云新一期的活動報名開始啦,聽大牛們談?wù)勅萜鞯那閼?,如何助力敏捷開發(fā),高效運維,讓產(chǎn)品迭代力MAX!點擊下方鏈接快快報名吧!
數(shù)人云Meetup|容器助力產(chǎn)品迭代力MAX

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/26689.html

相關(guān)文章

  • Docker 1.12實踐:Docker Service、Stack與布式應(yīng)用捆綁

    摘要:與分布式應(yīng)用捆綁包分布式應(yīng)用捆綁包,或者簡稱,是一種多服務(wù)可分發(fā)鏡像格式。而當(dāng)中新推出的分布式應(yīng)用捆綁包,或者簡稱,則屬于一種新的概念,其專門面向多套容器的遷移需求。利用創(chuàng)建一個分布式應(yīng)用捆綁包添加了一條新的命令。 在本文中數(shù)人云將帶大家了解如何利用Docker Compose創(chuàng)建一套分布式應(yīng)用捆綁包,并將其作為Docker Stack在Docker Swarm Mode中進(jìn)行部署。 ...

    TigerChain 評論0 收藏0
  • Kubernetes 1.12全新發(fā)布!新功能亮點解析

    摘要:距離上一次版本發(fā)布三個月之隔,是今年的第三個主要版本。證書輪換證書輪換功能現(xiàn)已進(jìn)入狀態(tài)。這一功能可以在當(dāng)前證書到期時自動續(xù)訂密鑰和服務(wù)器的證書。更多包含許多修復(fù)和內(nèi)部組件的改進(jìn),此次的更新明顯側(cè)重于穩(wěn)定核心以及使現(xiàn)有的功能成熟。 Kubernetes1.12已于今日全新發(fā)布!Kubelet證書輪換、資源配額優(yōu)先級、掛載命名空間、對Azure的增強支持等10大亮點功能,本文為你一一解讀!...

    Developer 評論0 收藏0
  • 基于 Docker 1.12 Swarm 集群管理開發(fā)實踐

    摘要:由于沒有了中心化的負(fù)載均衡器,集群不會因某臺機器異常而導(dǎo)致整個服務(wù)對外不可用,很好的避免了單點問題,同時也帶了可擴展性。 Mesos/Marathon 折騰久了,我們一直希望有機會深入到 Swarm 內(nèi)部一探究竟。 另外, Mesos 這一套東西雖然是久經(jīng)企業(yè)級考驗的, 但是安裝、部署和使用相對復(fù)雜,上手有門檻。同時,在今年的 DockerCon 上,內(nèi)置了Swarm 功能的 Dock...

    My_Oh_My 評論0 收藏0
  • 云計算核心技術(shù)docker探索

    摘要:的這種在安全可重復(fù)的環(huán)境中可移植,跨平臺的快速部署軟件的方式也方便做持續(xù)集成,所以說出現(xiàn)拉開了基于云計算平臺發(fā)布產(chǎn)品方式的變革序幕,是運維人員的解放,廣受開發(fā)者和運維人員的歡迎?! ∈紫韧ㄟ^一個簡單的場景來看一下為什么docker這么火?  開發(fā)人員在開發(fā)的時候是有一套開發(fā)環(huán)境,包括運行的操作系統(tǒng),依賴的服務(wù)比如weblogic,java,一些特定的配置,比如jvm大小 ,字符集,操作系統(tǒng)內(nèi)...

    yanest 評論0 收藏0
  • Docker Swarm在生產(chǎn)環(huán)境中進(jìn)階指南

    摘要:應(yīng)該如何解決本文將給出若干提示,如何在生產(chǎn)環(huán)境中使用。路由匹配服務(wù)發(fā)現(xiàn)負(fù)載均衡跨容器通訊非??煽?。在單個端口上運行一個服務(wù),節(jié)點的任意主機都可以訪問,負(fù)載均衡完全在后臺實現(xiàn)。 上周數(shù)人云給大家分享了——《你可能需要的關(guān)于Docker Swarm的經(jīng)驗分享》今天給大家?guī)磉@位作者大大的后續(xù)文章——《Docker Swarm在生產(chǎn)環(huán)境中的進(jìn)階指南》 當(dāng)在本地開發(fā)環(huán)境中使用Docker,或者...

    galaxy_robot 評論0 收藏0

發(fā)表評論

0條評論

2i18ns

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<