成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Docker的典型應(yīng)用場(chǎng)景

anyway / 2837人閱讀

摘要:接下來(lái),執(zhí)行以下命令把生成的軟件包從鏡像中復(fù)制出來(lái)然后目錄下就會(huì)有我們剛剛制作的包。多版本混合部署隨著產(chǎn)品的不斷更新?lián)Q代,一臺(tái)服務(wù)器上部署多個(gè)應(yīng)用或者同一個(gè)應(yīng)用的多個(gè)版本在企業(yè)內(nèi)部非常常見(jiàn)。作者魏世江聯(lián)合創(chuàng)始人,長(zhǎng)期從事相關(guān)研發(fā)工作。

相對(duì)于VM,docker在其輕量、配置復(fù)雜度以及資源利用率方面有著明顯的優(yōu)勢(shì)。
隨著docker技術(shù)的不斷成熟,越來(lái)越多的企業(yè)開(kāi)始考慮通過(guò)docker來(lái)改進(jìn)自己的IT系統(tǒng)。

本文列舉一些docker的實(shí)際應(yīng)用場(chǎng)景,以期能夠起到拋磚引玉的作用,
來(lái)幫助大家更加方便的使用docker.

應(yīng)用打包

制作過(guò)RPM、GEM等軟件包的同學(xué)可能很清楚,每一個(gè)軟件包依賴于哪個(gè)庫(kù)的哪個(gè)版本,
往往需要明確的寫(xiě)在依賴列表里。而依賴又往往分為編譯時(shí)依賴和運(yùn)行時(shí)依賴。

在傳統(tǒng)的基礎(chǔ)設(shè)施環(huán)境下,為了保證所生成的軟件包在其它機(jī)器上可正常安裝且運(yùn)行,
一般需要在打包之前創(chuàng)建個(gè)干凈的虛擬機(jī),或者手工創(chuàng)建個(gè)chroot環(huán)境,
然后在這個(gè)干凈的環(huán)境下安全各種依賴包,然后執(zhí)行打包腳本。
生成軟件包以后,需要再創(chuàng)建一個(gè)干凈的環(huán)境安裝、運(yùn)行這個(gè)軟件包,來(lái)驗(yàn)證是否符合預(yù)期。
這樣雖然也能完成打包工作,但至少有以下缺點(diǎn):

耗時(shí)耗力

依賴關(guān)系容易漏掉,比如:在干凈的環(huán)境中經(jīng)過(guò)多次調(diào)試,把缺少的依賴包一個(gè)一個(gè)的裝上了,但最后寫(xiě)spec文件時(shí)卻忘記添加某個(gè)依賴,導(dǎo)致下次打包時(shí)需要重新調(diào)試或者打包后軟件包無(wú)法使用等問(wèn)題。

通過(guò)docker可以很好的解決打包問(wèn)題。具體作法如下:

“干凈的打包環(huán)境”很容易準(zhǔn)備,docker官方提供的ubuntu、centos等系統(tǒng)鏡像天生就能作為純凈無(wú)污染的打包環(huán)境使用

Dockerfile本身能起到文檔固化的作用,只要寫(xiě)好Dockerfile,創(chuàng)建好打包鏡像,以后就能無(wú)限次重復(fù)使用這個(gè)鏡像進(jìn)行打包

示例:

我們要為某個(gè)PHP擴(kuò)展模塊(如:php-redis)制作個(gè)RPM包。

首先,需要寫(xiě)個(gè)用于創(chuàng)建打包鏡像的Dockerfile, 內(nèi)容如下:

FROM centos:centos6  
RUN yum update -y  
RUN yum install -y php-devel rpm-build tar gcc make  
RUN mkdir -p /rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} &&   
  echo "%_topdir /rpmbuild" > ~/.rpmmacros
ADD http://pecl.php.net/get/redis-2.2.7.tgz /rpmbuild/SOURCES/redis-2.2.7.tgz  
ADD https://gist.githubusercontent.com/mountkin/5175c213585d485db31e/raw/02f6dce79e12b692bf39d6337f0cfa72813ce9fb/php-redis.spec /redis.spec  
RUN rpmbuild -bb /redis.spec  

然后執(zhí)行docker build -t php-redis-builder ., 執(zhí)行成功后,就會(huì)生成我們需要的RPM包。

接下來(lái),執(zhí)行以下命令把生成的軟件包從docker鏡像中復(fù)制出來(lái):

[ -d /rpms ] || mkdir /rpms
docker run --rm -v /rpms:/rpms:rw php-redis-builder cp /rpmbuild/RPMS/x86_64/php-redis-2.2.7-1.el6.x86_64.rpm /rpms/  

然后/rpms目錄下就會(huì)有我們剛剛制作的RPM包。

最后,軟件包的驗(yàn)證過(guò)各也非常簡(jiǎn)單,只需要新創(chuàng)建一個(gè)docker鏡像,把新生成的軟件包添加進(jìn)去并安裝即可。

Dockerfile如下(為了ADD RPM文件,需要保存在/rpms目錄下):

FROM centos:centos6  
ADD php-redis-2.2.7-1.el6.x86_64.rpm /php-redis-2.2.7-1.el6.x86_64.rpm  
RUN yum localinstall -y /php-redis-2.2.7-1.el6.x86_64.rpm  
RUN php -d "extension=redis.so" -m |grep redis  

在/rpms目錄下執(zhí)行docker build -t php-redis-validator .,如果執(zhí)行成功,則表明RPM包可正常工作。

多版本混合部署

隨著產(chǎn)品的不斷更新?lián)Q代,一臺(tái)服務(wù)器上部署多個(gè)應(yīng)用或者同一個(gè)應(yīng)用的多個(gè)版本在企業(yè)內(nèi)部非常常見(jiàn)。

但一臺(tái)服務(wù)器上部署同一個(gè)軟件的多個(gè)版本,文件路徑、端口等資源往往會(huì)發(fā)生沖突,造成多個(gè)版本無(wú)法共存的問(wèn)題。

如果用docker,這個(gè)問(wèn)題將非常簡(jiǎn)單。由于每個(gè)容器都有自己獨(dú)立的文件系統(tǒng),所以根本不存在文件路徑?jīng)_突的問(wèn)題;
對(duì)于端口沖突問(wèn)題,只需要在啟動(dòng)容器時(shí)指定不同的端口映射即可解決問(wèn)題。

升級(jí)回滾

一次升級(jí),往往不僅僅是應(yīng)用軟件本身的升級(jí),通過(guò)還會(huì)包含依賴項(xiàng)的升級(jí)。
但新舊軟件的依賴項(xiàng)很可能是不同的,甚至是有沖突的,所以在傳統(tǒng)的環(huán)境下做回滾一般比較困難。

如果使用docker,我們只需要每次應(yīng)用軟件升級(jí)時(shí)制作一個(gè)新的docker鏡像,升級(jí)時(shí)先停掉舊的容器,
然后把新的容器啟動(dòng)。 需要回滾時(shí),把新的容器停掉,舊的啟動(dòng)即可完成回滾,整個(gè)過(guò)程各在秒級(jí)完成,非常方便。

多租戶資源隔離

資源隔離對(duì)于提供共享hosting服務(wù)的公司是個(gè)強(qiáng)需求。
如果使用VM,雖然隔離性非常徹底,但部署密度相對(duì)較低,會(huì)造成成本增加。

docker容器充分利用linux內(nèi)核的namespaces提供資源隔離功能。

結(jié)合cgroup,可以方便的設(shè)置某個(gè)容器的資源配額。
既能滿足資源隔離的需求,又能方便的為不同級(jí)別的用戶設(shè)置不同級(jí)別的配額限制。

但在這種應(yīng)用場(chǎng)景下,由于容器中運(yùn)行的程序?qū)τ趆osting服務(wù)提供方來(lái)說(shuō)是不可信的,
所以需要特殊的手段來(lái)保證用戶無(wú)法從容器中操作到宿主機(jī)的資源(即:越獄,盡管這種問(wèn)題發(fā)生的概率很小,但安全無(wú)小事,多一層防護(hù)肯定讓人更加放心)。

安全及隔離性加固方面,可考慮以下措施:

通過(guò)iptables阻斷從容器到所有內(nèi)網(wǎng)IP的通信(當(dāng)然如果需要也可以針對(duì)特定的IP/端口開(kāi)放權(quán)限)2. 通過(guò)selinux或者apparmor限制某個(gè)容器所能訪問(wèn)的資源3. 對(duì)某些sysfs或者procfs目錄,采用只讀方式掛載4. 通過(guò)grsec來(lái)加固系統(tǒng)內(nèi)核5. 通過(guò)cgroup對(duì)內(nèi)存、CPU、磁盤(pán)讀寫(xiě)等資源進(jìn)行配額控制6. 通過(guò)tc對(duì)每個(gè)容器的帶寬進(jìn)行控制

另外我們?cè)趯?shí)際測(cè)試中發(fā)現(xiàn)系統(tǒng)的隨機(jī)數(shù)生成器很容易因熵源耗盡而發(fā)生阻塞。
在多租戶共享環(huán)境下需要在宿主機(jī)上啟用rng-tools來(lái)補(bǔ)充熵源。

這個(gè)應(yīng)用場(chǎng)景下有很多工作是docker本身所不能提供的,并且實(shí)施起來(lái)需要關(guān)注的細(xì)節(jié)比較多。
為此我們提供了安全加強(qiáng)版docker管理平臺(tái),可完美解決以上問(wèn)題。
需要的朋友可以通過(guò)csphere官網(wǎng)了解更多細(xì)節(jié)。

內(nèi)部開(kāi)發(fā)環(huán)境

在容器技術(shù)出現(xiàn)之前,公司往往是通過(guò)為每個(gè)開(kāi)發(fā)人員提供一臺(tái)或者多臺(tái)虛擬機(jī)來(lái)充當(dāng)開(kāi)發(fā)測(cè)試環(huán)境。

開(kāi)發(fā)測(cè)試環(huán)境一般負(fù)載較低,大量的系統(tǒng)資源都被浪費(fèi)在虛擬機(jī)本身的進(jìn)程上了。

docker容器沒(méi)有任何CPU和內(nèi)存上的額外開(kāi)銷,很適合用來(lái)提供公司內(nèi)部的開(kāi)發(fā)測(cè)試環(huán)境。

而且由于docker鏡像可以很方便的在公司內(nèi)部分享,這對(duì)開(kāi)發(fā)環(huán)境的規(guī)范性也有極大的幫助。

如果要把容器作為開(kāi)發(fā)機(jī)使用,需要解決的是遠(yuǎn)程登錄容器和容器內(nèi)進(jìn)程管理問(wèn)題。
雖然docker的初衷是為“微服務(wù)”架構(gòu)設(shè)計(jì)的,但根據(jù)我們的實(shí)際使用經(jīng)驗(yàn),
在docker內(nèi)運(yùn)行多個(gè)程序,甚至sshd或者upstart也是可行的。

這方面csphere也有成熟的產(chǎn)品及解決方案,歡迎感興趣的朋友試用反饋。

后記

以上總結(jié)了我們?cè)趯?shí)際開(kāi)發(fā)和生產(chǎn)環(huán)境中使用docker的一些場(chǎng)景,
以及在每種情況下遇到的問(wèn)題和相應(yīng)的解決方法,希望對(duì)有意使用docker的朋友有所啟發(fā)。
同時(shí)我們也歡迎更多的朋友分享關(guān)于docker的使用經(jīng)驗(yàn)。

作者:
魏世江, NiceScale聯(lián)合創(chuàng)始人,長(zhǎng)期從事DevOps相關(guān)研發(fā)工作。
專注于Linux環(huán)境Web應(yīng)用及周邊服務(wù)的配置管理自動(dòng)化。擅長(zhǎng)使用go語(yǔ)言及PHP語(yǔ)言,
對(duì)容器技術(shù)有一定的研究,目前正集中精力做基于docker的企業(yè)級(jí)解決方案。
創(chuàng)業(yè)之前在新浪云平臺(tái)(SAE)任技術(shù)經(jīng)理。歡迎志同道合的朋友以各種方式勾搭騷擾。

聯(lián)系方式:

Email: mountkin@gmail.com

微博: @魏世江

微信: nfa123

原文 https://blog.nicescale.com/docker-use-cases/

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/26380.html

相關(guān)文章

  • DCOS應(yīng)用案例-不同場(chǎng)景應(yīng)用上云遷移

    摘要:極大地降低了平臺(tái)的復(fù)雜度,更加方便企業(yè)開(kāi)發(fā)人員實(shí)現(xiàn)各種業(yè)務(wù)應(yīng)用,幫助企業(yè)輕松打造基于云計(jì)算的軟件基礎(chǔ)設(shè)施。本文將從實(shí)際案例出發(fā),結(jié)合不同的使用場(chǎng)景,為各位介紹的這些特性。是未來(lái)數(shù)據(jù)中心操作系統(tǒng)的核心。 0.前言 隨著 Docker 技術(shù)的日漸火熱,本就火爆的云計(jì)算行業(yè)進(jìn)入了一個(gè)加速階段。云計(jì)算最大的特點(diǎn)是彈性和靈活,幫助企業(yè)應(yīng)對(duì)復(fù)雜的業(yè)務(wù)需求。由于云計(jì)算的IT構(gòu)架和上一代的IT構(gòu)架有很...

    PumpkinDylan 評(píng)論0 收藏0
  • 認(rèn)識(shí)docker

    摘要:是一項(xiàng)獨(dú)立的容器管理包,以及都是通過(guò)來(lái)實(shí)現(xiàn)具體對(duì)容器進(jìn)行的操作。安裝認(rèn)識(shí)鏡像和容器鏡像容器管理什么是鏡像鏡像是一個(gè)多層的聯(lián)合只讀的文件系統(tǒng)。 一、Docker工作原理 二、Docker容器和虛擬機(jī)對(duì)比 三、鏡像容器管理 1、Docker關(guān)鍵組件 2、Docker架構(gòu) 3、Docker內(nèi)部組件 showImg(https://segmentfault.com/img/remote/146...

    go4it 評(píng)論0 收藏0
  • 史上最全Docker資料推送 ▎ Docker小白進(jìn)階大神計(jì)劃

    摘要:入冬了,寒風(fēng)呼嘯,白雪飄飄,此刻窩在家里學(xué)習(xí)應(yīng)當(dāng)是極好的。為了滿足大家的需求,小編火速為大家整理了史上最全的資料。 showImg(https://segmentfault.com/img/remote/1460000007586577?w=900&h=500); 入冬了,寒風(fēng)呼嘯,白雪飄飄,此刻窩在家里學(xué)習(xí)應(yīng)當(dāng)是極好的。為了滿足大家的需求,小編火速為大家整理了史上最全的Docker資...

    StonePanda 評(píng)論0 收藏0
  • 谷歌發(fā)布 Kubernetes 1.3 加速了容器之戰(zhàn)

    摘要:在容器之戰(zhàn)中,谷歌宣布了最新開(kāi)源容器編排引擎版本。這個(gè)是谷歌對(duì)抗計(jì)劃將和核心引擎結(jié)合在一起的舉動(dòng)。選擇托管環(huán)境來(lái)運(yùn)行工作伴隨著版本的發(fā)布,谷歌宣布它的托管容器管理平臺(tái),已經(jīng)更新到最新的版本。 在容器之戰(zhàn)中,谷歌宣布了最新開(kāi)源容器編排引擎Kubernetes1.3版本。此次的發(fā)布是在 Docker 公司發(fā)布 Docker 1.12 版本之后,該版本帶有內(nèi)置的 Swarm 編排功能。 雖然...

    beanlam 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<