Dokcer 的映象和倉庫

weixin_33968104發表於2018-09-23
Docker映象原理

Docker映象是由檔案系統疊加而成,最底層是一個引導檔案系統,即bootfs,類似於Linux/Unix的引導檔案系統,當一個容器啟動後,它將被移到記憶體中,而引導檔案系統則會被解除安裝,以留出更多的記憶體。
Docker映象的第二層是root檔案系統rootfs,它位於引導檔案系統之上。rootfs可以是一種或多種作業系統,如ubuntu。

  • 列出映象

    sudo docker images  # 列出映象 
    sudo dcoker images fedora   # 檢視 fedora 映象
    

    本地映象都儲存在 Docker 宿主機的 /var/lib/docker 目錄下。

    映象從倉庫中下載下來,映象儲存在倉庫中,而倉庫存在於 Registry 中,預設的 Registry 是由 Dokcer 公司來運營的公共 Registry 服務,即 Docker Hub。

    Docker Hub 中有2種型別的倉庫,使用者倉庫和頂層倉庫,使用者倉庫的映象都是由Docker使用者建立的,而頂層倉庫是由Docker內部的人來管理。

    使用者倉庫名的命名由使用者名稱和倉庫名兩部分組成的。如 jamtur01/puppet。

    每個映象倉庫都可以存放很多映象。為了區分同一倉庫的不同映象,Docker提供了標籤的功能,通過在倉庫名後面加上一個冒號和標籤名來指定該倉庫中的某一映象。如果沒有指定標籤,那麼Docker會自動下載latest標籤的映象。

    sudo docker run -t -i --name new_container ubuntu:12.04 /bin/bash
    
  • 拉取Ubutun映象

    sudo docker pull ubuntu:12.04
    

    通過pull命令先將映象拉取到本地,可以節省一個新映象啟動一個容器的所需的時間。

  • 查詢映象

    sudo docker search puppet
    

    可以利用該命令來查詢所有Docker Hub上公共的可用映象。

  • 刪除映象


構建映象

前面是拉取已經構建好的帶有定製內容的 Docker 映象,那麼如何修改和管理自己的映象,並且更新和管理這些映象,有以下2中方法:

  • 使用 docker commit 命令
  • 使用 docker build 命令 和 Dockerfile檔案
用Docker的commit命令建立映象

使用commit命令,可以將此想像為我們往版本控制系統裡面提交變更,先建立一個容器,並在容器裡做出修改,就像修改程式碼一樣,最後再將修改提交為一個新的映象。

docker run -i -t ubuntu /bin/bash   # 建立一個容器
apt-get -yqq update && apt-get -y install apache2   # 安裝apache2軟體包(容器內的shell)
docker commit jack/apche2:webserver # 提交定製容器
用Dockerfile構建映象

並不推薦使用docker commit的方法來構建映象,相反,推薦使用Dcokerfile的定義檔案和 docker build命令來構建映象。

# version: 0.0.1
FROM ubuntu:14.04
MAINTAINER xxx "xxx@xx.com"
RUN apt-get update && apt-get install -y nginx
RUN echo "hi, I am in your container" > /usr/share/nginx/html/index.html
EXPOSE 80

Dockerfile 由一系列的指令和引數組成。每條指令,如FROM,都必須為大寫字母,且後面要跟隨一個引數。

Dokcerfile 中的指令會按順序從上到下執行,所以應該更具需要合理安排指令的順序。

每條指令都會建立一個新的映象層並對映象進行提交。Docker 大體上按照如下流程執行Dockerfile中的指令:

  1. Docker 從基礎映象執行一個容器
  2. 執行一條指令,對容器做出修改
  3. 執行類似docker commit操作,提交一個新的映象層
  4. Docker 再基於剛提交的映象執行一個新的容器
  5. 執行Dockerfile中的下一條指令,直到所有指令都執行完畢
  • 構建映象

    docker build -t="jack/static-web:v1" .
    

    每一步的構建過程中都會將結果提交為映象,Docker的構造映象的過程中,它會將之前的映象層看作快取。想略過快取功能,可以使用--no-cache標誌。

    docker build --no-cache -t="Jack/static_web:v1" 
    

    -t標誌為新映象設定了倉庫和名稱。

相關文章