1. 程式人生 > >初識Docker學習

初識Docker學習

為什麼要使用Docker

Docker初學習

作為一種新興的虛擬化方式,Docker 跟傳統的虛擬化方式相比具有眾多的優勢。
基礎進一步定製,大大的降低了應用服務的映象製作成本。

注:本文基於《Docker-從入門到實踐》的學習

在這裡插入圖片描述

Docker特性

更高效的利用系統資源

容器不需要進行硬體虛擬以及執行完整作業系統等額外開銷,Docker 對系統資源的利用
率高。無論是應用執行速度、記憶體損耗或者檔案儲存速度,都要比傳統虛擬機器技術更高
效。因此,相比虛擬機器技術,一個相同配置的主機,往往可以執行更多數量的應用。

更快速的啟動時間

傳統的虛擬機器技術啟動應用服務往往需要數分鐘,而 Docker 容器應用,由於直接運行於宿主
核心,無需啟動完整的作業系統
,因此可以做到秒級、甚至毫秒級的啟動時間。大大的節約
了開發、測試、部署的時間。

一致的執行環境

開發過程中一個常見的問題是環境一致性問題由於開發環境、測試環境、生產環境不一
致,導致有些 bug 並未在開發過程中被發現
。而 Docker 的映象提供了除核心外完整的執行
時環境,確保了應用執行環境一致性
,從而不會再出現 「這段程式碼在我機器上沒問題啊」 這
類問題。

持續交付和部署

對開發和運維(DevOps)人員來說,最希望的就是一次建立或配置,可以在任意地方正常運

使用 Docker 可以通過定製應用映象來實現持續整合、持續交付、部署。開發人員可以通過Dockerfile 來進行映象構建,並結合 持續整合(Continuous Integration) 系統進行整合測試,
而運維人員則可以直接在生產環境中快速部署該映象,甚至結合 持續部署(ContinuousDelivery/Deployment) 系統進行自動部署


而且使用 Dockerfile 使映象構建透明化,不僅僅開發團隊可以理解應用執行環境,也方便運維團隊理解應用執行所需條件,幫助更好的生產環境中部署該映象

更輕鬆的遷移

由於 Docker 確保了執行環境的一致性,使得應用的遷移更加容易。Docker 可以在很多平臺上執行,無論是物理機、虛擬機器、公有云、私有云,甚至是筆記本,其執行結果是一致的
因此使用者可以很輕易的將在一個平臺上執行的應用,遷移到另一個平臺上,而不用擔心執行環境的變化導致應用無法正常執行的情況

更輕鬆的維護和擴充套件

Docker 使用的分層儲存以及映象的技術,使得應用重複部分的複用更為容易,也使得應用的維護更新更加簡單,基於基礎映象進一步擴充套件映象也變得非常簡單。
此外,Docker 團隊同各個開源專案團隊一起維護了一大批高質量的 官方映象,既可以直接在生產環境使用,又可以作為基礎進一步定製,大大的降低了應用服務的映象製作成本

Docker的三個基本概念

Docker 包括三個基本概念
映象( Image )
容器( Container )
倉庫( Repository )
理解了這三個概念,就理解了 Docker 的整個生命週期。

Docker映象

相當於將liunx中的root檔案打包起來,一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的配置引數。映象不包含任何動態資料,其內容在構建後也不會被改變。

分層儲存

因為映象包含作業系統完整的 root 檔案系統,其體積往往是龐大的,因此在 Docker 設計
時,就充分利用 Union FS 的技術,將其設計為分層儲存的架構。所以嚴格來說,映象並非是
像一個 ISO 那樣的打包檔案,映象只是一個虛擬的概念
,其實際體現並非由一個檔案組成,
而是由一組檔案系統組成,或者說,由多層檔案系統聯合組成
映象構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後
一層上的任何改變只發生在自己這一層。比如,刪除前一層檔案的操作,實際不是真的刪除
前一層的檔案,而是僅在當前層標記為該檔案已刪除。在最終容器執行的時候,雖然不會看
到這個檔案,但是實際上該檔案會一直跟隨映象。因此,在構建映象的時候,需要額外小
心,每一層儘量只包含該層需要新增的東西,任何額外的東西應該在該層構建結束前清理

分層儲存的特徵還使得映象的複用、定製變的更為容易。甚至可以用之前構建好的映象作為
基礎層,然後進一步新增新的層,以定製自己所需的內容,構建新的映象。

Docker容器

映象( Image )和容器( Container )的關係,就像是面向物件程式設計中的 類 和 例項
一樣,映象是靜態的定義,容器是映象執行時的實體
。容器可以被建立、啟動、停止、刪
除、暫停等。
容器的實質是程序,但與直接在宿主執行的程序不同,容器程序運行於屬於自己的獨立的 命
名空間
。因此容器可以擁有自己的 root 檔案系統、自己的網路配置、自己的程序空間,甚
至自己的使用者 ID 空間。容器內的程序是執行在一個隔離的環境裡,使用起來,就好像是在一
個獨立於宿主的系統下操作一樣。這種特性使得容器封裝的應用比直接在宿主執行更加安
全。也因為這種隔離的特性,很多人初學 Docker 時常常會混淆容器和虛擬機器。

Docker Registry(註冊中心)

映象構建完成後,可以很容易的在當前宿主機上執行,但是,如果需要在其它伺服器上使用
這個映象,我們就需要一個集中的儲存、分發映象的服務,Docker Registry 就是這樣的服
務。一個 Docker Registry 中可以包含多個倉庫( Repository );每個倉庫可以包含多個標籤
( Tag );每個標籤對應一個映象.

注:以上大多文字摘自《Docker-從入門到實踐》