學習Docker--使用Docker鏡像

一、獲取鏡像

語法格式如下

docker [image] pull NAME[:TAG]

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

$ docker pull ubuntu:18.04

在這裏插入圖片描述
從鏡像的下載過程可以看出,鏡像文件一般由若干層組成,23884877105a這樣的串是層的唯一id(完整的id包括256比特,64個十進制字符組成)。使用docker pull命令下載中會獲取並輸出鏡像的各層信息。當不同的鏡像包括相同的層時,本地僅存儲了層的一份內容,減小了存儲空間。

對於Docker鏡像來說,如果不顯示指定TAG,則默認會選擇latest標籤,這會下載倉庫中最新版本的鏡像。下面的例子將從Docker Hub的Ubuntu倉庫下載一個最新版本的Ubuntu操作系統的鏡像:

//該命令實際上下載到的就是ubuntu:latest鏡像

$ docker pull ubuntu

嚴格來說,鏡像的倉庫名稱中還應該添加倉庫地址(註冊服務器)作爲前綴,只是默認使用的是官方Docker Hub服務,該前綴可以忽略。如果想下載別的registry的鏡像就需要加上倉庫地址,例如下面的命令會從網易蜂巢的倉庫中下載鏡像,而不是Docker Hub下載。

$ docker pull hub.c.163.com/public/ubuntu:18.04

下載鏡像到本地之後,即可隨時使用該鏡像,例如利用該鏡像創建一個容器,在其中運行bash應用,執行打印“Hello World”命令:
在這裏插入圖片描述

二、查看鏡像信息

1. 使用images命令列出鏡像
使用如下命令列出本地主機上已有鏡像的基本信息:

$ docker images
or
$ docker image ls

在這裏插入圖片描述
注意:其中鏡像的ID信息十分重要,他唯一標識了鏡像。在使用鏡像ID的時候,一般可以使用該ID的前若干個字符組成的可區分串來替代完整的ID。

2. 使用tag命令添加鏡像標籤
使用docker tag命令爲本地鏡像任意添加新的標籤。例如,添加一個myubuntu:latest鏡像標籤:

$ docker tag ubuntu:18.04 myubuntu:latest

在這裏插入圖片描述
之後,用戶就可以直接使用myubuntu:latest來表示這個鏡像了。而且,可以看到我們新添加標籤的鏡像和原始鏡像的ID是一模一樣的,只是別名不同,docker tag命令添加的標籤實際上起到了類似於鏈接的作用。

3. 使用inspect命令查看詳細信息
使用docker inspect命令可以獲取該鏡像的詳細信息,包括製作者、適應架構、各層的數字摘要等:

$ docker inspect ubuntu:18.04

在這裏插入圖片描述
該命令返回的是一個JSON格式的信息,如果我們只要其中一項的內容,可以使用-f來指定,例如,獲取鏡像的Architecture:

$ docker inspect -f {{".Architecture"}} ubuntu:18.04

在這裏插入圖片描述
4. 使用history命令查看鏡像歷史

既然鏡像文件由多個層組成,那麼怎麼知道各個層的內容具體是什麼呢?這時候可以使用history子命令,該命令將列出各層的創建信息。
例如,查看ubuntu:18.04鏡像的創建過程,可以使用如下命令:

$ docker history ubuntu:18.04

在這裏插入圖片描述

三、搜尋鏡像

使用docker search命令可以搜索Docker Hub官方倉庫的鏡像。語法爲:

docker search [option] keyword

命令選項主要包括:

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

例如,搜索官方提供的帶ubuntu關鍵字的鏡像,如下所示:
在這裏插入圖片描述

四、刪除和清理鏡像

1. 使用標籤刪除鏡像
使用docker rmidocker rm命令可以刪除鏡像,命令格式爲:

docker rmi  IMAGE [IMAGE...]   //其中IMAGE可以爲標籤或ID。

支持選項包括:

  • -f , -force:強制刪除鏡像,即使有容器依賴它;
  • -no-prune:不要清理未帶標籤的父鏡像。

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

$ docker rmi myubuntu:latest

在這裏插入圖片描述
當同一個鏡像擁有多個標籤時,docker rmi命令只是刪除該鏡像多個標籤中的指定標籤而已,並不影響鏡像文件,因此上述操作相當於只是刪除了鏡像的一個標籤副本而已。但當鏡像只剩一個標籤的時候就要小心,此時再使用docker rmi命令會徹底刪除鏡像。

2. 使用鏡像ID刪除鏡像
當使用docker rmi命令,並且後面跟上鏡像的ID(也可以是能進行區分的部分ID串前綴)時,會先嚐試刪除所有指向該鏡像的標籤,然後刪除該鏡像文件本身。
注意:當有鏡像創建的容器在運行時,鏡像文件默認是無法被刪除的,如果想要強行刪除鏡像,可以使用-f參數。通常並不推薦使用這種方法來強制刪除一個存在容器依賴的鏡像,正確的做法是先刪除依賴該鏡像的所有容器,再來刪除鏡像。

3. 清理鏡像
使用Docker一段時間後,系統中可能會遺留一些臨時的鏡像文件,以及一些沒有被使用的鏡像,可以通過docker image prune命令來進行清理。
支持選項包括:

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

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

$ docker image prune -f

在這裏插入圖片描述

五、創建鏡像

1. 基於已有容器創建
該方法主要是使用docker commit命令。
在這裏插入圖片描述
在這裏插入圖片描述
2. 基於本地模板導入

$ cat ubuntu-18.04-x64_64-minimal.tar.gz | docker import - ubuntu:18.04

3. 基於Dockerfile創建
Dockerfile是一個文本文件,利用給定的指令描述基於某個父鏡像創建新鏡像的過程。
下面給出一個Dockerfile的簡單示例,基於ubuntu:18.04鏡像安裝Qt 5環境,構成一個新的Qt:5鏡像:

FROM ubuntu:18.04

LABEL version="1.0" maintainer="docker user <docker_user@github>"

RUN apt-get update && \
	apt-get install -y qt5-default
	apt-get install -y qtcreator
	apt-get clean && \
	rm -rf /var/lib/apt/lists/*

創建鏡像的過程可以使用docker build命令,編譯成功後本地將多出一個Qt:5鏡像:

$ docker build -t Qt:5 .
...
Successful built xxxxxxxxx

六、存出和載入鏡像

1. 存出鏡像
如果要導出鏡像到本地文件,可以使用docker save命令。該命令支持-o、-output string參數,導出鏡像到自動的文件中。
例如導出本地的ubuntu:18.04鏡像爲文件ubuntu_18.04.tar,如下所示:

docker save -o ubuntu_18.04.tar ubuntu:18.04

之後就可以通過複製ubuntu_18.04.tar文件將該鏡像分享給他人。

1. 載入鏡像
可以使用docker load命令將導出的tar文件再導入到本地鏡像庫。支持-i、-input string選項,從指定文件中讀入鏡像內容。
例如,從文件ubuntu_18.04.tar導入鏡像到本地鏡像列表,如下所示:

docker load -i ubuntu_18.04.tar

docker load < ubuntu_18.04.tar

這將導入鏡像及其相關的元數據信息(包括標籤等)。導入成功後,可以使用docker images命令進行查看,與原鏡像一致。

七、上傳鏡像

可以使用docker push命令上傳鏡像到倉庫,默認上傳到Docker Hub官方倉庫(需要登錄)。
用戶在Docker Hub網站註冊後可以上傳自制的鏡像。
例如,用戶user上傳本地的test:latese鏡像,可以先添加新的標籤user/test:latest,然後使用docker push上傳鏡像:

$ docker tag test:latest user/test:latest
$ docker push user/test:latest
The push refers to a repository [docker.io/user/test]
Sending image list

Please login prior to push:
Username:
Password:
Email:

第一次上傳時,會提示輸入登錄信息或進行註冊,之後登錄信息會記錄到本地~/.docker目錄下。

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