<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      標簽列表

      everest33

      自制力

      導航

      Dockerfile、Docker鏡像和Docker容器的關系

      轉載自: https://blog.csdn.net/zhousenshan/article/details/51501734

      Dockerfile 是軟件的原材料,Docker 鏡像是軟件的交付品,而  Docker 容器則可以認為是軟件的運行態。從應用軟件的角度來看,Dockerfile、Docker 鏡像與 Docker  容器分別代表軟件的三個不同階段,Dockerfile 面向開發,Docker 鏡像成為交付標準,Docker  容器則涉及部署與運維,三者缺一不可,合力充當 Docker 體系的基石。

      簡單來講,Dockerfile構建出Docker鏡像,通過Docker鏡像運行Docker容器。

      我們可以從Docker容器的角度,來反推三者的關系。首先可以來看下圖:

       

      我們假設這個容器的鏡像通過以下Dockerfile構建而得:

      FROM ubuntu:14.04  
      
      ADD run.sh /  
      
      VOLUME /data  
      
      CMD ["./run.sh"]  

      2.1 Dockerfile與Docker鏡像

      首先,我們結合上圖來看看Dockerfile與Docker鏡像之間的關系。

       

      FROM ubuntu:14.04:設置基礎鏡像,此時會使用基礎鏡像 ubuntu:14.04 的所有鏡像層,為簡單起見,圖中將其作為一個整體展示。

       

      ADD run.sh /:將 Dockerfile 所在目錄的文件 run.sh 加至鏡像的根目錄,此時新一層的鏡像只有一項內容,即根目錄下的 run.sh。

       

      VOLUME /data:設定鏡像的 VOLUME,此 VOLUME  在容器內部的路徑為 /data。需要注意的是,此時并未在新一層的鏡像中添加任何文件,即構建出的磁層鏡像中文件為空,但更新了鏡像的 json  文件,以便通過此鏡像啟動容器時獲取這方面的信息。

       

      CMD ["./run.sh"]:設置鏡像的默認執行入口,此命令同樣不會在新建鏡像中添加任何文件,僅僅在上一層鏡像 json 文件的基礎上更新新建鏡像的 json 文件。

       

       

      因此,通過以上分析,以上的Dockerfile可以構建出一個新的鏡像,包含4個鏡像層,每一條命令會和一個鏡像層對應,鏡像之間會存在父子關系。圖中很清楚的表明了這些關系。

       

      2.2 Docker鏡像與Docker容器的關系

      Docker鏡像是Docker容器運行的基礎,沒有Docker鏡像,就不可能有Docker容器,這也是Docker的設計原則之一。

       

      可以理解的是:Docker鏡像畢竟是鏡像,屬于靜態的內容;而Docker容器就不一樣了,容器屬于動態的內容。動態的內容,大家很容易聯想到進程,內存,CPU等之類的東西。的確,Docker容器作為動態的內容,都會包含這些。

       

      為了便于理解,大家可以把Docker容器,理解為一個或多個運行進程,而這些運行進程將占有相應的內存,相應的CPU計算資源,相應的虛擬網絡設備以及相應的文件系統資源。而Docker容器所占用的文件系統資源,則通過Docker鏡像的鏡像層文件來提供。

       

      那么作為靜態的鏡像,如何才有能力轉化為一個動態的Docker容器呢?此時,我們可以想象:第一,轉化的依據是什么;第二,由誰來執行這個轉化操作。

       

      其實,轉化的依據是每個鏡像的json文件,Docker可以通過解析Docker鏡像的json的文件,獲知應該在這個鏡像之上運行什么樣的進程,應該為進程配置怎么樣的環境變量,此時也就實現了靜態向動態的轉變。

       

      誰來執行這個轉化工作?答案是Docker守護進程。也許大家早就理解這樣一句 話:Docker容器實質上就是一個或者多個進程,而容器的父進程就是Docker守護進程。這樣的,轉化工作的執行就不難理解了:Docker守護進程 手握Docker鏡像的json文件,為容器配置相應的環境,并真正運行Docker鏡像所指定的進程,完成Docker容器的真正創建。

       

       

      Docker容器運行起來之后,Docker鏡像json文件就失去作用了。此時Docker鏡像的絕大部分作用就是:為Docker容器提供一個文件系統的視角,供容器內部的進程訪問文件資源。

       

      再次回到上圖,我們再來看看容器和鏡像之間的一些特殊關系。首先,之前已經提及Docker鏡像是分層管理的,管理Docker容器的時候,Docker鏡像仍然是分層管理的。由于此時動態的容器中已經存在進程,進程就會對文件系統視角內的文件進行讀寫操作,因此,就會涉及一個問題:容器是否會篡改Docker鏡像的內容?

       

      答案自然是不會的。統一來講,正如上圖,所有的Docker鏡像層對于容器來說,都是只讀的,容器對于文件的寫操作絕對不會作用在鏡像中。

       

      既然如此,實現的原理就很重要,究其根本:Docker守護進程會在Docker鏡像的 最上層之上,再添加一個可讀寫層,容器所有的寫操作都會作用到這一層中。而如果Docker容器需要寫底層Docker鏡像中的文件,那么此時就會涉及一 個叫Copy-on-Write的機制,即aufs等聯合文件系統保證:首先將此文件從Docker鏡像層中拷貝至最上層的可讀寫層,然后容器進程再對讀 寫層中的副本進行寫操縱。對于容器進程來講,它只能看到最上層的文件。

       

       

      那最后我們再來說說:Docker容器的文件系統視角中,到底是不是存在一些內容,不是存儲于Docker鏡像中的?

       

      這次的答案依舊是肯定的。

       

      再次重申一點,Docker鏡像中存儲的都是一些靜態文件。這些文件原則上應該和容器具體信息以及主機信息完全解藕。那么Docker容器中不存在Docker鏡像中的內容主要有以下幾點:

       

      1./proc以及/sys等虛擬文件系統的內容

       

      2.容器的hosts文件,hostname文件以及resolv.conf文件,這些事具體環境的信息,原則上的確不應該被打入鏡像。

       

      3.容器的Volume路徑,這部分的視角來源于從宿主機上掛載到容器內部的路徑

       

      4.部分的設備文件

      QA選集:

      問:為什么一個ubuntu:14.04鏡像的鏡像層的數量是4個,前三層的內容似乎有相同的,如etc?

      孫宏亮:這一點,細心的大家肯定發現了。首先,雖然三層 都有,但是會存在兩種情況,etc的子目錄下有相同路徑的文件,那么上層的會覆蓋下層的文件;如果內部的文件路徑不相同,那么都會存在,都會呈現給最上 層。[可別較真,說目錄也是文件哈,意會]

      問:關于docker安全性問題,對于安全是怎樣處理的,如果我從hub下載鏡像,能判別是否安全么2.層級之間的依賴會導致一個崩了整個docker 都崩了么?

      孫宏亮:從流程上來講,如果一切可控的話,我認為是安全的。但是依然會存在一些隱患,比如Dockerfile中基于的base  images是否完全受信;鏡像的傳輸過程是否受信;自己的private docker resgitry的安全級別達到什么樣的層次,這些都有影響。

      問:如何保證僅有的一個deamon的穩定性健壯性?

      孫宏亮:這個問題首先需要知道docker  daemon的穩定性在哪些方面,那種場景下比較差?的確,docker  daemon存在弊病。比如,daemon和容器的耦合等,目前general來講,docker daemon保證絕對的穩定應該還做不到。

      問:生產環境中怎么用docker備份mysql數據?

      孫宏亮:數據存儲上docker,我目前的建議是:三思。舉個簡單的例子,官方的mysql鏡像運行出來的 容器,密碼是明文的,明文的密碼存在于:docker inspect container_name,  container.json文件中,容器的環境變量中,甚至在日志文件中都會存在,just think about  it。當然也有辦法解決,緩解這種情況。

      問:如果是多層構建,中間的一個層做了升級或者bugfix,會潛在影響上層吧?

      孫宏亮:這個bugfix會在上層有體現,但是使用效果是不會有影響的,還有之前的bug會永遠留在下層,但是沒有影響。(責編/魏偉)

      posted on 2021-03-25 16:27  everest33  閱讀(290)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 久久久久四虎精品免费入口| 人妻丰满熟妇av无码区不卡| 国产精品成人自产拍在线| 女人18片毛片60分钟| 资源新版在线天堂偷自拍| 国产午夜福利在线视频| 亚洲人妻中文字幕一区| 国产超碰人人做人人爰| 极品无码人妻巨屁股系列| 免费无码一区无码东京热| 国产精品人妇一区二区三区| 久久香蕉国产线看观看猫咪av| 亚洲午夜天堂| 亚洲一区二区三区丝袜| 中文字幕乱码中文乱码毛片| 国产精品视频一区不卡| 亚洲精品久久久久成人2007| 国产卡一卡二卡三免费入口| 国产中文字幕一区二区| 横山县| 99久久精品久久久久久婷婷| 成人拍拍拍无遮挡免费视频| 国产午夜鲁丝片av无码| 欧美色欧美亚洲高清在线视频| 中文字幕少妇人妻精品| 亚洲国产日韩一区三区| 99久久国产综合精品色| 动漫av网站免费观看| 东安县| 中文字幕久久精品波多野结| 欧美日韩国产va在线观看免费| 亚洲精品日韩中文字幕| 成人综合婷婷国产精品久久蜜臀| 麻豆成人传媒一区二区| 国产成人a∨激情视频厨房| 亚洲天堂一区二区成人在线 | 欧美视频精品免费覌看| 亚洲精品乱码久久久久久自慰 | 亚洲最大天堂在线看视频| 午夜福利高清在线观看| 国产精品自在拍首页视频|