Docker鏡像的創建、存出、載入

Docker鏡像的創建、存出、載入

創建鏡像的方法有三種:基於已有鏡像的容器創建、基於本地模板導入、基於Dockerfile創建,本博文講解前兩種。

基於已有鏡像的容器創建

該方法是使用docker commit命令,其命令格式爲:

 docker commit [OPTIONSCONTAINER [REPOSITORY[:TAG]]

主要參數選項包括:

  • -a ,–author=”” 作者信息
  • -m,–message=”” 提交信息
  • -p,–pause=true 提交是暫停容器運行

比如,先創建一個運行bash的ubuntu容器:

docker run it centos /bin/bash
root@d8990fec2141:/# touch test
root@d8990fec2141:/# exit

然後根據創建的這個容器來提交一個新的鏡像,提交時需要用到容器ID。

 docker commit “test” “wdg” d8990fec2141 testimage

如果成功的話,就會返回新鏡像的長ID號,然後可以查看看在本地已有的鏡像:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
testimage           latest              baea98d5a437        About minute ago   188.3 MB

……

第三行就是剛剛創建的鏡像。

PS:利用此容器創建的鏡像Id與此容器的鏡像id不同,可知它們不是同一鏡像。

基於本地模板導入

也可以從操作系統模板文件導入一個鏡像,比如使用OpenVZ提供的模板創建,OPENVZ下載模板在:http://openvz.org/Download/template/precreated。

下載完之後就可以導入了:

cat centos-7-x86_64.tar.gz | docker import - centos7

其實只是兩個命令,不過很顯而易見,就不加解釋了。成功的話,就會返回根據模板建立的鏡像的長ID

sudo cat ubuntu14.04x86_64minimal.tar.gz docker import – ubuntu:14.04
ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35

然後就可以查看本地的鏡像:

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos7             latest              562987ba2b7e        24 seconds ago      589.4 MB
centos              latest              9baab0af79c4        2 weeks ago         196.8 MB
其實可以看出,雖然模板才200M,但創建的鏡像並不小。

鏡像的存出和載入

可以利用docker save和docker命令來存出和載入鏡像。

存出鏡像

如果想要把鏡像存出到本地文件,可以使用docker save命令,例如,存出本地的剛纔創建的testimage:lastest爲鏡像文件testimage.tar文件:

[root@wdg2 ~]# docker save -o /data/centos7.tar centos7
[root@wdg2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos7             latest              562987ba2b7e        3 minutes ago       589.4 MB
centos              latest              9baab0af79c4        2 weeks ago         196.8 MB

上面的第6行就是存出代碼,這時在/data下就有一個testimage.tar文件,這時我們把本地鏡像rmi掉,然後嘗試載入。

載入鏡像

刪除鏡像之後的狀態: 
[root@wdg2 ~]# docker rmi centos7
Untagged: centos7:latest
Deleted: 562987ba2b7e30eb1cac983747a67d30975118278284a43d9056cb8b1b512517
[root@wdg2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              9baab0af79c4        2 weeks ago         196.8 MB

然後載入鏡像:

[root@wdg2 ~]# docker load --input /data/centos7.tar
[root@wdg2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos7             latest              562987ba2b7e        6 minutes ago       589.4 MB
centos              latest              9baab0af79c4        2 weeks ago         196.8 MB

第一行就是載入鏡像,還可以簡化寫成:

docker load /data/centos7.tar

載入操作將會導入鏡像以及相關的元數據信息(包括標籤等)。

鏡像的上傳

最後說點鏡像的上傳,鏡像的管理方式非常像git,可以使用docker push命令上傳自己本地鏡像到倉庫,默認上傳到DockerHub官方倉庫(需要登陸),命令格式:

 docker push NAME[:TAG]

在上傳之前一般會先爲自己的鏡像添加帶自己名字(作者信息)的標籤:

[root@wdg2 ~]# docker tag centos7 wdg/centos7
[root@wdg2 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos7             latest              562987ba2b7e        15 minutes ago      589.4 MB
wdg/centos7         latest              562987ba2b7e        15 minutes ago      589.4 MB
centos              latest              9baab0af79c4        2 weeks ago         196.8 MB

上傳部分沒有賬號,暫時未成功。。。。
[root@wdg2 ~]# docker push wdg/centos7
The push refers to a repository [wdg/centos7] (len: 1)
562987ba2b7e: Image push failed
562987ba2b7e: Buffering to Disk
Please login prior to push:
Username: qq411277311
Password:
WARNING: login credentials saved in /root/.docker/config.json
Account created. Please use the confirmation link we sent to your e-mail to activate it.
The push refers to a repository [wdg/centos7] (len: 1)
562987ba2b7e: Image push failed
Error pushing to registry: Authentication is required.

有利於上傳之後的區分。

我覺得無論是運維團隊還是開發團隊還是一個實驗室,都有必要有一個自己的Docker倉庫,可以存放符合自己需求的環境或系統鏡像,可以實現快速部署。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章