Docker Certified Associate(DCA)認證考試學習-Share Image Docker Certified Associate(DCA)認證相關資源、Share Image

Published on Tuesday, February 14, 2023

Docker Save & Docker Load

在昨天文章中: Docker Certified Associate(DCA)認證考試學習-Dockerfile
我們成功建構出我們第一個image之後使用docker images列出現在本地的image

REPOSITORY         TAG       IMAGE ID       CREATED         SIZE
allengaodev/echo   latest    2d2a398d3117   4 minutes ago   63.1MB
ubuntu             18.04     5d2df19066ac   2 weeks ago     63.1MB

現在的問題是image只有留存在本地而已,使否有辦法分享給其他電腦與其他人一起使用呢? 最直觀的方法可以利用docker save打包之後搭配docker load載入即可達成 先來看看文檔

使用方法很簡單,只需要指定image並指定保存的檔名即可 docker save [OPTIONS] IMAGE [IMAGE...] docker load [OPTIONS]

那我們來試試看把我們的image打包 這邊可以選擇搭配管線符號輸出給gzip壓縮成gz檔

docker save allengaodev/echo -o echo.tar
or
docker save allengaodev/echo | gzip > echo.tar.gz
$ docker save allengaodev/echo | gzip > echo.tar.gz
$ ls -l
total 25264
-rw-r--r--    1 root     root            76 Feb 14 08:25 Dockerfile
-rwxr-xr-x    1 root     root            32 Feb 14 08:25 echo.sh
-rw-r--r--    1 root     root      25860055 Feb 14 08:57 echo.tar.gz

接下來在play with docker在開啟新一台instance,以下為我的環境

192.168.0.13 ssh ip172-18-0-95-cflkaf63tccg00fql160@direct.labs.play-with-docker.com
192.168.0.12 ssh ip172-18-0-22-cflkaf63tccg00fql160@direct.labs.play-with-docker.com

目前image位於192.168.0.13所以想要將他複製到192.168.0.12在進行讀取 可以直接使用scp命令進行複製

scp /root/echo/echo.tar.gz ip172-18-0-22-cflkaf63tccg00fql160@direct.labs.play-with-docker.com:/root/echo/echo.tar.gz
[node1] (local) root@192.168.0.13 ~
$ scp /root/echo/echo.tar.gz ip172-18-0-22-cflkaf63tccg00fql160@direct.labs.play-with-docker.com:/root
The authenticity of host 'direct.labs.play-with-docker.com (40.121.45.0)' can't be established.
RSA key fingerprint is SHA256:vCbhEjmYQhtNzuuuh7TmGAPfe9T+JdGnGaVquQJUphY.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'direct.labs.play-with-docker.com' (RSA) to the list of known hosts.
Connecting to 20.25.0.130:8022
echo.tar.gz                                                          100%   25MB   9.1MB/s   00:02    

這邊呢我將位於/root/echo/echo.tar.gz的檔案透過ssh複製到192.168.0.12的/root資料夾底下,如果成功的話我們接下來切換到192.168.0.12就可以看到檔案了

[node2] (local) root@192.168.0.12 ~
$ ls -l
total 25256
-rw-r--r--    1 root     root      25860055 Feb 14 09:09 echo.tar.gz

確實有在192.168.0.12看到我們的打包檔,最後只要透過docker load就可以載入到docker內部了

docker load --input ./echo.tar.gz

這邊docker會自動處理解壓縮

475a54c2a93d: Loading layer  65.52MB/65.52MB
0467bbe0efef: Loading layer   2.56kB/2.56kB
Loaded image: allengaodev/echo:latest
[node2] (local) root@192.168.0.12 ~
$ docker images
REPOSITORY         TAG       IMAGE ID       CREATED          SIZE
allengaodev/echo   latest    bc0e5b00fff0   57 minutes ago   63.1MB
[node2] (local) root@192.168.0.12 ~
$ docker run --name myecho allengaodev/echo 
Hello Allen, Gao

至此我們成功將image透過網路傳送到其他機器上,接下來看看其他方式。


Docker Hub

另一種方式就是透過上傳到Docker Hub之後開放給其他人下載
這邊要注意Play with docker由於是公開環境不推薦在這些機器輸入個人的身分資料 所以這邊示範使用的是個人的機器

要上傳之前需要先使用docker login登入Docker才有權限進行推送

docker login
docker push allengaodev/echo

上傳成功之後就可以在Docker hub的頁面查看到自己的image了,使用起來很方便 DCAShareImage-echo


Summary

今天我們學習了透過打包的方式分享我們本地的Image,也成功上傳到Docker Hub上與其他開發者共享 兩種方式都很方便可以看個人的使用需求來挑選