1. 程式人生 > >使用 Docker 容器應該避免的 10 個事情

使用 Docker 容器應該避免的 10 個事情

當你最後投入容器的懷抱,發現它能解決很多問題,而且還具有眾多的優點:

  1. 第一:它是不可變的 – 作業系統,庫版本,配置,資料夾和應用都是一樣的。您可以使用通過相同QA測試的映象,使產品具有相同的表現。

  2. 第二:它是輕量級的 – 容器的記憶體佔用非常小。不需要幾百幾千MB,它只要對主程序分配記憶體再加上幾十MB。

  3. 第三:它很快速 – 啟動一個容器與啟動一個單程序一樣快。不需要幾分鐘,您可以在幾秒鐘內啟動一個全新的容器。

但是,許多使用者依然像對待典型的虛擬機器那樣對待容器。但是他們都忘記了除了與虛擬機器相似的部分,容器還有一個很大的優點:它是一次性的。容器的準則 :“容器是臨時的”。

容器是臨時的

容器是臨時的

這個特性“本身”促使使用者改變他們關於使用和管理容器的習慣;我將會向您解釋在容器中不應該做這些事,以確保最大地發揮容器的作用。

1) 不要在容器中儲存資料 –  容器可能被停止,銷燬,或替換。一個執行在容器中的程式版本1.0,應該很容易被1.1的版本替換且不影響或損失資料。有鑑於此,如果你需要儲存資料,請存在卷中,並且注意如果兩個容器在同一個捲上寫資料會導致崩潰。確保你的應用被設計成在共享資料儲存上寫入。

2) 不要將你的應用釋出兩份 –  一些人將容器視為虛擬機器。他們中的大多數傾向於認為他們應該在現有的執行容器裡釋出自己的應用。在開發階段這樣是對的,此時你需要不斷地部署與除錯;但對於質量保證與生產中的一個連續部署的管道,你的應用本該成為映象的一部分。記住:容器應該保持不變

3) 不要建立超大映象 – 一個超大映象只會難以分發。確保你僅有執行你應用/程序的必需的檔案和庫。不要安裝不必要的包或在建立中執行更新(yum更新)。

4) 不要使用單層映象 – 要對分層檔案系統有更合理的使用,始終為你的作業系統建立你自己的基礎映象層,另外一層為安全和使用者定義,一層為庫的安裝,一層為配置,最後一層為應用。這將易於重建和管理一個映象,也易於分發。

5) 不要為執行中的容器建立映象 – 換言之,不要使用“docker commit”命令來建立映象。這種建立映象的方法是不可重現的也不能版本化,應該徹底避免。始終使用Dockerfile或任何其他的可完全重現的S2I(源至映象)方法。

6) 不要只使用“最新”標籤 – 最新標籤就像Maven使用者的“快照”。標籤是被鼓勵使用的,尤其是當你有一個分層的檔案系統。你總不希望當你2個月之後建立映象時,驚訝地發現你的應用無法執行,因為最頂的分層被非向後相容的新版本替換,或者建立快取中有一個錯誤的“最新”版本。在生產中部署容器時應避免使用最新。

7) 不要在單一容器中執行超過一個程序 – 容器能完美地執行單個程序(http守護程序,應用伺服器,資料庫),但是如果你不止有一個程序,管理、獲取日誌、獨立更新都會遇到麻煩。

8) 不要在映象中儲存憑據。使用環境變數 –不要將映象中的任何使用者名稱/密碼寫死。使用環境變數來從容器外部獲取此資訊。有一個不錯的例子是postgres映象

9) 使用非root使用者執行程序 – “docker容器預設以root執行。(…)隨著docker的成熟,更多的安全預設選項變得可用。現如今,請求root對於其他人是危險的,可能無法在所有環境中可用。你的映象應該使用USER指令來指令容器的一個非root使用者來執行。”(來自Docker映象作者指南

10) 不要依賴IP地址 – 每個容器都有自己的內部IP地址,如果你啟動並停止它地址可能會變化。如果你的應用或微服務需要與其他容器通訊,使用任何命名與(或者)環境變數來從一個容器傳遞合適資訊到另一個。

相關推薦

使用Docker容器應該避免10事情

當你最後投入容器的懷抱,發現它能解決很多問題,而且還具有眾多的 優點:

使用 Docker 容器應該避免10 事情

當你最後投入容器的懷抱,發現它能解決很多問題,而且還具有眾多的優點: 第一:它是不可變的 – 作業系統,庫版本,配置,資料夾和應用都是一樣的。您可以使用通過相同QA測試的映象,使產品具有相同的表現。 第二:它是輕量級的 – 容器的記憶體佔用非常小。不需要幾百幾千MB,它

使用Docker應該避免10件事

容器可以解決很多問題,並且具有諸多優勢,當你投身其中時便會發現其奧妙所在。

Docker之旅:在Docker容器中建立第一程式

Docker的概念 Docker是開發人員和系統管理員 使用容器開發,部署和執行應用程式的平臺。使用Linux容器來部署應用程式稱為集裝箱化。容器不是新的事物,但它們用於輕鬆部署應用程式。 一、測試一下Docker的版本 1. 檢視Docker

加強Docker容器與Java 10整合

很多執行在Java虛擬機器(JVM)中的應用,包括資料服務如Apache Spark和Kafka以及傳統企業應用,都執行在容器中。最近,執行在容器裡的JVM出現了由於記憶體和CPU資源限制和使用率導致效能損失問題。這是因為Java意識不到自己執行在容器中。隨著Java 10的

10張圖帶你深入理解Docker容器和鏡像-轉

轉換 AS pos run IT tree 很難 的區別 write 轉載:http://dockone.io/article/783 這篇文章希望能夠幫助讀者深入理解Docker的命令,還有容器(container)和鏡像(image)之間的區別,並深入探討容器和運行

Docker實戰中,從Ubuntu系列換到CentOS7.X系列應該避免的坑

一、背景 在生產環境中部署、使用Docker已經有很長一段時間了。學習的時候大部分環境、資料都是在Ubuntu14.04、16.04及18.04中實現的。由於某些原因,需要在生產環境中的CentOS7.2和7.4中部署使用Docker。在這個過程中踩了不少坑,花了很多時間,走了很多彎

學習Docker10張圖帶你深入理解Docker容器和映象

剛開始接觸Docker之後,就對容器和映象的概念有所迷惑,上一篇也簡單的說了一下之前的見解,其實並不準確,在之後的學習中再加上網上找的資料,發現了下面的這一片博文,一定要多看幾遍,看完思考再看,就會對容器和映象有更深刻的認識。 【編者的話】本文用圖文

Linux中使用Docker容器不能忽略的10件事!

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。 當你真正投入容器Docker的懷抱,不但可以發現它能解決很多問題,而且還具有眾多的優點: 第一:它是不可變的 – 作業系統,庫版本,配

【IT人士健康系列】操作電腦的10小細節,讓你避免滑鼠手

由於關注“運維派”的大多是IT人群,除了關注技術和資訊,還得關注下自身的身體健康,所以後續“運維派”會陸續推出系列關注IT人健康的文章,今天就給大家講講如何避免得滑鼠手,10個使用電腦的注意事項要知道: 1、顯示屏放置在身體前面的高度以不使頭部上下移動為宜,當坐正之後,雙眼應與螢幕處於平行直線上,

基本的 Docker 容器管理命令

本文英文原文:https://kerneltalks.com/virtualization/8-

關於Docker應該知道的10件事

如果你在企業IT工作,那你會聽說過Docker。即使在是像Puppet、Hadoop和MongoDB這樣的熱門技術中,Docker也會脫穎而出。 但正是因為Docker正處於炒作期,因此這並不意味著它適合你。正如我們Tech  Pro Research

Docker在一臺膝上型電腦上搭建一個具有10節點7種角色的Hadoop叢集(下)-搭建Hadoop叢集

上篇介紹了快速上手Docker部分,下面接著介紹搭建Hadoop叢集部分。 六、搭建Hadoop偽分佈模式 我們先用前面建立的這個容器來搭建Hadoop偽分佈模式做測試,測試成功後再搭建完全分散式叢集。1.SSH這個centos容器可以看做是一個非常精簡的系統,很多功能沒有,需要自己安裝。Hado

Docker在一臺膝上型電腦上搭建一個具有10節點7種角色的Hadoop叢集(上)-快速上手Docker

如果想在一臺電腦上搭建一個多節點的Hadoop叢集,傳統的方式是使用多個虛擬機器。但這種方式佔用的資源比較多,一臺筆記本能同時執行的虛擬機器的數量是很有限的。這個時候我們可以使用Docker。Docker可以看做是一種輕量級的虛擬機器,佔用資源少,用起來和傳統的虛擬機器很像,使用的時候可以類比VMware或V

Java程式設計師應該瞭解的10面向物件設計原則

摘要:Java程式設計最基本的原則就是要追求高內聚和低耦合的解決方案和程式碼模組設計。檢視Apache和Sun的開放原始碼能幫助你發現其他Java設計原則在這些程式碼中的實際運用。 面向物件設計原則是OOPS(Object-Oriented Programming Sys

java程式猿應該瞭解的10面向物件設計原則(每次看都很有感悟,特意拿來和大家共享)

Java程式設計最基本的原則就是要追求高內聚和低耦合的解決方案和程式碼模組設計。檢視Apache和Sun的開放原始碼能幫助你發現其他Java設計原則在這些程式碼中的實際運用。 面向物件設計原則是OOPS(Object-Oriented Programming System,

休息不夠、程式碼混亂、傲慢……程式設計師需要避免10 壞習慣

1. 休息不夠 我敢肯定你們很多人或者說幾乎所有人都對這個壞習慣感到十分罪惡。 我也是,對沒有休息或休息不夠依然有罪惡感。曾有一段時間,我凌晨六點入睡,中午一點左右起來吃午飯,一直工作到第二天凌晨六七點。這簡直太常見了,幾乎每天都是如此。在工作任務緊急的時候,我做過許多可笑的事情。我想

每個Java程式設計師都應該Follow的10Twitter賬號

想讓自己在第一時間瞭解Java世界正在發生什麼嗎? Twitter絕對是瞭解最新動態的優質資源.我列舉了每個Java程式設計師都應該關注的10個twitter賬號.在評論中可新增你喜歡的. 1 @java java語言的官方twitter賬號,持續更新最前沿的java新聞.

和BEM的戰鬥:10常見問題及如何避免

無論你是剛剛發現BEM或者已經是個中熟手(作為web術語來說),你可能已經意識到它是一種有用的方法。如果你還不知道BEM是什麼,我建議你在繼續閱讀這篇文章之前去BEM website瞭解一下它,因為我會假設你對這種CSS的方法有一個基礎的理解。 本文旨在對

centos 核心升級到3.10 支援docker容器

最近在學習docker容器。在阿里雲上的伺服器核心版本比較低。所以,需要先升級。 檢視核心命令:uname -r 升級核心,網上也有很多種方式。一般都是下載核心包,然後自己編譯。不過這種方式需要注意的是相關的依賴。 嫌下載編譯麻煩,可以使用這種方式。 在yum的