為什麼我放在Docker Hub的映像檔不能用了? / Why My Docker Image on Docker Hub Cannot Be Used?
我們現在能開心地使用各種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
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
我們之所以能夠輕易架設WordPress,這一切複雜的架構都以容器虛擬化的形式保存在Docker映像檔裡面。在執行這個單純的指令時,Docker會檢查本機是否有Docker映像檔。如果沒有,則會嘗試去下載網路上的Docker映像檔。部分開發者也可能會選擇用編譯的方式來產生Docker映像檔,不過那脫離了本篇要講的範圍了。
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
https://hub.docker.com/r/ollama/ollama/tags
有趣的是,有些Docker映像檔的架構做的像是WordPress這麼精簡,但也有些Docker架構做的非常複雜。讓我們來看看運作大型語言模型的知名框架Ollama,它的映像檔大小是... 5.44GB。沒錯,單位是GB,不是MB!而且Ollama只是「框架」,它其實還沒包含「大型語言模型」的檔案呢。
https://hub.docker.com/r/jorghi21/llama2_13b/tags
這裡我找到一個包含上一代大型語言模型llama2、參數為13B的Docker映像檔例子,它的檔案大小來到了驚人的47.79GB!這、這大小簡直是直接包含了一整個遊戲了。
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
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。
檢視你自己在Docker Hub上的保存庫跟映像檔,你可以看到該映像檔被拉取(pulled)的最後時間。而上圖的最後時間是7個月前,這個映像檔已經被設為了「不啟用」(inactive)。也就是說,它已經被Docker Hub刪除了。除非你重新再從你的開發環境將Docker映像檔推送到Docker Hub,否則其他人將不再能夠取用這份Docker映像檔。
那剛剛有47.79GB的jorghi21/llama2_13b呢?雖然作者將Docker映像檔推送到Docker Hub上的時間已經超過了一年,但這期間一直有人在使用,所以目前這個映像檔仍然可以下載。但你的電腦有沒有足夠空間來保存與運作這個映像檔,那又是另一個故事了。
結語:記得定期下載Docker映像檔 / Conclusion: Remember to Download Docker Images Regularly
https://hub.docker.com/_/docker
Docker不僅已經成為了軟體工程發展中不可或缺的重要技術,連圖書館的研究資料管理也相中了Docker保存研究環境的能力。儘管Docker Hub能夠讓開發者推送100GB以下的大型Docker映像檔,但如果我們都不使用、或是只用開放環境的快取檔案的話,那這個映像檔也會在6個月之後自動被刪除。如果你已經選擇了使用Docker映像檔來保存核心技術和關鍵資訊,可別忘了另外想辦法定期去「用」一下放置在Docker Hub的映像檔喔!
那麼這篇關於Docker Hub跟Docker映像檔的文章就到此為止了。其實我只是想要寫一句話提醒大家記得要定期下載映像檔而已,為什麼會寫得這麼長呢?總之,文章最後還是來個簡單的問題吧:你有用過Docker嗎?
- 1. 有用過,而且我還會編譯Docker映像檔。
- 2. 有用過,網路上的教學很常出現這個關鍵字,照著教學操作很常看到。
- 3. 沒有。幹嘛要在那邊虛擬來虛擬去的,就老老實實的用原生環境不好嗎?
- 4. 其他:歡迎在下面留言,分享你的看法吧!