国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Docker 101:介紹與入門體驗(yàn)

Docker是一種在Linux容器里運(yùn)行應(yīng)用的開源工具,一種輕量級(jí)的虛擬機(jī)。除了運(yùn)行應(yīng)用,Docker還提供了一些工具,借助Docker Index或自己托管的Docker注冊(cè)表對(duì)進(jìn)行了集裝箱化處理的應(yīng)用進(jìn)行分發(fā),從而簡(jiǎn)化復(fù)雜應(yīng)用的部署過(guò)程。

我將在本文介紹如今在部署復(fù)雜系統(tǒng)時(shí)公司所面臨的挑戰(zhàn),Docker怎樣有效地解決這個(gè)問(wèn)題,以及Docker的其他用例。

部署的挑戰(zhàn)

服務(wù)器應(yīng)用的部署已經(jīng)越來(lái)越復(fù)雜了。把幾個(gè)Perl腳本拷貝到正確目錄就完成服務(wù)器應(yīng)用的安裝,這種時(shí)代已經(jīng)一去不復(fù)返了。如今的軟件有很多類型的需求:

  • 對(duì)已安裝軟件和庫(kù)的依賴(“Python版本高于2.6.3,使用Django 1.2”)
  • 依賴于正在運(yùn)行的服務(wù)(“需要一個(gè)MySQL 5.5數(shù)據(jù)庫(kù)和一個(gè)RabbitMQ隊(duì)列”)
  • 依賴于特定的操作系統(tǒng)(“在64位的Ubuntu Linux 12.04上構(gòu)建、測(cè)試”)
  • 資源需求:
    • 最小的可用內(nèi)存(“需要1GB的可用內(nèi)存”)
    • 能綁定特定的端口(“綁定80和443端口”)

我們來(lái)看一個(gè)相對(duì)簡(jiǎn)單的應(yīng)用的部署:Wordpress。Wordpress的安裝通常要求:

  • Apache 2
  • PHP 5
  • MySQL
  • Wordpress源碼
  • 一個(gè)Wordpress MySQL數(shù)據(jù)庫(kù),配置Wordpress使用該數(shù)據(jù)庫(kù)
  • Apache的配置:
    • 加載PHP模塊
    • 支持URL重寫和.htaccess文件
    • 指向WordPress源碼的DocumentRoot

在服務(wù)器上部署、運(yùn)行這樣一個(gè)系統(tǒng),我們可能會(huì)遇到下面的問(wèn)題和挑戰(zhàn):

  1. 隔離性:如果我們已經(jīng)在這個(gè)服務(wù)器上部署了不同的網(wǎng)站,已有的網(wǎng)站只能在nginx上 運(yùn)行,而Wordpress依賴于Apache,這時(shí)我們就會(huì)有麻煩:它們都監(jiān)聽80端口。同時(shí)運(yùn)行兩個(gè)網(wǎng)站是可以的,但需要調(diào)整配置(修改監(jiān)聽端口), 設(shè)置反向代理等。庫(kù)級(jí)別也會(huì)出現(xiàn)類似的沖突,如果還要運(yùn)行一個(gè)仍然依賴PHP4的老應(yīng)用就會(huì)出問(wèn)題,因?yàn)閃ordpress不再支持PHP4,同時(shí)運(yùn)行 PHP4和PHP5則非常困難。運(yùn)行在同一個(gè)服務(wù)器上的應(yīng)用沒有互相隔離(在文件系統(tǒng)級(jí)別和網(wǎng)絡(luò)級(jí)別),所以它們可能會(huì)互相沖突。
  2. 安全性:Wordpress的安全記錄并不是非常好。所以還是給它創(chuàng)建個(gè)沙箱,至少黑客入侵時(shí)不會(huì)影響其他運(yùn)行的應(yīng)用。
  3. 升級(jí)、降級(jí):升級(jí)應(yīng)用一般會(huì)覆蓋現(xiàn)有文件。升級(jí)過(guò)程中會(huì)發(fā)生什么?系統(tǒng)要關(guān)閉么?如果升級(jí)失敗,或者不對(duì)該怎么辦?我們?cè)鯓涌焖倩赝说较惹暗陌姹荆?/li>
  4. 快照、備份:一旦所有的內(nèi)容都設(shè)置好,就給系統(tǒng)創(chuàng)建一個(gè)“快照”,以便能備份快照,甚至能移到另一個(gè)服務(wù)器上再次啟動(dòng),或者拷貝到多個(gè)服務(wù)器上以備不時(shí)之需。
  5. 重復(fù)性:系統(tǒng)出新版本之后,比較好的做法是先在測(cè)試基礎(chǔ)設(shè)施上自動(dòng)部署并測(cè)試,然后再發(fā)布到生產(chǎn)系統(tǒng)。通常會(huì)利用諸如Chef、Puppet等 工具在服務(wù)器上自動(dòng)安裝一堆包,等一切內(nèi)容都就緒后,再在生產(chǎn)系統(tǒng)上運(yùn)行相同的部署腳本。這在百分之九十九的情況下都沒有問(wèn)題。但有百分之一的例外,在部 署到測(cè)試環(huán)境和生產(chǎn)環(huán)境之間的時(shí)間跨度里,你依賴的包在包倉(cāng)庫(kù)里有了更新,而新版本并不兼容。結(jié)果生產(chǎn)環(huán)境的設(shè)置和測(cè)試環(huán)境不同,還有可能破壞生產(chǎn)系統(tǒng)。 假如沒有控制部署的每一個(gè)方面(例如托管自己的APT或YUM倉(cāng)庫(kù)),持續(xù)在多個(gè)階段(比如測(cè)試、預(yù)演、生產(chǎn)環(huán)境)重復(fù)搭建出完全相同的系統(tǒng)就很困難。
  6. 資源限制:如果我們的Wordpress耗費(fèi)CPU資源,并占用了所有的CPU周期,導(dǎo)致其他應(yīng)用無(wú)法做任何事情怎么辦?如果它用盡了全部可用的內(nèi)存呢?或者瘋狂寫日志阻塞磁盤呢?要是能限制應(yīng)用的可用資源,比如CPU、內(nèi)存和磁盤空間,就會(huì)非常方便。
  7. 易于安裝:也許有Debian或CentOS包,抑或是能自動(dòng)執(zhí)行所有復(fù)雜步驟并安裝 Wordpress的Chef菜譜。但這些菜譜很難穩(wěn)定下來(lái),因?yàn)樗鼈冃枰紤]目標(biāo)系統(tǒng)上可能的系統(tǒng)配置。很多情況下,這些菜譜只能在干凈的系統(tǒng)上運(yùn)行。 因此,你不太可能更換成自己的包或Chef菜譜。這樣的話,安裝就是個(gè)復(fù)雜的系統(tǒng)工程,而不是午休期間就能搞定的事情。
  8. 易于移除:軟件應(yīng)該能輕松、干凈地移除,不留痕跡。但部署應(yīng)用通常要調(diào)整已有的配置文件、設(shè)置狀態(tài)(MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù),日志),完全移除應(yīng)用也變得不那么容易。

那我們應(yīng)該如何解決這些問(wèn)題呢?

虛擬機(jī)!

我們決定在單獨(dú)的虛擬機(jī)上運(yùn)行獨(dú)立的應(yīng)用,例如Amazon的EC2,大部分問(wèn)題這時(shí)會(huì)迎刃而解:

  1. 隔離性:在一個(gè)VM上安裝一個(gè)應(yīng)用,應(yīng)用是完全獨(dú)立的,除非它們攻入了對(duì)方的防火墻。
  2. 重復(fù)性:用你喜歡的方式準(zhǔn)備系統(tǒng),然后創(chuàng)建一個(gè)AMI。你可以隨意實(shí)例化多個(gè)AMI實(shí)例。完全是可重現(xiàn)的。
  3. 安全性:由于我們完全隔離,如果Wordpress遭到攻擊,其余的基礎(chǔ)設(shè)施并不會(huì)受到影響——除非你沒有保管好SSH密鑰或者在哪里都使用同一個(gè)密碼,但你應(yīng)該不會(huì)這么做吧?
  4. 資源限制:VM會(huì)分配特定的CPU周期、可用內(nèi)存和磁盤空間,沒有加價(jià)的話就不能超額。
  5. 易于安裝:越來(lái)越多的應(yīng)用能夠在EC2上運(yùn)行,只要在AWS marketplace上點(diǎn)擊一個(gè)按鈕就能實(shí)例化應(yīng)用。啟動(dòng)只需要幾分鐘,就是這樣。
  6. 易于移除:不需要某個(gè)應(yīng)用了?銷毀VM。干凈又方便。
  7. 升級(jí)、降級(jí):Netflix如何部署代碼里提到,只需要在新VM上部署新版本,然后讓負(fù)載均衡器指向部署了新版本的VM。不過(guò)應(yīng)用如果需要在本地保存狀態(tài),這種方法就不是很好用了。
  8. 快照、備份:點(diǎn)擊一個(gè)按鈕(或者調(diào)用一下API)就能獲得EBS磁盤的快照,快照會(huì)備份到S3中。

完美!

不過(guò)……我們有個(gè)新問(wèn)題:虛擬機(jī)在兩個(gè)方面比較昂貴

  • 金錢:你真的有那么多錢為每個(gè)應(yīng)用啟動(dòng)一個(gè)EC2實(shí)例?另外你能預(yù)測(cè)到需要多少個(gè)實(shí)例么?如果你以后需要更多的資源,你需要停止VM進(jìn)行升級(jí)——否則就要為閑置資源白白付錢,直到真正用起來(lái)(除非你用能動(dòng)態(tài)調(diào)整大小的Solaris Zones,比如Joyent上的)。
  • 時(shí)間:虛擬機(jī)相關(guān)的操作大多都很慢:?jiǎn)?dòng)要幾分鐘,捕捉快照要幾分鐘,創(chuàng)建鏡像也需要幾分鐘。世界不停轉(zhuǎn)動(dòng),我們可沒有這種時(shí)間!

我們能做得更好嗎?

進(jìn)入Docker的世界吧。

Docker是由公共PaaS提供商dotCloud的人發(fā)起的開源項(xiàng)目,于去年初發(fā)起。從技術(shù)角度來(lái)說(shuō),Docker(主要用Go語(yǔ)言編寫)試圖簡(jiǎn)化兩種已有技術(shù)的使用:

  • LXC:Linux容器,允許獨(dú)立進(jìn)程在比普通Unix進(jìn)程更高的隔離級(jí)別上運(yùn)行。使用的技術(shù)術(shù)語(yǔ)是集裝箱化:一個(gè)容器里運(yùn)行一個(gè)進(jìn)程。容器支持的隔離級(jí)別有:
    • 文件系統(tǒng):容器只能訪問(wèn)自己的沙箱文件系統(tǒng)(類似于chroot),否則要專門掛載到容器的文件系統(tǒng)中才能訪問(wèn)。
    • 用戶名字空間:容器有自己的用戶數(shù)據(jù)庫(kù)(也就是容器的root不等于主機(jī)的root賬戶)。
    • 進(jìn)程名字空間:只有容器里的進(jìn)程才是可見的(ps aux的輸出會(huì)非常簡(jiǎn)潔)。
    • 網(wǎng)絡(luò)名字空間:每個(gè)容器都有自己的虛擬網(wǎng)絡(luò)設(shè)備和虛擬IP(因此它可以綁定任意端口,不用占用主機(jī)端口)。
  • AUFS:高級(jí)多層的統(tǒng)一文件系統(tǒng),可用來(lái)創(chuàng)建聯(lián)合、寫時(shí)拷貝的文件系統(tǒng)。

Docker可以安裝在任何支持AUFS和內(nèi)核版本大于等于3.8的Linux系統(tǒng)上。但從概念上來(lái)說(shuō)它并不依賴于這些技術(shù),以后也可以和類似的技術(shù)一起運(yùn)行,例如Solaris的ZonesBSD jails,并將ZFS作為文件系統(tǒng)。不過(guò)目前只能選擇Linux 3.8+和AUFS。

那Docker為什么有意思呢?

  • Docker非常輕量。啟動(dòng)VM是個(gè)大動(dòng)作,需要占用大量?jī)?nèi)存;而啟動(dòng)Docker容器只耗費(fèi)很少的CPU和內(nèi)存,并且非常快。幾乎和啟動(dòng)一個(gè)常規(guī)進(jìn)程沒什么區(qū)別。不僅運(yùn)行容器快,構(gòu)建鏡像、捕獲文件系統(tǒng)的快照也很快。
  • 它運(yùn)行在已經(jīng)虛擬化過(guò)的環(huán)境中。也就是說(shuō),你可以在EC2實(shí)例、Rackspace VM或VirtualBox里運(yùn)行Docker。事實(shí)上,在Mac和Windows上使用Docker的首選方式是使用Vagrant
  • Docker容器能移植到任何運(yùn)行Docker的操作系統(tǒng)上。無(wú)論是Ubuntu還是CentOS,只要Docker運(yùn)行著,你的容器就能運(yùn)行。

讓我們回到前面的部署、操作問(wèn)題列表,看看Docker是怎么解決的:

  1. 隔離性:Docker在文件系統(tǒng)和網(wǎng)絡(luò)級(jí)別隔離了應(yīng)用。從這個(gè)意義上來(lái)講很像在運(yùn)行”真正的“虛擬機(jī)。
  2. 重復(fù)性:用你喜歡的方式準(zhǔn)備系統(tǒng)(登錄并在所有軟件里執(zhí)行apt-get命令,或者使用Dockerfile),然后把修改提交到鏡像中。你可以隨意實(shí)例化若干個(gè)實(shí)例,或者把鏡像傳輸?shù)搅硪慌_(tái)機(jī)器,完全重現(xiàn)同樣的設(shè)置。
    • 安全性:Docker容器比普通的進(jìn)程隔離更為安全。Docker團(tuán)隊(duì)已經(jīng)確定了一些安全問(wèn)題,正在著手解決。
    • 資源約束:Docker現(xiàn)在能限制CPU的使用率和內(nèi)存用量。目前還不能直接限制磁盤的使用情況。
    • 易于安裝:Docker有一個(gè)Docker Index,這個(gè)倉(cāng)庫(kù)存儲(chǔ)了現(xiàn)成的Docker鏡像,你用一條命令就可以完成實(shí)例化。比如說(shuō),要使用Clojure REPL鏡像,只要運(yùn)行docker run -t -i zefhemel/clojure-repl命令就能自動(dòng)獲取并運(yùn)行該鏡像。
    • 易于移除:不需要應(yīng)用了?銷毀容器就行。
    • 升級(jí)、降級(jí):和EC2 VM一樣:先啟動(dòng)應(yīng)用的新版本,然后把負(fù)載均衡器切換到新的端口。
    • 快照、備份:Docker能提交鏡像并給鏡像打標(biāo)簽,和EC2上的快照不同,Docker是立即處理的。

怎么使用Docker

假設(shè)你已經(jīng)安裝了Docker。要在Ubuntu容器中運(yùn)行bash,只要執(zhí)行:

docker run -t -i ubuntu /bin/bash

根據(jù)“ubuntu”鏡像的下載情況,Docker會(huì)選擇下載或者使用本地可用的拷貝,然后在Ubuntu容器里運(yùn)行/bin/bash。接著你就能在容器里執(zhí)行幾乎所有典型的Ubuntu操作,比如安裝新的包。

我們來(lái)安裝個(gè)“hello”:

$ docker run -t -i ubuntu /bin/bashroot@78b96377e546:/# apt-get install helloReading package lists... DoneBuilding dependency tree... DoneThe following NEW packages will be installed:  hello0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.Need to get 26.1 kB of archives.After this operation, 102 kB of additional disk space will be used.Get:1 http://archive.ubuntu.com/ubuntu/ precise/main hello amd64 2.7-2 [26.1 kB]Fetched 26.1 kB in 0s (390 kB/s)debconf: delaying package configuration, since apt-utils is not installedSelecting previously unselected package hello.(Reading database ... 7545 files and directories currently installed.)Unpacking hello (from .../archives/hello_2.7-2_amd64.deb) ...Setting up hello (2.7-2) ...root@78b96377e546:/# helloHello, world!

現(xiàn)在退出,然后再運(yùn)行一次相同的Docker命令:

root@78b96377e546:/# exitexit$ docker run -t -i ubuntu /bin/bashroot@e5e9cde16021:/# hellobash: hello: command not found

怎么了?我們美麗的hello命令哪兒去了?事實(shí)上我們剛剛根據(jù)干凈的Ubuntu鏡像啟動(dòng)了一個(gè)新的容器。要繼續(xù)先前那個(gè),我們必須把它提交倉(cāng)庫(kù)中。我們退出這個(gè)容器,看看先前啟動(dòng)容器的ID是什么:

$ docker ps -aID                  IMAGE                   COMMAND                CREATED              STATUS              PORTSe5e9cde16021        ubuntu:12.04            /bin/bash              About a minute ago   Exit 12778b96377e546        ubuntu:12.04            /bin/bash              2 minutes ago        Exit 0

docker ps命令能列出當(dāng)前運(yùn)行的容器,docker ps -a還會(huì)顯示已經(jīng)退出的容器。每個(gè)容器都有一個(gè)唯一的ID,類似于Git提交哈希值。命令也列出了容器基于的鏡像、運(yùn)行的命令、創(chuàng)建時(shí)間、當(dāng)前狀態(tài),以及容器暴露的端口和與主機(jī)端口之間的映射。

上面那個(gè)是我們第二次啟動(dòng)的容器,不包含“hello”;下面那個(gè)是我們想重用的,所以我們提交一下,再創(chuàng)建一個(gè)新的容器:

$ docker commit 78b96377e546 zefhemel/ubuntu356e4d516681$ docker run -t -i zefhemel/ubuntu /bin/bashroot@0d7898bbf8cd:/# helloHello, world!

我用容器ID把容器提交到了倉(cāng)庫(kù)中。倉(cāng)庫(kù)類似于Git倉(cāng)庫(kù),包含一或多個(gè)打了標(biāo)簽的鏡像。如果像我一樣沒有指定標(biāo)簽名稱,標(biāo)簽會(huì)被命名為“l(fā)atest”。運(yùn)行docker images命令可以查看本地安裝的所有鏡像。

Docker提供了一些基礎(chǔ)鏡像(比如ubuntucentos),你也可以創(chuàng)建自己的鏡像。用戶倉(cāng)庫(kù)的命名模型和Github的類似:Docker用戶名后面跟一個(gè)斜線,然后再跟倉(cāng)庫(kù)名稱。

前面創(chuàng)建Docker鏡像的方式并不是特別正規(guī),你可以試試。更簡(jiǎn)潔的方式是使用Dockerfile

使用Dockerfile構(gòu)建鏡像

Dockerfile是個(gè)簡(jiǎn)單的文本文件,介紹了如何從基礎(chǔ)鏡像構(gòu)建鏡像。我在Github上提供了幾個(gè)Dockerfile。下面的文件用來(lái)運(yùn)行、安裝SSH服務(wù)器:

FROM ubuntuRUN apt-get updateRUN apt-get install -y openssh-serverRUN mkdir /var/run/sshdRUN echo "root:root" | chpasswdEXPOSE 22

上面的內(nèi)容一目了然。FROM命令定義了基礎(chǔ)鏡像,基礎(chǔ)鏡像可以是官方的,也可以是我們剛剛創(chuàng)建的zefhemel/ubuntu。RUN命令用來(lái)配置鏡像。在這里,我們更新了APT包倉(cāng)庫(kù),安裝了openssh-server,創(chuàng)建了一個(gè)目錄,然后給我們的root賬戶設(shè)置了一個(gè)再簡(jiǎn)單不過(guò)的密碼。EXPOSE命令會(huì)向外暴露22端口(SSH端口)。接下來(lái)看看如何構(gòu)建并實(shí)例化這個(gè)Dockerfile。

第一步是構(gòu)建一個(gè)鏡像。在包含Dockerfile的目錄下運(yùn)行:

$ docker bui ld -t zefhemel/ssh .

這會(huì)創(chuàng)建一個(gè)zefhemel/ssh倉(cāng)庫(kù),包含我們新的SSH鏡像。如果創(chuàng)建成功,就能進(jìn)行實(shí)例化了:

$ docker run -d zefhemel/ssh /usr/sbin/sshd -D

和前面的命令不一樣。-d表示會(huì)在后臺(tái)運(yùn)行容器,而不是運(yùn)行bash,所以我們用前臺(tái)模式(用-D參數(shù)指定)運(yùn)行了sshd守護(hù)進(jìn)程。

讓我們檢查運(yùn)行中的容器,看看命令做了些什么:

$ docker psID                  IMAGE                   COMMAND                CREATED             STATUS              PORTS23ee5acf5c91        zefhemel/ssh:latest     /usr/sbin/sshd -D      3 seconds ago       Up 2 seconds        49154->22

可以看到我們的容器啟動(dòng)著。PORTS頭下的內(nèi)容比較有意思。由于我們EXPOSE了22端口,這個(gè)端口現(xiàn)在映射到了主機(jī)系統(tǒng)的一個(gè)端口(這里是49154)。讓我們看看它能否運(yùn)行。

$ ssh root@localhost -p 49154The authenticity of host '[localhost]:49154 ([127.0.0.1]:49154)' can't be established.ECDSA key fingerprint is f3:cc:c1:0b:e9:e4:49:f2:98:9a:af:3b:30:59:77:35.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '[localhost]:49154' (ECDSA) to the list of known hosts.root@localhost's password:  Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.8.0-27-generic x86_64)   * Documentation:  https://help.ubuntu.com/  The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.  Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.  root@23ee5acf5c91:~#

再次成功了!現(xiàn)在有了一個(gè)運(yùn)行的SSH服務(wù)器,我們能登錄它。在有人猜出密碼并攻擊容器之前,讓我們先從SSH退出,殺掉容器。

$ docker kill 23ee5acf5c91

如你所見,容器的22端口映射到了49154端口,但這是完全隨機(jī)的。要把它映射到特定端口,運(yùn)行命令時(shí)傳入-p參數(shù):

docker run -p 2222:22 -d zefhemel/ssh /usr/sbin/sshd -D

現(xiàn)在,如果2222端口可用,我們的端口就會(huì)映射到2222上。我們?cè)贒ockerfile的結(jié)尾再添加一行內(nèi)容,以便我們的鏡像對(duì)用戶更加友好:

CMD /usr/sbin/sshd -D

CMD表示構(gòu)建鏡像時(shí)并不會(huì)運(yùn)行命令,實(shí)例化時(shí)才運(yùn)行。所以不傳遞其它參數(shù)時(shí)就會(huì)執(zhí)行/usr/sbin/sshd -D。然后我們可以直接運(yùn)行:

docker run -p 2222:22 -d zefhemel/ssh

得到的結(jié)果和前面一樣。要發(fā)布新創(chuàng)建的鏡像,只要運(yùn)行docker push就可以了:

docker push zefhemel/ssh

登錄之后,鏡像就可用了,用先前的docker run命令就能執(zhí)行命令。

讓我們回到Wordpress的例子。怎樣在容器里用Docker運(yùn)行Wordpress呢?要構(gòu)建一個(gè)Wordpress鏡像,我們要?jiǎng)?chuàng)建一個(gè)Dockerfile:

  1. 安裝Apache、PHP5和MySQL
  2. 下載Wordpress,解壓到文件系統(tǒng)的某個(gè)地方
  3. 創(chuàng)建一個(gè)MySQL數(shù)據(jù)庫(kù)
  4. 更新WordPress的配置文件,指向MySQL數(shù)據(jù)庫(kù)
  5. 把WordPress設(shè)置為Apache的DocumentRoot
  6. 啟動(dòng)MySQL和Apache(比如用supervisord

幸運(yùn)的是,很多人已經(jīng)成功了,比如John Fink的GitHub庫(kù)就包括創(chuàng)建這樣一個(gè)Wordpress鏡像需要的所有內(nèi)容。

Docker用例

除了用可靠、可重復(fù)的方式簡(jiǎn)化復(fù)雜應(yīng)用的部署,Docker還有很多用途。下面是一些有趣的Docker用法和項(xiàng)目:

  • 持續(xù)集成和部署:在Docker容器里構(gòu)建軟件,確保構(gòu)建之間的隔離性。構(gòu)建好的軟件鏡像可以自動(dòng)推到私有的Docker倉(cāng)庫(kù)中,并部署到測(cè)試環(huán)境或生產(chǎn)環(huán)境。
  • Dokku:一個(gè)簡(jiǎn)單的PaaS,用不到一百行的Bash構(gòu)建而成。
  • FlynnDeis,兩個(gè)使用Docker的開源PaaS項(xiàng)目。
  • 在容器里運(yùn)行桌面環(huán)境
  • CoreOS驗(yàn)證了Docker的合理性,CoreOS是個(gè)非常輕量級(jí)的Linux發(fā)行版,其中的應(yīng)用都用Docker安裝、運(yùn)行,由systemd管理。

Docker不是什么

盡管Docker有助于系統(tǒng)的可靠部署,但它本身并不是個(gè)完全成熟的部署系統(tǒng)。它操作的是容器里運(yùn)行的應(yīng)用。哪個(gè)容器安裝在哪個(gè)服務(wù)器上,以及如何啟動(dòng)它們,則超出了Docker的范圍。

同樣的,Docker也不處理跨多個(gè)容器(可能在多個(gè)物理服務(wù)器上,也可能在多個(gè)VM上)運(yùn)行的應(yīng)用。要讓容器互相通信,需要某些發(fā)現(xiàn)機(jī)制,來(lái)找出哪些IP和端口上的其他應(yīng)用可用。這和跨常規(guī)虛擬機(jī)的服務(wù)發(fā)現(xiàn)非常相似。etcd等工具,或者其他的服務(wù)發(fā)現(xiàn)機(jī)制都能用來(lái)解決這個(gè)問(wèn)題。

結(jié)論

雖然本文描述的所有內(nèi)容用原始的LXC、cgroups和AUFS也可能實(shí)現(xiàn),但實(shí)現(xiàn)起來(lái)絕對(duì)沒有那么容易或簡(jiǎn)單。Docker提供了一種簡(jiǎn)單的方式將復(fù)雜應(yīng)用打包到容器中,而且能輕松版本化、可靠分發(fā)。進(jìn)而讓輕量級(jí)的Linux容器和真正的虛擬機(jī)一樣靈活、強(qiáng)大,但成本更低、方式更為便捷。即便Vagrant VirtualBox VM在Macbook Pro上,使用運(yùn)行在其中的Docker創(chuàng)建的Docker鏡像也能很好地運(yùn)行在EC2、Rackspace Cloud或物理硬件上,反之亦然。

Docker可以從它的網(wǎng)站上獲取,并免費(fèi)使用。交互式的入門指南很不錯(cuò)。項(xiàng)目的路線圖指出,第一個(gè)生產(chǎn)就緒的版本是2013年10月發(fā)布的0.8版本,不過(guò)此前大家已經(jīng)在生產(chǎn)環(huán)境里使用Docker了。

【編輯推薦】

【責(zé)任編輯:徐川 TEL:(010)68476606】

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
超實(shí)用Docker入門學(xué)習(xí)教程!
使用docker
Ubuntu 16.04上Docker使用手記
Docker容器
Docker實(shí)戰(zhàn):Docker安裝WordPress,快速搭建自己的博客
虛擬技術(shù)之掌握docker核心架構(gòu)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服