假如伺服器上沒有 Docker 環境,你還能愉快的拉取容器鏡像嗎?
- 2019 年 11 月 28 日
- 筆記
Docker
客戶端的機器上拉取容器鏡像這樣變態的需求呢?如果有,你當時又是如何解決的呢?今天我們就來給大家介紹幾種另闢蹊徑的方法來實現這樣的需求。
使用 docker-drag 實現
根據官網介紹:docker-drag
是一個用於與 Docker Hub
交互的工具,並且不需 Docker
客戶端本身支援。它主要是通過與 Docker Hub
的 HTTPS API
進行交互來實現相應功能。
項目地址:https://github.com/NotGlop/docker-drag
安裝 docker-drag
docker-drag
其實就是一個 Python
腳本,目前版本總共才 168 行程式碼。你只需要去官網倉庫直接下載就可以使用了,非常的簡單。
$ wget https://raw.githubusercontent.com/NotGlop/docker-drag/master/docker_pull.py
使用 docker-drag
我們先來看一下官方給出的演示效果。

docker-drag
的使用也是非常簡單的,基本上和 docke pull
命令使用方法一致。其主要是藉助 Python
的 Request
庫和 HTTPS API
直接從倉庫中拉取鏡像,並保存為 TAR
文件。
# 直接在官方倉庫拉取官方鏡像 $ python docker_pull.py nginx:alpine # 直接在官方倉庫拉取三方鏡像 $ python docker_pull.py mysql/mysql-server:8.0 # 直接在三方倉庫拉取鏡像 $ python docker_pull.py mcr.microsoft.com/windows/nanoserver@sha256:ae443bd9609b9ef06d21d6caab59505cb78f24a725cc24716d4427e36aedabf2
鏡像下載完成後,你可以直接使用 docker load -i
命令對 TAR
文件進行載入。由於不在依賴容器工具本身,在一些實際使用場景中,例如:CICD 流程。這個小工具或許能助你解決大問題喲!
使用 download-frozen-image-v2 實現
與 docker-drag
類似的工具,還有一個 SHELL
腳本的實現 download-frozen-image-v2
,該腳本隸屬於 Moby
項目。
項目地址:https://github.com/moby/moby
它的使用基本上和 docker-drag
類似,大致有如以下幾步所示。
- 下載對應的腳本
$ wget https://raw.githubusercontent.com/moby/moby/master/contrib/download-frozen-image-v2.sh
- download-frozen-image-v2 腳本使用語法
download-frozen-image-v2.sh target_dir image[:tag][@digest] ...
- 一個完整的使用實例
# 下載 Ubuntu 容器鏡像 $ bash download-frozen-image-v2.sh ubuntu ubuntu:latest # download-frozen-image-v2 這裡要稍為複雜點,需要自己手動打成 TAR 包 $ tar -C 'ubuntu' -cf 'ubuntu.tar' . # 導入容器鏡像 $ docker load -i ubuntu.tar # 導入容器鏡像完成後,運一個容器 $ docker run --rm -ti ubuntu bash root@1dd5e62113b9:/#
使用 dp 實現
dp
同樣也是一個實現上述類似需求的小工具。dp
使用 Go
語言開發,天生具有良好的跨平台性。相對於前兩個工具來說更容易在多平台上部署使用,而且 dp
還支援將多個鏡像打包在一起。
項目地址:https://github.com/zhangguanzhang/dp/
安裝 dp
dp
的安裝非常簡單,只需在官方倉庫 Releases
頁面直接下載各平台對應的版本,解壓後即可使用。
使用 dp
dp
使用起來也是很容易的,下面我們就來看幾個實例。
# 從官方倉庫拉取一個容器鏡像 $ dp pull nginx:alpine # 從官方倉庫拉取一個容器鏡像並打包到壓縮文件 $ dp pull -o nginx.tar.gz nginx:alpine # 使用 sha256 拉取一個容器鏡像 $ dp pull mcr.microsoft.com/windows/nanoserver@sha256:ae443bd9609b9ef06d21d6caab59505cb78f24a725cc24716d4427e36aedabf2 # 一次從官方倉庫拉取多個容器鏡像並打包到壓縮文件 $ dp pull -o project.tar.gz nginx:alpine nginx:1.17.5-alpine-perl # 從三方鏡像倉庫拉取多個容器鏡像並打包到壓縮文件 $ dp pull -o project.tar.gz nginx:alpine gcr.io/google_containers/pause-amd64:3.1
至此,我們就演示完了如何在不需要 Docker
客戶端的前提下拉取容器鏡像的方法。如果你還有更多更好的方法,歡迎大家積極留言喲!
參考文檔
- https://www.google.com
- https://xbuba.com/questions/37905763
- https://blog.fleeto.us/post/pull-image-without-docker/