嘿,菜鳥,你知道Docker容器技術嗎?

嘿,菜鳥,你知道Docker容器技術嗎?如果不懂,今天趕緊學一學,看一看,避免落後了。。

近幾年多來應該一直在聽到普通的容器、尤其是Docker,關於它們的新聞從未間斷過。Docker1.0在2014年6月發布后,聲勢更是達到了前所未有的程度。動靜之所以這麼大,就是因為許多公司在以驚人的速度採用Docker。在2014年7月的開源大會(OSCon)上,遇到了早將伺服器應用程序從虛擬機(VM)轉移到容器的無數企業。確實,Docker公司主管服務和支持的副總裁James Turnbull在會上告訴我,其中有三家大銀行一直在使用Docker的測試版,現已在生產環境中使用Docker。對任何早期技術來說,這無疑是極大的充滿自信的舉動,要知道它在安全至上的金融界幾乎聞所未聞。

Advertisements

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從Apache2.0協議開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器性能開銷極低。

Docker 的核心組件包括:

  1. Docker 客戶端 - Client

  2. Docker 伺服器 - Docker daemon

  3. Docker 鏡像 - Image

  4. Registry

  5. Docker 容器 - Container

Docker 架構如下圖所示:

Docker 採用的是 Client/Server 架構。客戶端向伺服器發送請求,伺服器負責構建、運行和分發容器。客戶端和伺服器可以運行在同一個 Host 上,客戶端也可以通過 socket 或 REST API 與遠程的伺服器通信。

Advertisements

Docker 客戶端

最常用的 Docker 客戶端是 docker 命令。通過 docker 我們可以方便地在 Host 上構建和運行容器。

docker 支持很多操作(子命令),後面會逐步用到。

除了 docker 命令行工具,用戶也可以通過 REST API 與伺服器通信。

Docker 伺服器

Docker daemon 是伺服器組件,以 Linux 後台服務的方式運行。

Docker daemon 運行在 Docker host 上,負責創建、運行、監控容器,構建、存儲鏡像。

默認配置下,Docker daemon 只能響應來自本地 Host 的客戶端請求。如果要允許遠程客戶端請求,需要在配置文件中打開 TCP 監聽,步驟如下:

  1. 編輯配置文件 /etc/systemd/system/multi-user.target.wants/docker.service,在環境變數 ExecStart 後面添加 -H tcp://0.0.0.0,允許來自任意 IP 的客戶端連接。

    如果使用的是其他操作系統,配置文件的位置可能會不一樣。

  2. 重啟 Docker daemon。

  3. 伺服器 IP 為 192.168.56.102,客戶端在命令行里加上 -H 參數,即可與遠程伺服器通信。

    info 子命令用於查看 Docker 伺服器的信息。

Docker 鏡像

可將 Docker 鏡像看著只讀模板,通過它可以創建 Docker 容器。

例如某個鏡像可能包含一個 Ubuntu 操作系統、一個 Apache HTTP Server 以及用戶開發的 Web 應用。

鏡像有多種生成方法:

  1. 可以從無到有開始創建鏡像

  2. 也可以下載並使用別人創建好的現成的鏡像

  3. 還可以在現有鏡像上創建新的鏡像

我們可以將鏡像的內容和創建步驟描述在一個文本文件中,這個文件被稱作 Dockerfile,通過執行 docker build <docker-file> 命令可以構建出 Docker 鏡像,後面我們會討論。

Docker 容器

Docker 容器就是 Docker 鏡像的運行實例。

用戶可以通過 CLI(docker)或是 API 啟動、停止、移動或刪除容器。可以這麼認為,對於應用軟體,鏡像是軟體生命周期的構建和打包階段,而容器則是啟動和運行階段。

Registry

Registry 是存放 Docker 鏡像的倉庫,Registry 分私有和公有兩種。

Docker Hub(https://hub.docker.com/) 是默認的 Registry,由 Docker 公司維護,上面有數以萬計的鏡像,用戶可以自由下載和使用。

出於對速度或安全的考慮,用戶也可以創建自己的私有 Registry。後面我們會學習如何搭建私有 Registry。

docker pull 命令可以從 Registry 下載鏡像。

docker run 命令則是先下載鏡像(如果本地沒有),然後再啟動容器。

Docker帶來了之前技術所沒有的幾個新特點。第一是,與之前的方法相比,Docker讓容器部署和使用起來更容易、更安全。此外,由於Docker與其他容器領域的巨擘進行了合作,包括Canonical、谷歌、紅帽和Parallels,共同開發其關鍵的開源組件libcontainer,它為容器帶來了迫切需要的標準化。

與此同時,廣大開發人員可以使用Docker封裝、交付和運行任何應用程序,應用程序成為輕型的、可移植的、自給自足的LXC容器,可以在任何地方運行。正如Bottomley告訴我,「容器讓你立即享有應用程序可移植性。」

市場研究公司451 Research的資深分析師Jay Lyman補充道:「企業組織力求以一種高效、標準化、可重複的方式,讓應用程序和工作負載更易於移植和分發,而有時很難做到這點。正如GitHub通過共享源代碼來促進合作和創新那樣,Docker Hub、Official Repos和商業支持也在幫助眾多企業通過改進封裝、部署和管理應用程序的方式,應對這個難題。」

最後但並非最不重要的,Docker容器易於部署到雲端。正如Ben Lloyd Pearson在opensource.com上寫道:「Docker採用了一種特別的方式,以便可以整合到大多數DevOps(開發運營)應用程序當中,包括Puppet、Chef、Vagrant和Ansible,或者可以獨自使用,以管理開發環境。主要賣點是,它簡化了通常由另外這些應用程序執行的好多任務。具體來說,有了Docker,人們就可以搭建與活動伺服器一模一樣的本地開發環境,從同一個主機運行多個開發環境(每個開發環境有獨特的軟體、操作系統和配置),在新的或不同的伺服器上測試項目,以及讓任何人都可以在設置一模一樣的情況下處理同一項目,無論本地主機環境怎樣。」

簡而言之,Docker能為你做的事情就是:相比其他技術,它能讓更多數量的應用程序在同一硬體上運行;它讓開發人員易於快速構建可隨時運行的容器化應用程序;它大大簡化了管理和部署應用程序的任務。總而言之,我能理解作為一項企業級技術,Docker為何一下子躥紅。我只是希望它不負眾望,否則外頭會有一些憂心忡忡的CEO和CIO。

Advertisements

你可能會喜歡