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