緊接着上篇《關於 Docker 鏡像的操做,看完這篇就夠啦 !(上)》,奉上下篇 !!!python
鏡像做爲 Docker 三大核心概念中最重要的一個關鍵詞,它有不少操做,是您想學習容器技術不得不掌握的。本文將帶您一步一步,圖文並重,上手操做來學習它。mysql
目錄:git
經過以下兩個均可以刪除鏡像:github
docker rmi [image]
複製代碼
或者:面試
docker image rm [image]
複製代碼
支持的子命令以下:sql
-f, -force
: 強制刪除鏡像,即使有容器引用該鏡像;-no-prune
: 不要刪除未帶標籤的父鏡像;例如,咱們想刪除上章節建立的 allen_mysql:5.7
鏡像,命令以下:docker
docker rmi allen_mysql:5.7
複製代碼
從上面章節中,咱們知道 allen_mysql:5.7
和 docker.io/mysql:5.7
實際上指向的是同一個鏡像,那麼,您能夠能會有疑問,我刪除了 allen_mysql:5.7
, 會不會將 docker.io/mysql:5.7
鏡像也給刪除了?ubuntu
實際上,當同一個鏡像擁有多個標籤時,執行 docker rmi
命令,只是會刪除了該鏡像衆多標籤中,您指定的標籤而已,並不會影響原始的那個鏡像文件。bash
不信的話,咱們能夠執行 docker images
命令,來看下 docker.io/mysql:5.7
鏡像還在不在:post
能夠看到,docker.io/mysql:5.7
鏡像依然存在!
那麼,若是某個鏡像不存在多個標籤,當且僅當只有一個標籤時,執行刪除命令時,您就要當心了,這會完全刪除鏡像。
例如,這個時候,咱們再執行 docker rmi docker.io/mysql:5.7
命令:
從上圖能夠看到,咱們已經刪除了 docker.io/mysql:5.7
鏡像的全部文件層。該鏡像在本地已不復存在了!
除了經過標籤名稱來刪除鏡像,咱們還能夠經過制定鏡像 ID, 來刪除鏡像,如:
docker rmi ee7cbd482336
複製代碼
一旦制定了經過 ID 來刪除鏡像,它會先嚐試刪除全部指向該鏡像的標籤,而後在刪除鏡像自己。
刪除鏡像很簡單,但也不是咱們什麼時候何地都能刪除的,它存在一些限制條件。
當經過該鏡像建立的容器未被銷燬時,鏡像是沒法被刪除的。爲了驗證這一點,咱們來作個試驗。首先,咱們經過 docker pull alpine
命令,拉取一個最新的 alpine
鏡像, 而後啓動鏡像,讓其輸出 hello, docker!
:
接下來,咱們來刪除這個鏡像試試:
能夠看到提示信息,沒法刪除該鏡像,由於有容器正在引用他!同時,這段信息還告訴咱們,除非經過添加 -f
子命令,也就是強制刪除,才能移除掉該鏡像!
docker rmi -f docker.io/alpine
複製代碼
可是,咱們通常不推薦這樣暴力的作法,正確的作法應該是:
也就是,根據上圖中提示的,引用該鏡像的容器 ID (9d59e2278553
), 執行刪除命令:
docker rm 9d59e2278553
複製代碼
而後,再執行刪除鏡像的命令:
docker rmi 5cb3aa00f899
複製代碼
這個時候,就能正常刪除了!
咱們在使用 Docker 一段時間後,系統通常都會殘存一些臨時的、沒有被使用的鏡像文件,能夠經過如下命令進行清理:
docker image prune
複製代碼
它支持的子命令有:
-a, --all
: 刪除全部沒有用的鏡像,而不只僅是臨時文件;-f, --force
:強制刪除鏡像文件,無需彈出提示確認;另外,執行完 docker image prune
命令後,仍是告訴咱們釋放了多少存儲空間!
此小節中,您將學習 Docker 如何建立鏡像?Docker 建立鏡像主要有三種:
咱們將主要介紹經常使用的 1,2 兩種。
經過以下命令來建立:
docker container commit
複製代碼
支持的子命令以下:
-a, --author
="": 做者信息;-c, --change
=[]: 能夠在提交的時候執行 Dockerfile 指令,如 CMD、ENTRYPOINT、ENV、EXPOSE、LABEL、ONBUILD、USER、VOLUME、WORIR 等;-m, --message
="": 提交信息;-p, --pause
=true: 提交時,暫停容器運行。接下來,基於本地已有的 Ubuntu 鏡像,建立一個新的鏡像:
首先,讓我將它運行起來,並在其中建立一個 test.txt 文件:
命令以下:
docker run -it docker.io/ubuntu:latest /bin/bash
root@a0a0c8cfec3a:/# touch test.txt root@a0a0c8cfec3a:/# exit 複製代碼
建立完 test.txt 文件後,須要記住標註的容器 ID: a0a0c8cfec3a
, 用它來提交一個新的鏡像(PS: 你也能夠經過名稱來提交鏡像,這裏只演示經過 ID 的方式)。
執行命令:
docker container commit -m "Added test.txt file" -a "Allen" a0a0c8cfec3a test:0.1
複製代碼
提交成功後,會返回新建立的鏡像 ID 信息,以下圖所示:
再次查看本地鏡像信息,能夠看到新建立的 test:0.1
鏡像了:
經過 Dockerfile 的方式來建立鏡像,是最多見的一種方式了,也是比較推薦的方式。Dockerfile 是一個文本指令文件,它描述了是如何基於一個父鏡像,來建立一個新鏡像的過程。
下面讓咱們來編寫一個簡單的 Dockerfile 文件,它描述了基於 Ubuntu 父鏡像,安裝 Python3 環境的鏡像:
FROM docker.io/ubuntu:latest
LABEL version="1.0" maintainer="Allen <weiwosuo@github>"
RUN apt-get update && \ apt-get install -y python3 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* 複製代碼
建立完成後,經過這個 Dockerfile 文件,來構建新的鏡像,執行命令:
docker image build -t python:3 .
複製代碼
注意:命令的最後有個點,若是不加的話,會構建不成功 !
編譯成功後,再次查看本地鏡像信息,就能夠看到新構建的 python:3 鏡像了。
此小節中,您將學習 Docker 如何導出&加載鏡像。
一般咱們會有下面這種需求,須要將鏡像分享給別人,這個時候,咱們能夠將鏡像導出成 tar 包,別人直接經過加載這個 tar 包,快速地將鏡像引入到本地鏡像庫。
要想使用這兩個功能,主要是經過以下兩個命令:
docker save
docker load
查看本地鏡像以下:
例如,咱們想要將 python:3 鏡像導出來,執行命令:
docker save -o python_3.tar python:3
複製代碼
執行成功後,查看當前目錄:
能夠看到 python_3.tar
鏡像文件已經生成。接下來,你能夠將它經過複製的方式,分享給別人了!
別人拿到了這個 tar
包後,要如何導入到本地的鏡像庫呢?
經過執行以下命令:
docker load -i python_3.tar
複製代碼
或者:
docker load < python_3.tar
複製代碼
導入成功後,查看本地鏡像信息,你就能夠得到別人分享的鏡像了!怎麼樣,是否是很方便呢!
咱們將以上傳到 Docker Hub 上爲示例,演示 Docker 如何上傳鏡像。
想要上傳鏡像到 Docker Hub 上,首先,咱們須要註冊 Docker Hub 帳號。打開 Docker Hub 網址 hub.docker.com,開始註冊:
填寫您的 Docker ID (也就是帳號),以及密碼,Email, 點擊繼續。
接下來,Docker Hub 會發送驗證郵件,到您填寫的郵箱當中:
點擊驗證便可,接下來,再次返回 Docker Hub 官網,用您剛剛註冊的 Docker ID 和密碼來登陸帳號!
登陸成功後,會出現以下頁面:
選擇建立一個鏡像倉庫:
填寫倉庫名稱、描述信息、是否公開後,點擊建立。
咱們看到,倉庫已經建立成功了,可是裏面尚未任何鏡像,接下來開始上傳鏡像,到此新建立的倉庫中。
進入命令行,用咱們剛剛獲取的 Docker ID 以及密碼登陸,執行命令:
docker login
複製代碼
登陸成功後,咱們開始準備上傳本地的 python:3
鏡像:
首先,咱們對其打一個新的標籤,前綴與咱們新建立的 Docker ID 、倉庫名保持一致:
docker tag python:3 weiwosuoai1991/python:3
複製代碼
查看本地信息,能夠看到,標籤打成功了。接下開,開始上傳!執行命令:
docker push weiwosuoai1991/python:3
複製代碼
上傳成功!去 Docker Hub 官網,新建立的倉庫的信息頁面驗證一下,是否真的成功了:
大工告成!!!
本文中,咱們着重學習了 Docker 中如何刪除鏡像, 建立鏡像,導出&加載鏡像,以及向 Docker Hub 上傳鏡像。本文是 Docker 鏡像學習的下篇,後續會帶來更多 Docker 相關的學習文章,祝您學習愉快!
最近在網上發現一個不錯的 PDF 資源《Java 核心面試知識.pdf》分享給你們,不光是面試,學習,你都值得擁有!!!
獲取方式: 關注公衆號: 小哈學Java, 後臺回覆 資源,既可獲取資源連接,下面是目錄以及部分截圖:
重要的事情說兩遍,獲取方式: 關注公衆號: 小哈學Java, 後臺回覆 資源,既可獲取資源連接 !!!