Docker運行容器前須要本地存在對應的鏡像,若是鏡像不存在本地,Docker會嘗試先從默認鏡像倉庫下載(默認使用Dicker Hub公共註冊服務器中的倉庫),用戶也能夠經過配置,使用自定義的鏡像倉庫。php
獲取鏡像:java
鏡像是Docker運行容器的前提。mysql
可使用docker pull命令從網絡上下載鏡像。該命令的格式爲:linux
docker pull NAME[:TAG]
對於Docker鏡像來講,若是不顯示地制定TAG,則默認會選擇latest標籤,即下載倉庫中的最新版本的鏡像。git
例如:要獲取一個ubuntu鏡像,能夠:github
sudo docker pull ubuntu
這樣,便會從Docker的Ubuntu倉庫中下載一個最新的Ubuntu操做系統鏡像,也能夠下載制定標籤的鏡像,好比下載14.04標籤的鏡像:sql
sudo docker pull ubuntu:14.04
上面的命令都至關於sudo docker pull registry.hub.docker.com/ubuntu:latest命令,即從默認的註冊服務器registry.hub.docker.com中的ubuntu倉庫下載標記爲lastest的鏡像。docker
固然,也能夠選擇其餘註冊服務器的倉庫下載,此時只須要在倉庫前制定完整倉庫註冊服務器地址,例如從DockerPool社區的鏡像源下載最新ubuntu:ubuntu
sudo docker pull dl.dockerpool.com:5000/ubuntu
在下載過程當中能夠看到鏡像文件通常是由若干層組成,行首是像e118faab2e16這樣的各層ID,下載過程當中會獲取並輸出鏡像的各層信息:centos
latest: Pulling from ubuntu
e118faab2e16: Downloading7e2c5c55ef2c: Download completee04c66a223c4: Download completefa81ed084842: Download complete
層(Layer)實際上是AUFS(Advanced Union File System,一種聯合文件系統)中的重要概念,是實現增量保存與更新的基礎。
在本地有了這個鏡像以後即可以使用,生成容器了,好比在這個ubuntu鏡像上生成一個容器,在其中運行bash應用:
sudo docker run –t –i ubuntu /bin/bashroot@636151e7941b:/#
這就是至關於用ubuntu這個鏡像建立了一個容器,而且你已經在這個容器裏面了,在這裏,你徹底能夠和使用普通的ubuntu系統同樣(能夠認識爲這個鏡像生成的虛擬機,不過全部同類容器只佔有自身數據的大小,而鏡像部分共用),包括各類命令,甚至安裝軟件。
查看鏡像信息:
使用docker images命令能夠列出本地主機上已有的鏡像:
sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu latest fa81ed084842 3 days ago 188.3 MB
在列出的信息中分別是來自那個倉庫,好比ubuntu倉庫,鏡像標籤,鏡像ID(惟一),建立時間,鏡像大小。
爲了管理方便,還可使用docker tag命令爲本地鏡像添加新的標籤,好比添加:
sudo docker tag pull dl.dockerpool.com:5000/ubuntu:lastest ubuntu:lastest
而後就會多出一個標籤爲ubuntu:latest的新鏡像。
使用docker inspect [鏡像ID]能夠獲取該鏡像的詳細信息:
sudo docker inspect fa81ed084842[{「Architecture」: 「amd64」,「Author」: 「」,「Comment」: 「」,「Config」: {「AttachStderr」: false,「AttachStdin」: false,「AttachStdout」: false,「Cmd」: [「/bin/bash」],「CpuShares」: 0,「Cpuset」: 「」,「Domainname」: 「」,「Entrypoint」: null,「Env」: null,「ExposedPorts」: null,「Hostname」: 「706cb4504c90」,「Image」: 「e04c66a223c45a6247237510c40117cef92acb0a4355f1ba90580ef6274b490d」,「Labels」: {},「MacAddress」: 「」,「Memory」: 0,「MemorySwap」: 0,「NetworkDisabled」: false,「OnBuild」: null,「OpenStdin」: false,「PortSpecs」: null,「StdinOnce」: false,「Tty」: false,「User」: 「」,「Volumes」: null,「WorkingDir」: 「」},「Container」: 「ba8570386ba189dc1af092e141415fbf522e38915b991d6ac5d682c51f42c13f」,「ContainerConfig」: {「AttachStderr」: false,「AttachStdin」: false,「AttachStdout」: false,「Cmd」: [「/bin/sh」,「-c」,「#(nop) CMD [\」/bin/bash\」]」],「CpuShares」: 0,「Cpuset」: 「」,「Domainname」: 「」,「Entrypoint」: null,「Env」: null,「ExposedPorts」: null,「Hostname」: 「706cb4504c90」,「Image」: 「e04c66a223c45a6247237510c40117cef92acb0a4355f1ba90580ef6274b490d」,「Labels」: {},「MacAddress」: 「」,「Memory」: 0,「MemorySwap」: 0,「NetworkDisabled」: false,「OnBuild」: null,「OpenStdin」: false,「PortSpecs」: null,「StdinOnce」: false,「Tty」: false,「User」: 「」,「Volumes」: null,「WorkingDir」: 「」},「Created」: 「2015-06-01T00:00:32.983571589Z」,「DockerVersion」: 「1.6.0」,「Id」: 「fa81ed084842076d1b39b56d084d99ec0011cd4a5ade1056be359486a8b213e4」,「Os」: 「linux」,「Parent」: 「e04c66a223c45a6247237510c40117cef92acb0a4355f1ba90580ef6274b490d」,「Size」: 0,「VirtualSize」: 188281989}]
搜尋鏡像:
可使用docker search命令搜尋鏡像,好比搜尋帶mysql關鍵字的鏡像以下所示:
sudo docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open–source relati... 735 [OK]tutum/mysql MySQL Server image – listens in port 3306…. 122 [OK]orchardup/mysql 37 [OK]centurylink/mysql Image containing mysql. Optimized to be li... 23 [OK]mysql/mysql–server Optimized MySQL Server Docker images. Crea... 17 [OK]wnameless/mysql–phpmyadmin 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 Master–Slave replication 5 [OK]appcontainers/mysql CentOS 6.6 based Customizable MySQL 5.5 Co... 3 [OK]alreece45/phusion–mysql Simple MySQL container with auto–creating ... 2 [OK]azukiapp/mysql Docker image to run MySQL by Azuki – http:... 2 [OK]jdeathe/centos–ssh–mysql CentOS–6 6.6 x86_64 / MySQL. 2 [OK]frodenas/mysql A Docker Image for MySQL 1 [OK]phpmentors/mysql MySQL server image 1 [OK]lec00q/mysql A docker image for running a 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 a 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命令能夠刪除鏡像,命令格式爲:
docker rmi IMAGE[IMAGE...]
其中IMAGE但是標籤或ID。
由於一個鏡像能夠有多個標籤,若是rmi一個標籤時不能找到惟一的鏡像,便會刪除這個標籤,直到一個標籤能肯定惟一鏡像爲止。因此,若是一個標籤能夠肯定這個鏡像,再執行這個命令便危險了,由於將直接刪除這個鏡像。
若是一個鏡像已經建立了容器,那麼這個鏡像文件默認是沒法被刪除的,例如剛纔的ubuntu鏡像以及建立了一個執行bash 的容器,能夠用docker ps -a命令查看全部容器:
sudo docker ps –aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES636151e7941b ubuntu:latest 「/bin/bash」 28 minutes ago Exited (0) 22minutes ago hopeful_rosalind
會發現後臺存在一個處於Exited退出狀態的容器,那麼是沒法刪除ubuntu鏡像的。若是想要強行刪除,能夠加-f參數,但這樣每每遺留一些問題。好比刪除以後,docker images中會存在一個名爲none 的臨時鏡像。
正確的作法應該是先刪除依賴該鏡像的全部容器:
sudo docker rm 636151e7941b
而後再刪除鏡像。
PS:經過測試只要鏡像id相同,無論鏡像標籤及其來源如何,均可以認爲它們就是同一鏡像文件,就像java中變量和對象變量同樣,標籤就是變量,全部id相同的標籤都引用同一個鏡像,按標籤刪除鏡像把這裏體現的淋漓盡致,只要還有一個標籤引用這個鏡像id,這個鏡像就不會被刪除。