国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【轉】Docker那些事(一)

William_Sang / 1330人閱讀

摘要:而實際上在宿主機中也會同步啟動一個進程,其在宿主機中是。如果其中的某一個容器正在執行密集型的任務,那么它就會影響其他容器的任務執行效率,導致多個容器相互影響并且搶占資源。

作者:榮幸

為什么是容器

如果問你現在最熱門的服務器端技術什么?想必很多人會不假思索的說是容器!

容器技術實際上并不是一個新鮮的名詞,現在大家一提到容器馬上想到的就是Docker,但是容器這個詞并不是Docker公司發明的,早期的Pass項目如CloudFoundry,其底層就是基于namespace和cgroups的容器技術。

Docker在當時實際上是個小弟,并沒有引起大家的注意,但是現在Docker已經成為容器事實上的標準,是什么讓Docker發展成現在這樣的程度呢?

這個功能就是Docker鏡像。

早期的Pass平臺最為人詬病的一個軟肋就是應用的打包部署問題,一個應用包在本地部署的好好的,接入Pass平臺后卻問題重重,而Docker鏡像解決了這個根本性問題。

容器到底是怎么回事

前面我們說了容器實際上是很早以前就有的技術,主要用到的是Linux的namespace,cgroups和rootfs。

我們經常說沙盒或者集裝箱,他們里面裝的是貨物,那容器這個沙盒裝的又是什么呢?是進程!

我們把進程裝進一個沙盒(容器)里面,給他制造邊界,和盒子外面的世界隔離,所以我們會說容器實際上就是加了圍墻的一個進程。

Namespace

為進程制造邊界就需要用到namespace技術,我們先運行一個docker進程看一下:

docker run -it busybox /bin/sh 
# -it 是提供一個tty的輸入輸出環境
# -d  后臺運行程序
# -v  掛載外部存儲
# -p  端口映射
# -e  參數變量
# busybox 輕量級的容器鏡像

我們執行ps命令,可以看到有趣的現象,PID為1的就是我們的啟動進程。

而實際上在宿主機中也會同步啟動一個進程,其PID在宿主機中是22035。

這就是PID namespace實現的障眼法,它在Linux進程啟動的時候(clone函數),會添加CLONE_NEWPID的參數,進程就會看到一個新的命名空間,所以進程ID就會變成1,實際上進程在宿主機上面還是22035。

除了PID namespace之外,還有很多的namespace,比如Network、Mount、User等,通過這些namespace對進程進行網絡、儲存、文件等進行限制,使這個進程看不到宿主機的真實情況,裝在了盒子里,這就是容器的核心原理了。

Cgroups

我們通過 Linux 的命名空間為新創建的進程隔離了文件系統、網絡、宿主機器上的其他進程,但是命名空間并不能夠為我們提供物理資源上的隔離,比如 CPU 或者內存。在同一臺機器上可能運行著多個對彼此以及宿主機器一無所知的『容器』,但這些容器卻共同占用了宿主機器的物理資源。

如果其中的某一個容器正在執行 CPU 密集型的任務,那么它就會影響其他容器的任務執行效率,導致多個容器相互影響并且搶占資源。如何對多個容器的資源使用進行限制就成了解決進程虛擬資源隔離之后的主要問題,而 Control Group(簡稱 cgroups)就能隔離宿主機器上的物理資源,例如 CPU、內存、磁盤 I/O 和網絡帶寬。cgroups介紹、應用實例及原理描述

容器是一個單進程的模型

通過namespace和cgroups的學習我們知道了容器就是一個啟用了多個namespace的應用進程,而這個進程能夠使用的資源受到cgroups的限制。這里面有個很重要的概念:容器是一個單進程的模型。

由于容器本質上面是一個進程,即PID=1的進程,他是后續其他進程的父進程,這就意味著在一個容器內,你沒有辦法同時運行兩個應用,除非找到一個公共的PID=1的父進程,并使用像systemd或者supervisor這樣的軟件替代PID=1的進程來做為容器的啟動進程。

但是我們還是希望容器和應用是同生命周期的,因為如果容器是好的,而里面的進程卻已經掛了,這樣處理起來就會非常麻煩了。

通過上面對容器原理的了解,我們能不能分析出容器和虛擬機的區別?

虛擬機需要hypervisor層,在上面創建虛擬機是一個完整的OS

容器是Linux上的一個進程

虛擬機的OS資源消耗比容器大的多

容器使用的是宿主機上相同的內核

容器隔離不了時間等資源

鏡像

前面說了Docker能夠成為容器現在的事實標準,主要是因為Docker創新了鏡像這個東西,那么鏡像在Linux系統里面是怎么存在的呢?

我們Docker的工作目錄是/app/docker/docker/ ,其中有個overlay2子目錄,它就是我們的鏡像目錄。

我們在這個目錄下有三個目錄和一個l的目錄,如下:

我們可以進入其中一個目錄,并查看該目錄下diff子目錄的內容:

到這里我們可以知道,鏡像是由多個層組織并定義的,這些層本質上是文件,這些文件是只讀的,每層具體的文件存放在層標識符下的diff目錄下。

所以我們在制作鏡像的時候就需要理解層的概念,提高鏡像制作的效率和重復使用性。

以我們最常使用的Dockerfile制作鏡像舉例:

FROM node:8.16.0

RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" >> /etc/timezone
RUN date -R

RUN mkdir -p /opt/app/
WORKDIR /opt/app

RUN rm -rf /opt/app/node_modules/
COPY package.json ./

RUN npm install --registry=https://registry.npm.taobao.org

Dockerfile 中的每一條命令在最終生成的鏡像中都會產生一層。Docker為了提高鏡像分發效率,給鏡像賦予了復用層的能力,在拉取,推送,build不同鏡像時,不同鏡像中內容相同的層可以被復用從而節省大量操作。

所以我們應該盡量把不變的命令放到 Dockerfile 的上層,這樣會顯著提高鏡像的使用效率。


如果希望了解更多關于Docker或運維技術的知識,請關注徐徐運維的公眾號

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/27880.html

相關文章

  • SegmentFault D-Day 杭州站回顧:和云相關的那些

    摘要:月日,杭州站圓滿收場。第二位嘉賓阿里巴巴移動安全專家何星宇,業界知名白帽子,本次的分享主題移動開發者所必須關注的安全那些事。杭州站分享已經結束,非常感謝大家的參與。 showImg(https://segmentfault.com/img/bVqWqG); 11 月 14 日,SegmentFault D-Day 杭州站圓滿收場。雖然這次『云』議題比較高深,但絲毫沒有影響到愛挑戰的小伙...

    luqiuwen 評論0 收藏0
  • 數人云CTO解讀Docker 1.12和金融業容器化

    摘要:月日數人云在上海舉辦金融沙龍,邀請上交所和近二十家來自銀行保險證券的技術專家一同探討容器技術在金融業中的最佳實踐。數人云肖德時在會上將傳統金融行業通過容器可以解決的四大問題做了逐一解讀。如何動態的分配,就是剛才上交所介紹的一些治理的方法。 7月29日數人云在上海舉辦金融沙龍,邀請上交所和近二十家來自銀行、保險、證券的IT技術專家一同探討容器技術在金融業中的最佳實踐。數人云CTO肖德時在...

    Gemini 評論0 收藏0
  • 云計算的那些--談談IAAS

    摘要:對于商業市場來說,特別是中國這樣一個云計算才剛剛起步的市場。反觀云計算售賣的一些商品,目前主要還是以服務器為主。云計算的本質是將計算能力轉化為標準化,可售賣的服務。可以說是云計算實踐的一個經典案例。有的人會問,云計算廠商需要提供哪些服務。 2015年伊始,國內云計算市場可謂風起云涌。各路群豪紛紛涌入這個市場。其中最活躍的領域當屬IAAS。阿里騰訊硝煙未盡,百度重新檢討了自己的PAAS戰略后,...

    KitorinZero 評論0 收藏0
  • 廣發銀行運維實踐分享:Docker適配傳統運維那些

    摘要:所以借鑒大家慣用的傳統運維思路,并配有一個與以前傳統對接的點,廣發銀行有如下幾個做法第一,操作系統。所以廣發使用了一個配置文件包。版本流程這是廣發銀行持續集總的框架。 數人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實錄第一彈來啦。今天是廣發銀行數據中心的運維老兵沈偉康關于傳統運維與容器適配的全方位分享,萬字長文傾情奉上~ 沈偉康,廣發銀行數據中心 運維中年人...

    taoszu 評論0 收藏0
  • <> 從20秒到0.5秒:個使用Rust語言來優化Python性能的案例

    摘要:的在調查發現問題在于的性能缺陷后,我們決定嘗試解析器的性能,這是為我們的工具編寫的。這意味著即使忽略任何優化,只是將解析器替換為解析器就可以緩解我們的性能瓶頸。 注: 轉自 微信公眾號高可用架構:從20秒到0.5秒:一個使用Rust語言來優化Python性能的案例 導讀:Python 被很多互聯網系統廣泛使用,但在另外一方面,它也存在一些性能問題,不過 Sentry 工程師分享的在關...

    Kahn 評論0 收藏0

發表評論

0條評論

William_Sang

|高級講師

TA的文章

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