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高。這就是我使用這兩種虛擬容器的感受。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM