保存及導入本地docker image鏡像的方法

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

基於已有鏡像的容器創建

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

 docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

主要參數選項包括:

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

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

docker run –it ubuntu /bin/bash

root@d8990fec2141:/# touch test

root@d8990fec2141:/# exit

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

 docker commit –m “test” –a “zmc” d8990fec2141 testimage

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

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE

testimage           latest              baea98d5a437        About a minute ago   188.3 MB

 

……

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

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

基於本地模板導入

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

我嘗試使用了Ubuntu14.04的模板:

 

1

wget http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz

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

sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04

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

sudo cat ubuntu–14.04–x86_64–minimal.tar.gz | docker import – ubuntu:14.04

ab80404d13d580965b9919b640169ccb585ea7884e6aa9de1ec043075c65fe35

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

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

ubuntu              14.04               ab80404d13d5        56 seconds ago      215.4 MB

testimage           latest              baea98d5a437        29 minutes ago      188.3 MB

….

其實可以看出,雖然模板才75M,但創建的鏡像並不小。

鏡像的存出和載入

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

存出鏡像

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

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

testimage           latest              baea98d5a437        25 minutes ago      188.3 MB

ubuntu              latest              fa81ed084842        3 days ago          188.3 MB

….

docker save –o /data/testimage.tar testimage:latest

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

載入鏡像

刪除鏡像之後的狀態:

 

ubuntu@VM–223–238–ubuntu:/data$ docker rmi baea98d5a437

Untagged: testimage:latest

Deleted: baea98d5a4371a6abf9efc8c53a54a6fc5befd167bf91ce9fd4a28a6d1b7dc5b

ubuntu@VM–223–238–ubuntu:/data$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

ubuntu              14.04               ab80404d13d5        5 minutes ago       215.4 MB

然後載入鏡像:

docker load —input testimage.tar

docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

ubuntu              14.04               ab80404d13d5        6 minutes ago       215.4 MB

testimage           latest              baea98d5a437        35 minutes ago      188.3 MB

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

docker load < testimage.tar

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

鏡像的上傳

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

 docker push NAME[:TAG]

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

docker tag testimage:lastest zmc/testimage:lastest

docker pushzmc/testimage:lastest

有利於上傳之後的區分。

我覺得無論是運維團隊還是開發團隊還是一個實驗室,都有必要有一個自己的Docker倉庫,可以存放符合自己需求的環境或系統鏡像,可以實現快速部署。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章