1. 程式人生 > 實用技巧 >Docker學習筆記(三)——容器提交&上傳映象

Docker學習筆記(三)——容器提交&上傳映象

一、簡要

  之前的文章已經講過映象的下載、執行,和容器的基本操作,接下來這篇文章是講容器的提交和上傳映象。

  打個比方:如果你想要你的容器進行備份或者分享給其他使用者使用(伺服器、其他使用者等),那就得將當前容器複製一份然後發給其他使用者;又或者說,你當前容器在本機部署了應用系統執行,然後測試沒問題了,想將該容器的釋出到伺服器裡執行,可以節省伺服器和本機環境配置不相同的時間,那麼這個過程在Docker裡如何體現的呢?下面有4個步驟:

  1.我們可以在本機將執行後的容器提交(commit)到本地映象倉庫;

  2.然後將本地映象上傳(push)到DockerHub;

  3.伺服器/其他使用者機器,在DockerHub上下載映象(pull)

  4.伺服器/其他使用者機器,將下載後的映象執行;

一、註冊&登入DockerHub使用者

官網地址:https://hub.docker.com/

1.註冊

點選上面官網地址,自行註冊。

2.登入

在作業系統輸入命令:docker login

[root@hejl nginx]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: hejianliang
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
You have new mail in /var/spool/mail/root

按照步驟輸入使用者名稱和密碼。

二、建立DockerHub映象地址

在官網登入DockerHub後,來到個人首頁:

點選"Create Repository"

輸入相應資訊,點選"Create"即可。

以下是我已經建立好的映象倉庫:

Tags and Scans:表示倉庫的標籤/版本;

Docker commands:表示倉庫的上傳(push)命令;

三、實操-容器提交&上傳映象

列出本地映象列表(如果沒有映象,自行pull映象):

[root@hejl nginx]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
hejianliang/centos   java_nginx          7d33387c23ca        17 hours ago        765MB
hejianliang/centos   <none>              f7dbccc37e60        9 days ago          686MB
hejianliang/centos   v1                  4173d0975bbe        2 weeks ago         774MB
centos               latest              0d120b6ccaa8        3 months ago        215MB

列出本地容器列表(如沒有容器,自行run映象):

[root@hejl nginx]# docker ps -a
CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS                       PORTS               NAMES
26dc75058b6e        hejianliang/centos:java_nginx   "/sbin/init"        17 hours ago        Exited (137) 4 minutes ago                       centos_java_nginx
a8bde2ae13aa        hejianliang/centos:v1           "/bin/bash"         6 days ago          Exited (0) 6 days ago                            172.18.0.3

接下來我要將容器 id為 "26dc75058b6e" 的容器,提交到映象倉庫,提交語法:

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

-a :提交的映象作者;

-c :使用Dockerfile指令來建立映象;

-m :提交時的說明文字;

-p :在commit時,將容器暫停。

提交命令:

[root@hejl nginx]# docker commit -a "hejianliang" -m "整合Nginx、Tomcat、Keepalived服務" -p 26dc75058b6e hejianliang/centos:java_nginx_v2
sha256:9549e4d937c82ab46193b3faabd3bf3f4cb6a46acd54f52199b8d2c0edc66842

提交成功,docker images 檢視本地映象倉庫:

[root@hejl nginx]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED              SIZE
hejianliang/centos   java_nginx_v2       9549e4d937c8        About a minute ago   801MB
hejianliang/centos   java_nginx          7d33387c23ca        18 hours ago         765MB
hejianliang/centos   <none>              f7dbccc37e60        9 days ago           686MB
hejianliang/centos   v1                  4173d0975bbe        2 weeks ago          774MB
centos               latest              0d120b6ccaa8        3 months ago         215MB

映象"hejianliang/centos:java_nginx_v2" 已提交成功了,容量大小是801MB,現在我們進行第二步上傳映象,上傳語法:

docker push [OPTIONS] NAME[:TAG]
OPTIONS說明: --disable-content-trust :忽略映象的校驗,預設開啟

上傳映象命令:

[root@hejl nginx]# docker push hejianliang/centos:java_nginx_v2
The push refers to repository [docker.io/hejianliang/centos]
3434a2f802c2: Pushed 
076ecd3c326f: Layer already exists 
291f6e44771a: Layer already exists 
java_nginx_v2: digest: sha256:2f846fabd91e5b78023ead48b7bd3642ba2cdad8446d97f88ce02b0d3908b51d size: 954

上傳映象成功。

四、實操-映象下載

剛才已經把映象上傳到官網上了,現在我們可以切換到另外一臺機器/本機(注:機器上需安裝Docker並啟動),將上傳的映象下載到機器上。

我們可以從docker上查詢剛才上傳的映象,命令:docker search hejianliang

[root@localhost ~]# docker search hejianliang
NAME                 DESCRIPTION         STARS               OFFICIAL            AUTOMATED
hejianliang/centos   centos倉庫            1                                       
hejianliang/ubuntu                       0 

倉庫地址已搜尋出來,接下來下載映象:

[root@localhost ~]# docker pull hejianliang/centos:java_nginx_v2
java_nginx_v2: Pulling from hejianliang/centos
3c72a8ed6814: Pull complete 
0f414fdba906: Pull complete 
a8a9d4720f65: Pull complete 
Digest: sha256:2f846fabd91e5b78023ead48b7bd3642ba2cdad8446d97f88ce02b0d3908b51d
Status: Downloaded newer image for hejianliang/centos:java_nginx_v2
docker.io/hejianliang/centos:java_nginx_v2
[root@localhost ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
hejianliang/centos   java_nginx_v2       9549e4d937c8        About an hour ago   801MB
test/ubuntu          v1                  ed488aac8ae1        3 weeks ago         72.9MB
<none>               <none>              9076a9ac1911        3 weeks ago         0B
<none>               <none>              5a5fa4f0a2f9        3 weeks ago         0B
<none>               <none>              03be7b389780        3 weeks ago         0B
<none>               <none>              b74f768c6588        3 weeks ago         72.9MB
rethinkdb            latest              fc02d4327225        4 weeks ago         131MB
hejianliang/ubuntu   15.10               9140108b62dc        6 weeks ago         72.9MB
ubuntu               latest              9140108b62dc        6 weeks ago         72.9MB
hello-world          latest              bf756fb1ae65        10 months ago       13.3kB
ubuntu               15.10               9b9cb95443b5        4 years ago         137MB
training/webapp      latest              6fae60ef3446        5 years ago         349MB

映象下載後,我們通過檢視映象命令,我們的 "hejianliang/centos" 映象也在本地倉庫裡了。

下載過後的映象,和平時一樣執行,這裡就不一一操作了,可以回顧作者之前的文章。

五、總結

  個人認為Docker這種容器管理方式很便捷,就類似GitHub、MavenRepository等,使用起來很易上手,就是要記的命令多些;以往我沒使用Docker之前,是用虛擬機器進行系統部署測試,沒問題再將系統部署上雲伺服器。但體驗過兩種方式過後(Docker和虛擬機器),感覺Docker的效率更高,而且作業系統的環境也不用擔心不一致的問題,還有虛擬機器佔用的空間及記憶體比較多,處理效率也沒Docker高。這就是我使用這兩種虛擬容器的感受。