Docker學習①

使用Docker鏡像

 

獲取鏡像

鏡像是獲取容器的前提,官網的Docker Hub網站已經提供了數十萬個鏡像供大家開放下載。最好使用國內的鏡像加速網站,本人使用的是以下網易的鏡像加速:

#網易
http://hub-mirror.c.163.com

修改/etc/docker/daemon.json文件,此文件ubuntu下需自己創建並寫下:
{
    "registry-mirrors":"http://hub-mirror.c.163.com"
}

然後執行
1、systemctl daemon-reload
2、systemctl restart docker

命令:docker  [image]  pull

實際使用:docker [image] pull NAME[:TAG]

參數解釋:

  1. NAME:鏡像倉庫名稱(用以區分鏡像);
  2. TAG:鏡像的標籤(往往用來表示版本信息);

例:獲取一個Ubuntu 18.04系統的基礎鏡像可以使用如下命令:

$docker pull ubuntu:18.04

同時,如果從非官方的倉庫下載,則需要在倉庫名稱前指定完整的倉庫地址。例如從網易蜂巢的鏡像源下載ubuntu18.04鏡像,可以使用如下命令,此時下載的鏡像名稱爲hub:

docker pull hub.c.163.com/public/ubuntu18.04

pull子命令支持的選項主要包括:

  1. -a,-all-tags=true | false:是否獲取倉庫中的所有鏡像,默認爲否;
  2. --disable-content-trust:取消鏡像的內容校驗,默認爲真;

這個時候,可以使用指令進行操作:

 

查看鏡像信息

主要介紹Docker鏡像的ls、tag和inspect子命令

1、使用image命令列出鏡像

命令:docker imagesdocker image ls

【解析】

  1. 來自於哪個倉庫,比如ubuntu表示ubuntu系列的基礎鏡像;
  2. 鏡像的標籤信息,比如18.04、latest表示不同的版本信息;
  3. 鏡像的ID(唯一標識鏡像),如果兩個鏡像的ID相同,說明它們實際上指向了同一個鏡像;
  4. 創建時間,說明鏡像的最後更新時間;
  5. 鏡像大小,優秀的鏡像往往體積都較小;

images子命令主要支持如下選項:

  1. -a,--all=true | false:列出所有(包括臨時文件)鏡像文件,默認爲否;
  2. --digests=true | false:列出鏡像的數字摘要值,默認爲否;
  3. -f,--filter=[ ]:過濾列出的鏡像,如dangling=true只顯示沒有被使用的鏡像,也可指定帶有特定標註的鏡像等;
  4. --format=“TEMPLATE”:控制輸出格式,如.ID代表ID信息,.Repository代表倉庫信息等;
  5. --no-trunc=true | false:對輸出結果中太長的部分是否進行截斷,如鏡像的ID信息,默認爲是;
  6. -q,--quiet=true | false:僅輸出ID信息,默認爲否;

 

2、使用tag命令添加鏡像標籤

爲了方便在後續工作中使用特定鏡像,還可以使用docker tag命令來爲本地鏡像任意添加新的標籤。

命令:docker tag

例:添加一個新的myubuntu:latest鏡像標籤:

docker tag ubuntu:latest myubuntu:latest

 

3、使用inspect命令查看詳細信息

命令:docker [image] inspect

例子:docker [image] inspect ubuntu:18.04

返回:一串Json格式的數據

【注】如果只要其中一項內容時,可以使用-f來指定,例如,獲取鏡像的Architecture:

docker [image] inspect -f {{".Architecture"}} ubuntu:18.04

 

4、使用history命令查看鏡像歷史

既然鏡像文件由多個層組成,那麼怎麼知道每個層的內容具體是什麼呢?

命令:history子命令,列出各層的創建信息

例:查看ubuntu18.04鏡像的創建過程,可以使用如下命令:

docker history ubuntu:18.04

 

搜尋鏡像

主要介紹Docker鏡像的search子命令

命令:docker search [option] keyword

【參數解析】

  1. -f,--filter filter:過濾輸出內容;
  2. --format string:格式化輸出內容;
  3. --limit int:限制輸出結果個數,默認爲25個;
  4. --no-trunc:不截斷輸出結果;

例1:搜索官方提供的帶nginx關鍵字的鏡像

例2:搜索所有收藏數超過4的關鍵字包括tensorflow的鏡像

 

刪除和清理鏡像

主要介紹Docker鏡像的rm和prune子命令

1、使用標籤刪除鏡像

命令:docker rmi docker image rm

格式:docker rmi IMAGE [IMAGE...]

【參數解析】

  1. IMAGE可爲標籤或ID;
  2. -f,-force:強制刪除鏡像,即使有容器依賴它;
  3. -no-prune:不要清理未帶標籤的父鏡像;

例:要刪掉myubuntu:latest鏡像,可以使用如下命令

【注】

  1. 當指定了標籤進行刪除操作時,刪除的僅僅的標籤對應的鏡像,其餘的不作改變;
  2. 當鏡像只剩下一個標籤時,此時使用刪除命令會徹底刪除鏡像;

 

2、使用鏡像ID來刪除鏡像

【注】當有該鏡像的容器存在時,鏡像文件默認是無法被刪除的,如果想要強制刪除,必須使用-f參數。

通常不推薦使用強制參數來刪除一個存在容器依賴的鏡像。正確的做法是:先刪除依賴該鏡像的所有容器,再來刪除鏡像。

 

3、清理鏡像

使用Docker一段時間後,系統中可能會遺留一些臨時的鏡像文件,以及一些沒有被使用的鏡像,可以通過docker image prune命令來清理。

命令:docker image prune

【參數解析】

  1. -a,-all:刪除所有無用鏡像,不光是臨時鏡像;
  2. -filter filter:只清理符合給定過濾器的鏡像;
  3. -f,-force:強制刪除鏡像,而不進行提示確認;

例:如下命令會自動清理臨時的遺留鏡像文件層,最後會提示釋放的存儲空間

 

創建鏡像

創建鏡像的方法主要有三種:

  1. 基於已有鏡像的容器創建;
  2. 基於本地模板導入;
  3. 基於Dockerfile創建;

主要介紹Docker的commit、import和build子命令

 

1、基於已有容器創建

主要使用docker [container] commit子命令

命令:docker [container] commit [OPTIONS] CONTAINER [REPOSITORY [:TAG] ]

【參數解析】

  1. -a,--author=“”:作者信息;
  2. -c,--change=[ ]:提交的時候執行Dockerfile指令,包括CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | ONBUILD | USER | VOLUME | WORKDIR等;
  3. -m,--message=“”:提交信息;
  4. -p,--pause=true:提交時暫停容器運行;

下面演示如何使用該命令創建一個新鏡像:

首先,啓動一個鏡像,並在其中進行修改操作。例如,創建一個test文件,之後退出:

【注】記住容器的ID爲197fd52cbe8a

此時該容器與原鏡像相比,已經發生了改變,可以使用docker [container] commit命令來提交成爲一個新的鏡像

【注】Docker技術入門與實戰一書中,在上圖箭頭處會多一個[ container ],作修改如圖。

順利的話,會返回新創建鏡像的ID信息,如上圖。

 

2、基於本地模板導入

用戶可以直接從一個操作系統模板文件導入一個鏡像,主要使用docker [container] import命令

命令:docker [image] import [OPTIONS] file | URL | -[REPOSITORY [:TAG] ]

 

3、基於Dockerfile創建

Dockerfile是一個文本文件,利用給定的指令描述基於某個父鏡像創建新鏡像的過程。

使用docker build,用戶可以創建一個連續執行多個命令行指令的自動化構建的鏡像。

Docker鏡像是分層結構,由只讀層組成,每個只讀層表示Dockerfile指令。這些層被堆疊起來,每一層都是前一層變化的增量。例如:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

上面沒條指令的含義:

  • FROM :創建一個基礎鏡像層(基於ubuntu:18.04),之後的指令都是基於該層的。因此一個 Dockerfile 中 FROM 是必備的指令,並且必須是第一條指令。
  • COPY :將docker客戶端當前目錄中的文件全部 copy 到容器中的/app目錄中。
  • RUN :使用make構建應用程序,RUN 指令是用來執行命令行命令的。
  • CMD :指定在容器中運行什麼命令。

當您運行一個鏡像像並生成一個容器時,將在底層層上添加一個新的可寫層(“容器層”)。對正在運行的容器所做的所有更改,如寫入新文件、修改現有文件和刪除文件,都被寫入這個可寫的容器層。

 

存儲和載入鏡像

主要介紹Docker鏡像的save和load子命令。

命令:docker [image] savedocker [image] load

 

1、存入鏡像

命令:docker [image] save

【參數支持】

  • -o、-output string參數,導出鏡像到指定的文件中

例:導出本地的ubuntu18.04鏡像爲文件ubuntu_18.04.tar.gz

之後,即可通過分享tar.gz包將該鏡像分享給他人。

 

2、載入鏡像

可以使用docker [image] load將導出的tar文件再導入到本地鏡像庫。

【參數支持】

  • -i、-input string選項,從指定文件中讀入鏡像內容

例:從文件ubuntu_18.04.tar.gz導入鏡像到本地鏡像列表

 

上傳鏡像

主要介紹Docker鏡像的push子命令

命令:docker [image] push NAME[:TAG] | [REGISTRY_HOST [:REGISTRY_PORT] / ] NAME [:TAG]

使用docker [image] push上傳鏡像到倉庫,默認上傳到Docker Hub官方倉庫(需要登錄)。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章