亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【Docker實(shí)戰(zhàn)入門學(xué)習(xí)筆記】什么是docker?

seanHai / 2819人閱讀

摘要:實(shí)現(xiàn)前述目的的方式有兩種在一個(gè)文件中指定一個(gè)基礎(chǔ)鏡像及需要完成的修改或通過運(yùn)行一個(gè)鏡像,對其進(jìn)行修改并提交。容器對外公開服務(wù)是必要的,因此允許公開容器的特定端口。鏡像必須完全可移植,不允許例外。

Docker是一個(gè)相對較新且發(fā)展非??焖俚捻?xiàng)目,可用來創(chuàng)建非常輕量的“虛擬機(jī)”。注意,這里的引號非常重要,Docker創(chuàng)建的并非真正的虛擬機(jī),而更像是打了激素的chroot,嗯,是大量的激素。

Docker能做什么?

Docker可以解決虛擬機(jī)能夠解決的問題,同時(shí)也能夠解決虛擬機(jī)由于資源要求過高而無法解決的問題。Docker能處理的事情包括:

隔離應(yīng)用依賴
創(chuàng)建應(yīng)用鏡像并進(jìn)行復(fù)制
創(chuàng)建容易分發(fā)的即啟即用的應(yīng)用
允許實(shí)例簡單、快速地?cái)U(kuò)展
測試應(yīng)用并隨后銷毀它們

Docker背后的想法是創(chuàng)建軟件程序可移植的輕量容器,讓其可以在任何安裝了Docker的機(jī)器上運(yùn)行,而不用關(guān)心底層操作系統(tǒng)。

概念

鏡像

Docker的鏡像類似虛擬機(jī)的快照,但更輕量,非常非常輕量。
創(chuàng)建Docker鏡像有幾種方式,多數(shù)是在一個(gè)現(xiàn)有鏡像基礎(chǔ)上創(chuàng)建新鏡像,因?yàn)閹缀跄阈枰娜魏螙|西都有了公共鏡像,包括所有主流Linux發(fā)行版,你應(yīng)該不會找不到你需要的鏡像。

要創(chuàng)建一個(gè)鏡像,你可以拿一個(gè)鏡像,對它進(jìn)行修改來創(chuàng)建它的子鏡像。實(shí)現(xiàn)前述目的的方式有兩種:在一個(gè)文件中指定一個(gè)基礎(chǔ)鏡像及需要完成的修改;或通過“運(yùn)行”一個(gè)鏡像,對其進(jìn)行修改并提交。

鏡像擁有唯一ID,以及一個(gè)供人閱讀的名字和標(biāo)簽對。鏡像可以命名為類似ubuntu:latest、ubuntu:precise、django:1.6、django:1.7等等。

其實(shí),鏡像是一個(gè)json,它指定了從該鏡像運(yùn)行的容器的特性,union裝載點(diǎn)保存在哪里,要公開什么端口等等。

容器

你可以從鏡像中創(chuàng)建容器,這等同于從快照中創(chuàng)建虛擬機(jī),不過更輕量。應(yīng)用是由容器運(yùn)行的。

舉個(gè)例子,你可以下載一個(gè)Ubuntu的鏡像(有個(gè)叫docker registry的鏡像公共倉庫),通過安裝Gunicorn和Django應(yīng)用及其依賴項(xiàng)來完成對它的修改,然后從該鏡像中創(chuàng)建一個(gè)容器,在它啟動后運(yùn)行你的應(yīng)用。

容器與虛擬機(jī)一樣,是隔離的。它們也擁有一個(gè)唯一ID和唯一的供人閱讀的名字。容器對外公開服務(wù)是必要的,因此Docker允許公開容器的特定端口。

與虛擬機(jī)相比,容器有一個(gè)很大的差異,它們被設(shè)計(jì)用來運(yùn)行單進(jìn)程,無法很好地模擬一個(gè)完整的環(huán)境(如果那是你需要的,請看看LXC)。你可能會嘗試運(yùn)行runit或supervisord實(shí)例來啟動多個(gè)進(jìn)程,但(以我的愚見)這真的沒有必要。
單進(jìn)程與多進(jìn)程之爭非常精彩。你應(yīng)該知道的是,Docker設(shè)計(jì)者極力推崇“一個(gè)容器一個(gè)進(jìn)程的方式”,如果你要選擇在一個(gè)容器中運(yùn)行多個(gè)進(jìn)程,那唯一情況是:出于調(diào)試目的,運(yùn)行類似ssh的東西來訪問運(yùn)行中的容器,不過docker exec命令解決了這個(gè)問題。
【容器和虛擬機(jī)的第二個(gè)巨大差異是:當(dāng)你停止一個(gè)虛擬機(jī)時(shí),可能除了一些臨時(shí)文件,沒有文件會被刪除;當(dāng)你停止一個(gè)Docker容器,對初始狀態(tài)(創(chuàng)建容器所用的鏡像的狀態(tài))做的所有變化都會丟失?!浚ㄗg者注:該論述不正確,已與作者確認(rèn),感謝lostsnow指正)
容器是設(shè)計(jì)來運(yùn)行一個(gè)應(yīng)用的,而非一臺機(jī)器。你可能會把容器當(dāng)虛擬機(jī)用,但如我們所見,你將失去很多的靈活性,因?yàn)镈ocker提供了用于分離應(yīng)用與數(shù)據(jù)的工具,使得你可以快捷地更新運(yùn)行中的代碼/系統(tǒng),而不影響數(shù)據(jù)。

數(shù)據(jù)卷

數(shù)據(jù)卷讓你可以不受容器生命周期影響進(jìn)行數(shù)據(jù)持久化。它們表現(xiàn)為容器內(nèi)的空間,但實(shí)際保存在容器之外,從而允許你在不影響數(shù)據(jù)的情況下銷毀、重建、修改、丟棄容器。Docker允許你定義應(yīng)用部分和數(shù)據(jù)部分,并提供工具讓你可以將它們分開。使用Docker時(shí)必須做出的最大思維變化之一就是:容器應(yīng)該是短暫和一次性的。
卷是針對容器的,你可以使用同一個(gè)鏡像創(chuàng)建多個(gè)容器并定義不同的卷。卷保存在運(yùn)行Docker的宿主文件系統(tǒng)上,你可以指定卷存放的目錄,或讓Docker保存在默認(rèn)位置。保存在其他類型文件系統(tǒng)上的都不是一個(gè)卷,稍后再具體說。

鏈接

鏈接是Docker的另一個(gè)重要部分。
容器啟動時(shí),將被分配一個(gè)隨機(jī)的私有IP,其它容器可以使用這個(gè)IP地址與其進(jìn)行通訊。這點(diǎn)非常重要,原因有二:一是它提供了容器間相互通信的渠道,二是容器將共享一個(gè)本地網(wǎng)絡(luò)。我曾經(jīng)碰到一個(gè)問題,在同一臺機(jī)器上為兩個(gè)客戶啟動兩個(gè)elasticsearch容器,但保留集群名稱為默認(rèn)設(shè)置,結(jié)果這兩臺elasticsearch服務(wù)器立馬變成了一個(gè)自主集群。注:限制容器間通訊是可行的,請閱讀Docker的高級網(wǎng)絡(luò)文檔做進(jìn)一步了解。
要開啟容器間通訊,Docker允許你在創(chuàng)建一個(gè)新容器時(shí)引用其它現(xiàn)存容器,在你剛創(chuàng)建的容器里被引用的容器將獲得一個(gè)(你指定的)別名。我們就說,這兩個(gè)容器鏈接在了一起。
因此,如果DB容器已經(jīng)在運(yùn)行,我可以創(chuàng)建web服務(wù)器容器,并在創(chuàng)建時(shí)引用這個(gè)DB容器,給它一個(gè)別名,比如dbapp。在這個(gè)新建的web服務(wù)器容器里,我可以在任何時(shí)候使用主機(jī)名dbapp與DB容器進(jìn)行通訊。
Docker更進(jìn)一步,要求你聲明容器在被鏈接時(shí)要開放哪些端口給其他容器,否則將沒有端口可用。

Docker鏡像的可移植性

在創(chuàng)建鏡像時(shí)有一點(diǎn)要注意。Docker允許你在一個(gè)鏡像中指定卷和端口。從這個(gè)鏡像創(chuàng)建的容器繼承了這些設(shè)置。但是,Docker不允許你在鏡像上指定任何不可移植的內(nèi)容。
例如,你可以在鏡像里定義卷,只要它們被保存在Docker使用的默認(rèn)位置。這是因?yàn)槿绻阍谒拗魑募到y(tǒng)里指定了一個(gè)特定目錄來保存卷,其他使用這個(gè)鏡像的宿主無法保證這個(gè)目錄是存在的。
你可以定義要公開的端口,但僅限那些在創(chuàng)建鏈接時(shí)公開給其他容器的端口,你不能指定公開給宿主的端口,因?yàn)槟銦o從知曉使用那個(gè)鏡像的宿主有哪些端口可用。
你也不能在鏡像上定義鏈接。使用鏈接要求通過名字引用其他容器,但你無法預(yù)知每個(gè)使用那個(gè)鏡像的宿主如何命名容器。
鏡像必須完全可移植,Docker不允許例外。


它需要完成的東西?**
兩個(gè)詞:cgroups和union文件系統(tǒng)。Docker使用cgroup來提供容器隔離,而union文件系統(tǒng)用于保存鏡像并使容器變得短暫。

超級、無比簡單的步驟說明

第一步,安裝Docker。
Docker命令工具需要root權(quán)限才能工作。你可以將你的用戶放入docker組來避免每次都要使用sudo。
第二步,使用以下命令從公共registry下載一個(gè)鏡像:

docker pull ubuntu:latest

這個(gè)公共registry上有你需要的幾乎所有東西的鏡像:Ubuntu、Fedora、Postgresql、MySQL、Jenkins、Elasticsearch、Redis等等。Docker開發(fā)人員在這個(gè)公共registry里維護(hù)著數(shù)個(gè)鏡像,不過你能從上面拉取大量來自用戶發(fā)布的自建自建鏡像。
也許你需要或想要一個(gè)私有的registry(用于開發(fā)應(yīng)用之類的容器),你可以先看看這個(gè)?,F(xiàn)在,有好幾個(gè)方式可以設(shè)置你自己的私有registry。你也可以買一個(gè)。
第三步,列出你的鏡像:

docker images

第四步,從該鏡像上創(chuàng)建一個(gè)容器。

docker run --rm -ti ubuntu /bin/bash

--rm:告訴Docker一旦運(yùn)行的進(jìn)程退出就刪除容器。這在進(jìn)行測試時(shí)非常有用,可免除雜亂[圖片]-ti:告訴Docker分配一個(gè)偽終端并進(jìn)入交互模式。這將進(jìn)入到容器內(nèi),對于快速原型開發(fā)或嘗試很有用,但不要在生產(chǎn)容器中打開這些標(biāo)志[圖片]ubuntu:這是容器立足的鏡像[圖片]/bin/bash:要運(yùn)行的命令,因?yàn)槲覀円越换ツJ絾樱鼘@示一個(gè)容器的提示符
在運(yùn)行run命令時(shí),你可指定鏈接、卷、端口、窗口名稱(如果你沒提供,Docker將分配一個(gè)默認(rèn)名稱)等等。
現(xiàn)在,我們在后臺運(yùn)行一個(gè)容器:

docker run -d ubuntu ping 8.8.8.8

輸出的是分配的ID.

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

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

相關(guān)文章

  • 慕課網(wǎng)_《Docker入門學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。必填用于執(zhí)行命令,當(dāng)執(zhí)行完畢后,將產(chǎn)生一個(gè)新的文件層??蛇x指定此鏡像啟動時(shí)默認(rèn)執(zhí)行命令??蛇x用于指定需要暴露的網(wǎng)絡(luò)端口號??蛇x向鏡像中掛載一個(gè)卷組。 時(shí)間:2017年09月16日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:無 學(xué)習(xí)源碼:無 第一章:課程簡介 1-1 課程介紹 Docke...

    CoorChice 評論0 收藏0
  • AI開發(fā)書籍分享

    摘要:編程書籍的整理和收集最近一直在學(xué)習(xí)深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后也找了很多的書和文章,隨著不斷的學(xué)習(xí),也整理了下自己的學(xué)習(xí)筆記準(zhǔn)備分享出來給大家后續(xù)的文章和總結(jié)會繼續(xù)分享,先分享一部分的 編程書籍的整理和收集 最近一直在學(xué)習(xí)deep learning深度學(xué)習(xí)和機(jī)器學(xué)習(xí)的東西,發(fā)現(xiàn)深入地去學(xué)習(xí)就需要不斷的去提高自己算法和高數(shù)的能力然后...

    huayeluoliuhen 評論0 收藏0

發(fā)表評論

0條評論

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