Docker鏡像的獲取與刪除

Docker運行容器前須要本地存在對應的鏡像,若是鏡像不存在本地,Docker會嘗試先從默認鏡像倉庫下載(默認使用Dicker Hub公共註冊服務器中的倉庫),用戶也能夠經過配置,使用自定義的鏡像倉庫。php

獲取鏡像:java

鏡像是Docker運行容器的前提。mysql

可使用docker pull命令從網絡上下載鏡像。該命令的格式爲:linux

對於Docker鏡像來講,若是不顯示地制定TAG,則默認會選擇latest標籤,即下載倉庫中的最新版本的鏡像。git

例如:要獲取一個ubuntu鏡像,能夠:github

這樣,便會從Docker的Ubuntu倉庫中下載一個最新的Ubuntu操做系統鏡像,也能夠下載制定標籤的鏡像,好比下載14.04標籤的鏡像:sql

上面的命令都至關於sudo docker pull registry.hub.docker.com/ubuntu:latest命令,即從默認的註冊服務器registry.hub.docker.com中的ubuntu倉庫下載標記爲lastest的鏡像。docker

固然,也能夠選擇其餘註冊服務器的倉庫下載,此時只須要在倉庫前制定完整倉庫註冊服務器地址,例如從DockerPool社區的鏡像源下載最新ubuntu:ubuntu

在下載過程當中能夠看到鏡像文件通常是由若干層組成,行首是像e118faab2e16這樣的各層ID,下載過程當中會獲取並輸出鏡像的各層信息:centos

層(Layer)實際上是AUFS(Advanced Union File System,一種聯合文件系統)中的重要概念,是實現增量保存與更新的基礎。

在本地有了這個鏡像以後即可以使用,生成容器了,好比在這個ubuntu鏡像上生成一個容器,在其中運行bash應用:

這就是至關於用ubuntu這個鏡像建立了一個容器,而且你已經在這個容器裏面了,在這裏,你徹底能夠和使用普通的ubuntu系統同樣(能夠認識爲這個鏡像生成的虛擬機,不過全部同類容器只佔有自身數據的大小,而鏡像部分共用),包括各類命令,甚至安裝軟件。

查看鏡像信息:

使用docker images命令能夠列出本地主機上已有的鏡像:

在列出的信息中分別是來自那個倉庫,好比ubuntu倉庫,鏡像標籤,鏡像ID(惟一),建立時間,鏡像大小。

爲了管理方便,還可使用docker tag命令爲本地鏡像添加新的標籤,好比添加:

而後就會多出一個標籤爲ubuntu:latest的新鏡像。

使用docker inspect [鏡像ID]能夠獲取該鏡像的詳細信息:

搜尋鏡像:

可使用docker search命令搜尋鏡像,好比搜尋帶mysql關鍵字的鏡像以下所示:

sudo docker search mysql
NAME                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                        MySQL is widely usedopensource relati...   735       [OK]      
tutum/mysql                  MySQL Server image – listens in port 3306….   122                  [OK]
orchardup/mysql                                                              37                   [OK]
centurylink/mysql            Image containing mysqlOptimized to be li...   23                   [OK]
mysql/mysqlserver           Optimized MySQL Server Docker imagesCrea...   17                   [OK]
wnameless/mysqlphpmyadmin   MySQL phpMyAdmin https://index.docker.io...   15                   [OK]
google/mysql                 MySQL server for Google Compute Engine          13                   [OK]
sameersbn/mysql                                                              11                   [OK]
ioggstream/mysql             MySQL Image with MasterSlave replication       5                    [OK]
appcontainers/mysql          CentOS 6.6 based Customizable MySQL 5.5 Co...   3                    [OK]
alreece45/phusionmysql      Simple MySQL container with autocreating ...   2                    [OK]
azukiapp/mysql               Docker image to run MySQL by Azuki – http:...   2                    [OK]
jdeathe/centossshmysql     CentOS6.6 x86_64 MySQL.                    2                    [OK]
frodenas/mysql               Docker Image for MySQL                        1                    [OK]
phpmentors/mysql             MySQL server image                              1                    [OK]
lec00q/mysql                 docker image for running mysql server ...   0                    [OK]
jmoati/mysql                                                                 0                    [OK]
marvambass/mysql             MySQL Server based on Ubuntu 14.04              0                    [OK]
learninglayers/mysql                                                         0                    [OK]
cloyne/mysql                                                                 0                    [OK]
thomaswelton/mysql                                                           0                    [OK]
ahmet2mir/mysql              This is Debian based image with MySQL se...   0                    [OK]
miko2u/mysql                 MySQL with groonga and ipv6                     0                    [OK]
horx/mysql                   Mysql server                                    0                    [OK]
ingoclaro/mysql                                                              0                    [OK]

返回不少包含關鍵字的鏡像,包括鏡像名、描述、星級(表示該鏡像的受歡迎程度)、是否官方建立、是否自動建立等。

刪除鏡像:

使用docker rmi命令能夠刪除鏡像,命令格式爲:

其中IMAGE但是標籤或ID。

由於一個鏡像能夠有多個標籤,若是rmi一個標籤時不能找到惟一的鏡像,便會刪除這個標籤,直到一個標籤能肯定惟一鏡像爲止。因此,若是一個標籤能夠肯定這個鏡像,再執行這個命令便危險了,由於將直接刪除這個鏡像。

若是一個鏡像已經建立了容器,那麼這個鏡像文件默認是沒法被刪除的,例如剛纔的ubuntu鏡像以及建立了一個執行bash 的容器,能夠用docker ps -a命令查看全部容器:

會發現後臺存在一個處於Exited退出狀態的容器,那麼是沒法刪除ubuntu鏡像的。若是想要強行刪除,能夠加-f參數,但這樣每每遺留一些問題。好比刪除以後,docker images中會存在一個名爲none 的臨時鏡像。

正確的作法應該是先刪除依賴該鏡像的全部容器:

而後再刪除鏡像。

 

PS:經過測試只要鏡像id相同,無論鏡像標籤及其來源如何,均可以認爲它們就是同一鏡像文件,就像java中變量和對象變量同樣,標籤就是變量,全部id相同的標籤都引用同一個鏡像,按標籤刪除鏡像把這裏體現的淋漓盡致,只要還有一個標籤引用這個鏡像id,這個鏡像就不會被刪除。

相關文章
相關標籤/搜索