傳送門:
Docker學習筆記(1)--Docker安裝(Ubuntu 16.04)
Docker學習筆記(2)--使用Docker Hub Mirror加速Docker官方鏡像下載
Docker學習筆記(3)--什么是Docker鏡像笋鄙、容器和倉庫台颠?
Docker學習筆記(4)--鏡像篇
基本概念
Docker鏡像可以用來創(chuàng)建Docker容器童芹,為一個只讀的模板宪摧。
Docker運行容器前需要本地存在對應的鏡像厘线,如果鏡像不在本地壁拉,Docker會從鏡像倉庫下載赁豆。
docker的鏡像實際上由一層一層的文件系統(tǒng)組成椎镣,這種層級的文件系統(tǒng)被稱為UnionFS杂曲。在Docker鏡像的最底層是bootfs庶艾。這一層與我們典型的Linux/Unix系統(tǒng)是一樣的,包含boot加載器和內核擎勘。當boot加載完成之后整個內核就都在內存中了咱揍,此時內存的使用權已由bootfs轉交給內核,此時系統(tǒng)也會卸載bootfs棚饵。Docker在bootfs之上的一層是rootfs(根文件系統(tǒng))煤裙。rootfs就是各種不同的操作系統(tǒng)發(fā)行版掩完,比如Ubuntu,Centos等等硼砰。
由于 Docker 使用一個統(tǒng)一文件系統(tǒng)且蓬,Docker 進程認為整個文件系統(tǒng)是以讀寫方式掛載的。 但是所有的變更都發(fā)生頂層的可寫層题翰,而下層的原始的只讀鏡像文件并未變化恶阴。由于鏡像不可寫,所以鏡像是無狀態(tài)的遍愿。
docker鏡像的層級結構圖:
獲取鏡像
從Docker Hub倉庫獲取
目前 Docker 官方維護了一個公共倉庫 Docker Hub存淫,其中已經包括了超過 15,000 的鏡像。大部分需求沼填,都可以通過在 Docker Hub 中直接下載鏡像來實現(xiàn)桅咆。可以使用 docker pull
命令來從倉庫獲取所需要的鏡像坞笙。
例如從 Docker Hub 倉庫下載一個 Ubuntu 12.04 操作系統(tǒng)的鏡像:
sudo docker pull ubuntu:12.04S
有時候官方倉庫注冊服務器下載較慢岩饼,可以從其他倉庫下載,如下所述薛夜。
從Docker Hub Mirror獲取
在《Docker學習筆記(2)--使用Docker Hub Mirror加速Docker官方鏡像下載》介紹了如何通過DaoCloud提供Docker Hub Mirror服務進行鏡像的加速下載籍茧。
例如使用ocker Hub Mirror服務下載一個 CentOS 操作系統(tǒng)的鏡像:
dao pull centos
鏡像的拉取過程如下圖所示:
本地鏡像
使用docker images
顯示本地已有鏡像。
ymhou@ubuntu:~$ sudo docker images
[sudo] ymhou 的密碼:
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnet-equip2 latest 7db79b00dfc6 13 hours ago 1.352 GB
aspnet-equip latest c43889d0c994 13 hours ago 828.2 MB
aspnet-hello-web latest 0caea7860935 13 hours ago 1.228 GB
ubuntu 14.04 c8ceaee85d23 5 days ago 188 MB
hello-world latest c54a2cc56cbb 3 weeks ago 1.848 kB
microsoft/aspnet latest 137814287352 5 weeks ago 815.2 MB
daocloud.io/daocloud/daocloud-toolset latest 1ab33797d8a1 3 months ago 150.2 MB
training/webapp latest 694deee4f65f 14 months ago 348.8 MB
training/postgres latest ed8be1ec6753 2 years ago 364.6 MB
其中包含了如下信息:倉庫梯澜,標記寞冯,ID,創(chuàng)建時間晚伙,大小吮龄。
其中鏡像的 ID 唯一標識了鏡像;
TAG 信息用來標記來自同一個倉庫的不同鏡像。例如 ubuntu 倉庫中有多個鏡像咆疗,通過 TAG 信息來區(qū)分發(fā)行版本漓帚,例如 10.04、12.04午磁、12.10尝抖、13.04、14.04 等迅皇。
搜索鏡像
Docker的特點之一是人們創(chuàng)建了各種各樣的docker鏡像昧辽。而且這些鏡像已經被上傳到了Docker Hub。我們可以從Docker Hub網站來搜索鏡像登颓;同樣的搅荞,之前我們提到的DaoCloud也提供了鏡像搜索服務。
我們也可以使用docker search
命令來搜索鏡像:
sudo docker search [server/]registry[:tag]
當未指定server時,默認從官方倉庫注冊服務器搜索取具,當未指定tag時,默認為latest版本鏡像扁耐。比如搜索mysql
:
ymhou@ubuntu:~$ sudo docker search mysql
[sudo] ymhou 的密碼:
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relati... 2748 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Crea... 177 [OK]
centurylink/mysql Image containing mysql. Optimized to be li... 46 [OK]
sameersbn/mysql 36 [OK]
appcontainers/mysql Centos/Debian Based Customizable MySQL Con... 8 [OK]
marvambass/mysql MySQL Server based on Ubuntu 14.04 6 [OK]
alterway/mysql Docker Mysql 2 [OK]
drupaldocker/mysql MySQL for Drupal 2 [OK]
azukiapp/mysql Docker image to run MySQL by Azuki - http:... 2 [OK]
yfix/mysql Yfix docker built mysql 2 [OK]
...
我們看到了返回了大量的mysql
鏡像暇检。我們看到列表中有鏡像名稱、描述婉称、Stars(衡量鏡像的流行程度-如果用戶喜歡這個鏡像他就會點擊stars)和官方自動構建鏡像狀態(tài)块仆。
創(chuàng)建鏡像
如果在官方服務器上沒有自己需要的鏡像,我們可以自己創(chuàng)建一個新的鏡像王暗。創(chuàng)建鏡像有三種方法悔据。
修改已有鏡像
首先利用已有鏡像創(chuàng)建容器,然后在容器里面完成我們需要的操作俗壹,最后將新的容器使用dockercommit
提交到本地鏡像庫科汗。
sudo docker commit -m "commit information" -a "user information" Container_ID Image:Tag
其中,
-m
來指定提交的說明信息绷雏,跟我們使用的版本控制工具一樣头滔;-a
可以指定更新的用戶信息;之后是用來創(chuàng)建鏡像的容器的 ID涎显;最后指定目標鏡像的倉庫名和 tag 信息坤检。創(chuàng)建成功后會返回這個鏡像的 ID 信息。
例如:
sudo docker commit -m "add new file" -a "ymhou" 0b2616b0e5a8 mysql-db:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
利用Dockerfile創(chuàng)建鏡像
首先生成一個創(chuàng)建鏡像的Dockerfile文件期吓,包含一些如何創(chuàng)建鏡像的指令早歇,然后運行docker build
命令創(chuàng)建鏡像。
比如下面的Dockerfile文件:
ymhou@ubuntu:~/equip$ vim Dockerfile
From microsoft/aspnet
COPY . /app
WORKDIR /app
RUN ["dnu","restore"]
EXPOSE 5004
ENTRYPOINT ["dnx","-p","project.json","web"]
編寫完成 Dockerfile 后可以使用 docker build
來生成鏡像讨勤。
sudo docker build -t="aspnet-mvc:v2" .
其中
-t
標記來添加 tag箭跳,指定新的鏡像的用戶信息。“.”
是 Dockerfile 所在的路徑(當前目錄)悬襟,也可以替換為一個具體的 Dockerfile 的路徑衅码。
從本地文件系統(tǒng)導入
如果為從容器生成的鏡像則使用docker import
導入,如果為從鏡像導出的鏡像脊岳,則使用docker load
導入逝段。
導出和載入鏡像
導出鏡像
如果要導出鏡像到本地文件,可以使用 docker save
命令割捅。
sudo docker save -o ubuntu14.04.tar ubuntu:14.04
載入鏡像
可以使用 docker load
從導出的本地文件中再導入到本地鏡像庫奶躯,例如:
sudo docker load --input ubuntu14.04.tar
或
sudo docker load < ubuntu14.04.tar
刪除本地鏡像
使用docker rmi
命令刪除本地鏡像。
ymhou@ubuntu:~/equip$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aspnet-equip2 latest 7db79b00dfc6 17 hours ago 1.352 GB
aspnet-equip latest c43889d0c994 18 hours ago 828.2 MB
aspnet-hello-web latest 0caea7860935 18 hours ago 1.228 GB
ubuntu 14.04 c8ceaee85d23 5 days ago 188 MB
hello-world latest c54a2cc56cbb 3 weeks ago 1.848 kB
microsoft/aspnet latest 137814287352 5 weeks ago 815.2 MB
daocloud.io/daocloud/daocloud-toolset latest 1ab33797d8a1 3 months ago 150.2 MB
training/webapp latest 694deee4f65f 14 months ago 348.8 MB
training/postgres latest ed8be1ec6753 2 years ago 364.6 MB
ymhou@ubuntu:~/equip$ sudo docker rmi aspnet-equip
Untagged: aspnet-equip:latest
Deleted: sha256:c43889d0c994d425a6cc4ec5333186c4aa771a7b82325a698254b95edc4ea1fa
Deleted: sha256:aee0abb3d94c523b30df01cbb4465b49d63cf2159696d6383bb2d079d6aa10e7
Deleted: sha256:411d2ea3ecbc324a13d1c72b6103e20a996d99954b15eb91b3130623323794d2
Deleted: sha256:d06161776c4b435c672fed1ee6ac54013781d253ba58581cb2cf4263aa4ca311
Deleted: sha256:5b601853e6b6ca283954848d460cecb1b385269dea98c19e59193e256e4124c9
Deleted: sha256:9409ca5cff2757904d32b3a887e171bc8ad2a0d537996d4f4da50adc491e20d4
Deleted: sha256:aa488445dd361a59d30361bd5849fc4b61763dd577436066945f67b74d5823cf
Reference
https://yeasy.gitbooks.io/docker_practice/content/index.html