1. 程式人生 > >04_Docker入門(下)之docker映象和倉庫的使用

04_Docker入門(下)之docker映象和倉庫的使用

docker映象和倉庫

映象介紹

  • docker映象是由檔案系統疊加而成的。最低端是一個引導檔案系統,即bootfs。當一個容器啟動後,它會將被移動到記憶體中,而引導檔案系統則會被解除安裝,以留出更多的記憶體以供initrd磁碟映象使用。
  • docker映象第二層是root檔案系統rootfs,它位於引導檔案系統之上。rootfs可以使一種或者多種作業系統。
  • 在docker中rootfs(root檔案系統)永遠只能是隻讀狀態,並且docker利用聯合載入技術又會在root檔案系統層上載入更多的只讀檔案系統。聯合載入指的是一次同時載入多個檔案系統,但是在外面看起來只能看到一個檔案系統。聯合載入會將隔層檔案系統疊加到一起,這樣最終的檔案系統會包含所有底層的檔案和目錄。
  • 當從一個映象啟動容器時,docker會在該映象的最頂層載入一個讀寫的檔案系統。
    當docker第一次啟動一個容器時,初始的讀寫層是空的。當檔案系統發生變化時,這些變化都會應用到這一層上。如果修改一個檔案,這個檔案首先會從該讀寫層下面的只讀層複製到該讀寫層。該檔案的只讀版本依然存在,但是已經被讀寫層中的該檔案的副本所隱藏了。
  • 通常這種機制被稱作寫時複製,這也是使docker如此強大的技術之一。每個只讀映象層都是隻讀的,並且以後永遠不會變化。當建立一個新的容器時,docker會構建出一個映象棧,並且在棧的最頂端新增一個讀寫層。這個讀寫層再加上其下面的映象以及一些配置項資料,就構成了一個新的容器。

檢視映象

docker images
本地映象都儲存在docker宿主機的/var/lib/docker目錄下,每個映象都儲存在docker採用的儲存驅動目錄下面,如aufs或者devicemapper。也可以在/var/lib/docker/containers目錄下面看到所有的容器。
映象從倉庫下載下來。映象儲存在倉庫中,而倉庫存在於Registry中。預設的Registry是由docker公司運營的公共Registry服務,即Docker Hub。

拉取映象

docker run命令從映象啟動一個容器時,如果該映象不在本地,docker就會先從Docker Hub下載該映象。如果沒有指定具體的映象標籤,那麼docker會自動下載latest標籤的映象。
docker run -t -i --name test_centos centos /bin/bash


使用docker pull命令來拉取centos倉庫中的內容,可以節省從一個新的映象啟動一個容器的時間。

查詢映象

可以通過docker search nginx命令來查詢所有docker hub上的可用映象。(nginx是可變引數)
欄位含義:
倉庫名稱、映象描述、使用者評價(starts)、是否官方、自動構建

構建映象

https://hub.docker.com/login 新建賬號
docker login


docker commit 映象ID 映象倉庫名/倉庫名
docker commit去提交,指定了要提交的修改過的容器id,以及一個目標映象倉庫和映象名。docker commit提交的只是建立容器的映象和容器當前狀態不同部分,所以這部分非常輕量。
也可以加引數來制定更多描述
docker commit -m="a new image" --author="bigdata" 映象ID 映象倉庫名/倉庫名:test
-m指的是建立新的映象的提交資訊,--author用來列出映象作者資訊。並在最後加一個test標籤。
執行後,可以通過docker images命令檢視到提交的新映象。
使用docker push 映象倉庫名/倉庫名命令,提交本地的映象到docker hub上。

使用docker build命令和Dockerfile檔案構建映象。

我們並不推薦用docker commit命令來構建映象,推薦使用被稱為Dockerfile的定義檔案和docker build命令來構建映象。Dockerfile使用基本的基於DSL語法的指令來描述一個docker映象,之後使用docker build命令基於該Dockerfile中的指令構建一個新的映象。
建立資料夾 mkdir /data/program/dockerfile
建立檔案 touch Dockerfile
建立/data/program/dockerfile目錄來儲存Dockerfile檔案,這個目錄就是構建環境,docker則稱此環境為上下文或者構建上下文。docker會在構建映象時將構建上下文和該上下文的檔案和目錄上傳到docker守護程序,這樣docker守護程序就能直接訪問你想在映象中儲存的任何程式碼、檔案或者其他資料。


構建映象
docker build -t="倉庫/名稱:標籤 ."後面加一個.


使用docker history 映象ID檢視映象構建過程
使用docker port 容器ID 容器內應用埠號命令來檢視容器內應用埠號對映到宿主機的隨機埠是什麼。
使用docker run -d -p 80:8080 --name tomcatstart tomcat:7.0來指定宿主機的80埠對映到容器內的8080埠

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">