Docker踩坑四個教訓 - resurface
我們依賴 Docker,它是我們最喜歡的技術之一。但是將 Docker 用於商業軟體顯示了我們發現困難的一些粗糙邊緣。
1. “latest”標籤
我們不是第一個意識到最新標籤存在重大問題的人,但我們一開始真的沒有看到這些問題。我們現在走另一條路,從我們的 Docker 映象中刪除了我們的“latest”標籤。有幾件事讓我們處於邊緣。
“latest”模式扭曲或破壞了每個 CDN 想做的快取型別,因為隨著時間的推移,這會導致多個具有相同名稱但內容不同的工件。CDN 真正喜歡的是具有唯一版本號的不可變工件。真正可怕的是,如果最新標籤由於這種快取而失敗,您將永遠不會知道。
“latest”的另一個瘋狂之處在於,使用者很難找到實際的版本號。假設您使用特定版本名稱和“latest”標籤釋出影像。安裝後docker images,即使安裝了較新版本的容器,輸出也將顯示“latest”而不是版本號。那麼使用者應該如何確定實際安裝了哪些版本呢?透過回退到比較影像 id 雜湊值,這是對人們時間的瘋狂利用。
2. Docker的快取很致命
Docker 映象是分層構建的,Docker 積極地快取這些層以避免下載未更改的位。問題是這種快取基於 Dockerfile 中的指令碼文字,而不是這些指令碼的實際結果。
使用--no-cache指令很容易解決這個問題
3. 為多個程式設計是很棘手
Docker 支援每個容器都有一個它執行的單個命令的想法。這對於簡單的情況非常有用,但假設您有三個一起執行的輕量級服務。有些人會爭辯說,這應該始終分解為三個獨立的容器,但這並非沒有成本。現在,您需要構建/管理/版本的元件數量增加了 3 倍,並且這些過程如何相互互動受到更多限制,因為它們是完全獨立的。
我們將我們的服務放在一起,並在作為容器的主要控制點的supervisord上進行標準化。這使我們可以放心地在單個容器包中執行多個服務,而無需編寫任何自定義指令碼。
4.較小的容器並不總是更快
很多采用Docker 理由是 Docker 容器將比它們所取代的傳統虛擬機器小得多,開銷也更少。您不必執行額外的 Ubuntu 副本,而是擁有一個很小的容器!不幸的是,這遠不能保證。
還有一個神話,即 Alpine 作為最明顯的小發行版,普遍優於其他發行版。它很小,所以它必須更快,對吧?不必要!
我們在 Alpine 上看到了在 RedHat 或 Ubuntu 上沒有看到的顯著效能下降,因為 Alpine 不是基於 glibc。最終,我們決定花費額外的時間和精力來調整我們在 Alpine 上的配置是值得的,以獲得儘可能小的下載大小。但這是一項重大的時間投資,一開始並不明顯如何去做。
Docker 使構建非常小的高效能容器成為可能,但簡化效能和下載大小的大部分負擔仍然落在容器開發人員身上。基於用於開發的相同發行版釋出多 GB 映像非常容易。獲得輕量級影像仍然需要技巧和細心。
相關文章
- 【血淚教訓】godaddy競拍域名踩過的坑Go
- 三種很難學到的Java踩坑教訓 - MilošJava
- docker 踩坑集錦Docker
- 前端踩坑系列《四》前端
- docker canal 踩坑歷程Docker
- golang 介紹以及踩坑之四Golang
- Next.js踩坑入門系列(四)— 中期填坑JS
- PWA踩坑記,手把手教學vue搭建PWAVue
- React兩個bug踩坑React
- 兩個設計教訓
- 又踩坑了!BigDecimal使用的5個坑!Decimal
- 記一次docker上部署nuxt踩的坑DockerUX
- 今天踩了一個基礎坑
- Golang 需要避免踩的 50 個坑Golang
- 記錄一下docker踩坑 /dev/shm目錄Dockerdev
- Docker 部署 redis教程,附帶部分小建議,防止踩坑DockerRedis
- Linux/Docker 中使用 System.Drawing.Common 踩坑小計LinuxDocker
- protodep踩坑
- Flutter 踩坑Flutter
- angular踩坑Angular
- CDH踩坑
- vue踩坑Vue
- 相容踩坑
- THEOS踩坑。。。
- 踩一個Flutter Hot Reload的新坑Flutter
- 小程式踩坑填坑
- Mac上使用Docker Desktop啟動Kubernetes,踩坑後才搞定MacDocker
- (踩坑)WSL2+docker+laradock 配置並安裝 Laravel 框架DockerLaravel框架
- 【踩坑指南】執行緒池使用不當的五個坑執行緒
- Auth::user() 踩坑
- homestead xdebug踩坑
- phppresentation 踩坑指南PHP
- Homestead 配置踩坑
- URLEncoder使用踩坑
- cocoscreator踩坑01
- removeChild踩坑記REM
- Fragment-踩坑Fragment
- 小程式踩坑