1. 程式人生 > >Docker容器中常見的十種誤區

Docker容器中常見的十種誤區

Docker是一個開源的應用容器引擎,在虛擬的容器環境之上增加一個應用部署引擎。它是一個輕量級但十分強大的關於虛擬化技術的開源容器,在容器中還整合了構建並容器化應用的工作流程。目前大家已經開始認同並接受容器技術,並意識到它能夠解決多種現實問題並具備一系列無可比擬的優勢。今天就和大家聊一聊容器技術的優勢和誤區,幫助大家更好地理解和使用Docker。

Docker容器的三大優勢:

  1. 第一:具備恆定特性–作業系統、庫版本、配置、資料夾以及應用程式全部涵蓋在內。大家可以將質量檢查流程中使用的測試映象原封不動地引入生產環境當中。
  2. 第二:具備輕量化特性–容器的體積非常小巧。相較於動輒成百上千MB的作業系統,它只需要配備主程序所必需的記憶體外加數十MB額外容量。
  3. 第三:速度驚人–大家可以享受等同於單一程序的容器啟動速度。相較於長達數分鐘的傳統負載啟動時長,現在我們完全能夠在幾秒鐘內啟動一套新容器。 
    不過很多使用者仍然在以對待典型虛擬機器的方式審視容器,在這種情況下他們往往沒辦法發揮容器技術所蘊含的各類優勢。因此我們需要再次強調一項基本原則:容器具備一次性特徵。

容器座右銘: “容器屬於臨時性(一次性)系統。”

這一特性的存在要求使用者轉變既有思路,選擇更為合適的方針處理並管理容器。接下來,我會通過十種常見誤區幫助大家瞭解發揮容器優勢的合理途徑:

1)不要將資料存放在容器內——容器系統可隨時進行停止、銷燬或者替換。執行在容器環境下的應用程式1.0版本應該可以輕鬆更換為1.1版本,且不會影響或者破壞相關資料。考慮到這一點,如果大家需要儲存資料,請將其儲存在儲存卷當中;不過需要注意的是,如果有兩套容器同時指向同一儲存卷,則可能引發故障。大家必須確保自己的應用程式使用面向共享式資料儲存機制寫入設計方案。

2)不要以拆分方式進行應用程式釋出——有些朋友仍然帶著虛擬機器思路審視容器。他們大多認為自己應該將應用程式部署至當前正在執行的容器當中。然而,這種作法只適用於開發階段,從而實現應用開發所必需的持續部署與除錯;一旦轉移至質量檢查與生產環境下的持續部署流程,應用程式則必須作為映象本身的組成部分。請記住:容器具有恆定特性。

3)不要建立大型映象——體積過大的映象會加大其釋出難度。大家需要確保在映象中只保留執行應用程式/程序所必需的檔案與庫。不要安裝任何非必要軟體包或者在構建過程中執行“更新”(yum update)。

4)不要使用單層映象——為了更合理地使用分層檔案系統,請大家務必為作業系統、安裝軟體、配置以及應用程式分別建立獨立層。這不僅能夠簡化映象的建立與管理工作,亦能降低分發難度。

5) 不要利用執行中的容器建立映象——換言之,不要使用“docker commit”建立映象。以這種方式建立的映象不具備再生產能力且無法實現版本控制性,因此絕對不值得提倡。相反,使用Dockerfile或者任何S2I(即源到映象)方法能夠有效確保整體再生產能力。

6)不要只使用“最新”標籤——最新標籤類似於Maven使用者所熟悉的“SNAPSHOT”。各標籤只適合在分層檔案系統當中使用。如果大家在映象構建完成的兩個月之後,意外發現自己的應用程式由於頂層版本替換而造成向下相容性缺失或者build快取“最新”版本無法執行,那麼無疑會造成巨大的麻煩。總體來講,在向生產環境中部署容器時,必須避免使用最新標籤。

7)不要在單一容器內執行多個程序——容器系統非常適合執行單一程序(例如http域名、應用程式伺服器以及資料庫等等),但如果大家在容器內使用多個程序,則可能很難對其分別進行管理、獲取日誌記錄以及更新。

8)不要在映象內儲存憑證,建議使用環境變數——大家絕對不要以硬編碼形式在映象中儲存任何使用者名稱/密碼。相反,我們應當利用環境變數從容器之外獲取此類資訊。在這方面,最完美的示例就是postgres映象。

9)以非root使用者執行程序——“預設情況下,Docker容器以root方式執行。隨著Docker的不斷髮展成熟,更多更為安全的預設選項亦陸續出現。就目前而言,使用root許可權仍有可能造成安全隱患且缺乏對全部環境的良好適應效果。大家的映象應當使用USER指令將容器指定為非root使用者角色”。(來自Docker映象建立者指南)

10)不要依賴於IP地址——每套容器都擁有自己的內部IP地址,而容器的每次啟動與停止都有可能導致IP地址發生改變。如果應用程式或者微服務需要與其它容器通訊,那麼請使用能夠將相關資訊由此容器傳遞至彼容器的名稱與/或環境變數。

Docker技術作為當前最火爆的技術,仍在一個落地和普及的過程中。大家在使用過程中應當拋開傳統的觀念和想法,避免走入誤區、繞進彎路,在技術轉型的過程中先人一步。

相關推薦

Docker容器常見誤區

Docker是一個開源的應用容器引擎,在虛擬的容器環境之上增加一個應用部署引擎。它是一個輕量級但十分強大的關於虛擬化技術的開源容器,在容器中還整合了構建並容器化應用的工作流程。目前大家已經開始認同並接受容器技術,並意識到它能夠解決多種現實問題並具備一系列無可比擬的優勢。今

Docker容器運行.Net Core web Api項目

c99 images sof 以及 store .com 查看 .html microsoft 安裝Docker環境 參考本人這篇《CentOS 7 下Docker的安裝》文章進行安裝以及環境配置,這裏不做贅述。 通過.NetCore開發WebApi項目 1. 創建.Net

Docker容器進入的4方式

docker容器進入的4種方式在使用Docker創建了容器之後,大家比較關心的就是如何進入該容器了,其實進入Docker容器有好幾多種方式,這裏我們就講一下常用的幾種進入Docker容器的方法。進入Docker容器比較常見的幾種做法如下:使用docker attach使用SSH使用nsenter使用exec一

Docker 容器運行應用程序

ges 文件中 機制 計算 http cannot info 應用 png 案例說明 運行 3 個容器,實現對網站的監控。 三個容器的說明: 容器 web: 創建自 nginx 映像,使用 80 端口,運行於後臺,實現 web 服務。 容器 mailer: 該容

docker容器安裝vim

docker容器中安裝vim在使用docker容器時,有時候裏邊沒有安裝vim,敲vim命令時提示說:vim: command not found,這個時候就需要安裝vim,可是當你敲apt-get install vim命令時,提示: Reading package lists... Done

docker容器啟動service服務 Failed to get D-Bus connection: Operation not permitted

docker容器中啟動service服務 failed to get d-bus connection: operation not permitted解決方案:啟動時設置參數 --privileged使用該參數,container內的root擁有真正的root權限。否則,container內的root只是

Docker容器部署靜態網頁的方法教程

tin uri ash led att bin get acf code 步驟:1.創建映射端口的交互式容器docker run -p 80 --name web -i -t daocloud.io/ubuntu /bin/bash2.安裝Nginxapt-get inst

docker容器沒有vi

最新 alt .com blog docker容器 作用 容器 sta 索引 在使用docker容器時,輸入vim命令時提示說:vim: command not found,這個時候就需要安裝vim,可是當你敲apt-get install vi命令時,提示如下:這時就需要

隔離 docker 容器的用戶

pre 然而 ping htm spa 用戶 nic exe 完美 筆者在前文《理解 docker 容器中的 uid 和 gid》介紹了 docker 容器中的用戶與宿主機上用戶的關系,得出的結論是:docker 默認沒有隔離宿主機用戶和容器中的用戶。如果你已經了解了 Li

Jenkins外掛之 Docker-Plugin 將slave執行在docker容器

Jenkins外掛名稱 Docker plugin This plugin integrates Jenkins with Docker This plugin allows slaves to be dynamically provisioned using Docker. 外掛文

.NetCore下使用IdentityServer4 & JwtBearer認證授權在CentOS Docker容器執行遇到的坑及填坑

今天我把WebAPI部署到CentOS Docker容器中執行,發現原有在Windows下允許的JWTBearer配置出現了問題 在Window下我一直使用這個配置,沒有問題 services.AddAuthentication(JwtBearerDefaults.AuthenticationSc

linux docker容器安裝maven nexus倉庫

1.docker安裝,參考上一篇rancher2.0搭建簡單的k8s叢集 2.建立資料夾:/usr/local/work/maven 3.執行docker,拉取nexus映象。 docker search nexus; #拉取nexus映象 docker pull sonatyp

docker容器的Tomcat遠端debug

進入Tomcat容器 docker exec -it containerId bash containerId: Tomcat容器的id 修改Tomcat的catalina.sh檔案 在catalina.sh中新增如下程式碼: CATALINA_OPTS="-X

如何把 Java Web 應用放在 docker 容器執行

本文適合 docker 零基礎,且希望使用 docker 執行 Java Web 應用的人士。因為是傻瓜教程,這裡沒有使用 docker 的高階功能,本教程旨在用最簡單方法實現目標。 安裝 docker Docker 的安裝資原始檔存放在Amazon,由於國內特殊的網路環境,安裝時,會間歇

解決:bash: vim: command not found、docker 容器不識別 vi / vim 、docker 容器安裝 vim

1. 在 Docker 容器中編輯檔案,報錯如下: bash: vim: command not found 2.  安裝 vim : apt-get install vim  執行完成後報錯: Reading package lists... D

隔離 docker 容器的使用者

筆者在前文《理解 docker 容器中的 uid 和 gid》介紹了 docker 容器中的使用者與宿主機上使用者的關係,得出的結論是:docker 預設沒有隔離宿主機使用者和容器中的使用者。如果你已經瞭解了 Linux 的 user namespace 技術(參考《Linux Namespace : Use

使用IntelliJ IDEA把springboot web專案釋出到docker容器執行

1、安裝docker for mac, 官方安裝教程,安裝成功後啟動docker 2、在IntelliJ IDEA中安裝Docker integration外掛         3、安裝外掛後,需要配置連線docker服務端 4、建立Dockerfile

Docker 容器時間不同步解決方案

問題描述 如果你執行docker 容器,發現容器內的docker時間與宿主機上的時間不一致,解決方法很容易。 但是要注意的是,java程式預設使用UTC時間,本地時間一般設定為CST時間,所以常會出現差8個時區的問題。 所以說你的java日誌出現了時間與北京時間

docker容器安裝vim

docker容器中安裝vim 在使用docker容器時,有時候裡邊沒有安裝vim,敲vim命令時提示說:vim: command not found,這個時候就需要安裝vim,可是當你敲apt-get install vim命令時,提示: Reading pac

docker容器執行Ubuntu

只習慣用Centos系統,但是有些軟體編譯安裝很麻煩不方便,但是呢在Ubuntu中就變得容易方便,所以我打算用docker執行Ubuntu系統彌補Centos短板和不足之處; 1、安裝Ubuntu系統命令:docker pull ubuntu 這是一個極度精簡的系統,連最基