:::

為什麼我放在Docker Hub的映像檔不能用了? / Why My Docker Image on Docker Hub Cannot Be Used?

11月 18, 2024 , , 0 Comments Edit Copy Download

2024-0808-022125.png

我們現在能開心地使用各種Docker環境,都是多虧了Docker Hub保存了這些Docker映像檔。Docker Hub也可以稱得上是賽博菩薩了吧?但這免費資源可不是讓你毫無限制的使用喔!

We can now happily use various Docker environments thanks to Docker Hub saving all these Docker images. You could say Docker Hub is like a Cyber Bodhisattva, right? However, this free resource is not for you to use without limit!


用Docker架設網站 / Setting Up a Website Using Docker

2024-0808-010450.png

https://medium.com/@habibridho/how-to-easily-setup-wordpress-using-docker-a798081dc577 

現在的軟體工程偏好採用虛擬化的環境來開發,以此確保各種元件都能在合適的版本、設定裡正常運作。舉例來說,如果我們要在已經安裝好Docker環境的電腦上運作WordPress部落格系統的話,我們只要執行以下指令:

docker run -p 8080:80 wordpress

然後就能打開瀏覽器,用 http://localhost:8080 來啟用WordPress了。是不是很簡單呢?

但你有沒有想過,這個WordPress系統到底是怎麽來的呢?以前學習架設WordPress的時候,不是還要安裝Apache跟PHP才能運作嗎?為什麼現在用一行指令就能安裝了呢?雖然嚴格來說,WordPress還要接上資料庫才能正式運作,不過從這裡就能看到Docker容器虛擬化的強大之處。

Docker映像檔 / Docker Image

2024-0808-012217.png

我們之所以能夠輕易架設WordPress,這一切複雜的架構都以容器虛擬化的形式保存在Docker映像檔裡面。在執行這個單純的指令時,Docker會檢查本機是否有Docker映像檔。如果沒有,則會嘗試去下載網路上的Docker映像檔。部分開發者也可能會選擇用編譯的方式來產生Docker映像檔,不過那脫離了本篇要講的範圍了。

2024-0808-011540.png

https://hub.docker.com/_/wordpress/tags 

這裡所指的網路上,如果你沒有特別指定Docker映像檔保存庫的位置,那預設是指向Docker Hub的公開保存庫。我們可以在Docker Hub裡面找到wordpress的映像檔,保存庫也會說明映像檔的各個版本(tag)的細節。

這裡我們可以看到WordPress的php8.3-fpm-alpine版本中,linux/386作業系統使用的映像檔,壓縮過後的檔案大小大概只有85.5MB。這小小的Docker映像檔包含了Apache跟PHP的必要元件,也包含了對應版本的WordPress程式碼。這樣小小的映像檔竟然包含了這麼多細節,而且可以讓我們用一行指令就下載到我們的電腦上,是不是很厲害呢?

Docker映像檔的檔案大小 / File Size of Docker Images 

2024-0808-010131.png

https://hub.docker.com/r/ollama/ollama/tags 

有趣的是,有些Docker映像檔的架構做的像是WordPress這麼精簡,但也有些Docker架構做的非常複雜。讓我們來看看運作大型語言模型的知名框架Ollama,它的映像檔大小是... 5.44GB。沒錯,單位是GB,不是MB!而且Ollama只是「框架」,它其實還沒包含「大型語言模型」的檔案呢。

2024-0808-013825.png

https://hub.docker.com/r/jorghi21/llama2_13b/tags 

這裡我找到一個包含上一代大型語言模型llama2、參數為13B的Docker映像檔例子,它的檔案大小來到了驚人的47.79GB!這、這大小簡直是直接包含了一整個遊戲了。

https://phoenixnap.com/kb/docker-image-size#ftoc-heading-3

https://phoenixnap.com/kb/docker-image-size#ftoc-heading-3 

而且更驚人的是,你知道嗎?當你用免費帳號註冊了Docker Hub之後,你就能夠把這麼巨大的Docker映像檔推送到Docker Hub保存,而且還能夠讓其他人免費取得這個Docker映像檔!目前Docker Hub對Docker映像檔的檔案限制為100GB,而這個大小已經超越了眾多雲端硬碟提供的免費空間了。

之前聽過一件業界軼事,還真的有人把龐大的資料保存成Docker映像檔,然後推送到Docker Hub進行保存,這樣就能提供任何人下載了。這樣說起來,Docker Hub還真的像是賽博菩薩,救助我們這些缺乏資源的技術玩家呢!

不啟用的Docker映像檔 / Inactive Images

2024-0808-015917.png

https://www.docker.com/blog/scaling-dockers-business-to-serve-millions-more-developers-storage/ 

當然,我們並不鼓勵這種濫用免費資源的行為。而且事實上Docker Hub也有制訂一些限制,防止大家(特別是免費的帳戶)過渡使用Docker Hub上面的資源。其中一項值得注意的限制是:「免費帳戶的映像檔,如果6個月內沒有被使用的話,那就會被自動刪除。」這裡的使用就是指客戶端用docker pull或docker run拉取映像檔的這種操作。要注意的是,由於Docker內建了快取機制,實際上不是每次執行docker pull都會從Docker Hub下載Docker映像檔,也就不會記入Docker Hub。

2024-0808-020453.png

檢視你自己在Docker Hub上的保存庫跟映像檔,你可以看到該映像檔被拉取(pulled)的最後時間。而上圖的最後時間是7個月前,這個映像檔已經被設為了「不啟用」(inactive)。也就是說,它已經被Docker Hub刪除了。除非你重新再從你的開發環境將Docker映像檔推送到Docker Hub,否則其他人將不再能夠取用這份Docker映像檔。

2024-0808-020804.png

那剛剛有47.79GB的jorghi21/llama2_13b呢?雖然作者將Docker映像檔推送到Docker Hub上的時間已經超過了一年,但這期間一直有人在使用,所以目前這個映像檔仍然可以下載。但你的電腦有沒有足夠空間來保存與運作這個映像檔,那又是另一個故事了。


結語:記得定期下載Docker映像檔 / Conclusion: Remember to Download Docker Images Regularly

https://hub.docker.com/_/docker

https://hub.docker.com/_/docker 

Docker不僅已經成為了軟體工程發展中不可或缺的重要技術,連圖書館的研究資料管理也相中了Docker保存研究環境的能力。儘管Docker Hub能夠讓開發者推送100GB以下的大型Docker映像檔,但如果我們都不使用、或是只用開放環境的快取檔案的話,那這個映像檔也會在6個月之後自動被刪除。如果你已經選擇了使用Docker映像檔來保存核心技術和關鍵資訊,可別忘了另外想辦法定期去「用」一下放置在Docker Hub的映像檔喔!


那麼這篇關於Docker Hub跟Docker映像檔的文章就到此為止了。其實我只是想要寫一句話提醒大家記得要定期下載映像檔而已,為什麼會寫得這麼長呢?總之,文章最後還是來個簡單的問題吧:你有用過Docker嗎?

  • 1. 有用過,而且我還會編譯Docker映像檔。
  • 2. 有用過,網路上的教學很常出現這個關鍵字,照著教學操作很常看到。
  • 3. 沒有。幹嘛要在那邊虛擬來虛擬去的,就老老實實的用原生環境不好嗎?
  • 4. 其他:歡迎在下面留言,分享你的看法吧!