Docker總結1/3---基礎篇

概述

1.什麼是虛擬化

在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術。抽象實體資源,進行重組。

  • 是將計算機的各種實體資源,如服務器、網絡、內存及存儲等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使用戶可以比原本的組合更好的方式來應用這些資源(不受現有資源的架設方式,地域或物理組態所限制)。

  • 一般所指的虛擬化資源包括【計算能力】和【資料存儲】。

  • 在實際的生產環境中,虛擬化技術主要用來解決高性能的物理硬件產能過剩和老的舊的硬件產能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件 對資源充分利用。

  • 虛擬化技術種類示例:軟件虛擬化、硬件虛擬化、內存虛擬化、網絡虛擬化(vip)、桌面虛擬化、服務虛擬化、虛擬機等等。

2.什麼是Docker

Docker 是一個開源項目,誕生於 2013 年初,最初是 dotCloud 公司內部的一個業餘項目。它基於 Google 公司推出的 Go 語言實現。 項目後來加入了 Linux 基金會,遵從了 Apache 2.0 協議,項目代碼在 GitHub 上進行維護。

Docker 自開源後受到廣泛的關注和討論,以至於 dotCloud 公司後來都改名爲 Docker Inc。Redhat 已經在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 產品中廣泛應用。

Docker 項目的目標是實現輕量級的操作 系統虛擬化解決方案。

Docker 的基礎是 Linux 容器(LXC)等技術。

在 LXC 的基礎上 Docker 進行了進一步的封裝,讓用戶不需要去關心容器的管理,使得操作更爲簡便。

用戶操作 Docker 的容器就像操作一個快速輕量級的虛擬機一樣簡單。
在這裏插入圖片描述

3.Docker有什麼有優點

(1)上手快

用戶只需要幾分鐘,就可以把自己的程序“Docker化”。

Docker依賴於“寫時複製”(copy-on-write)模型,使修改應用程序也非常迅速,可以說達到“隨心所致,代碼即改”的境界。

隨後,就可以創建容器來運行應用程序了。大多數Docker容器只需要不到1秒中即可啓動。由於去除了管理程序的開銷,Docker容器擁有很高的性能,同一臺宿主機中也可以運行更多的容器,使用戶儘可能的充分利用系統資源。

(2)明確的邏輯分類

  • 開發人員:只需要關心容器中運行的應用程序
  • 運維人員:只需要關心如何管理容器

Docker設計的目的就是要加強開發人員寫代碼的開發環境與應用程序要部署的生產環境一致性。從而降低那種“開發時一切正常,肯定是運維的問題(測試環境都是正常的,上線後出了問題就歸結爲肯定是運維的問題)”(保持開發、測試、生產一致的運行環境)。

(3)快速高效的開發生命週期

Docker的目標之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓你的應用程序具備可移植性,易於構建,並易於協作。

通俗一點說,Docker就像一個盒子,裏面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。(持續交付和部署,更輕鬆遷移、維護和擴展

(4)鼓勵使用面向服務的架構

Docker還鼓勵面向服務的體系結構和微服務架構。
Docker推薦單個容器只運行一個應用程序或進程,這樣就形成了一個分佈式的應用程序模型。
在這種模型下,應用程序或者服務都可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得非常簡單,同時也提高了程序的內省性。(當然,也可以在一個容器中運行多個應用程序)

4.容器與虛擬機比較

(1)本質上的區別

特性 虛擬機 Docker容器
運行環境 虛擬出一套硬件後,在其上運行一個完成操作系統,在該系統上再運行所需應用進程; 應用進程直接運行與宿主的內核,容器沒有自己的內核,而且沒有進行硬件虛擬。
虛擬化 硬件層面 操作系統層面(直接複用本地主機的操作系統)
優勢 可以虛擬出和宿主機器不同的操作系統 啓動速度快、佔用體積小

在這裏插入圖片描述
(2)使用上的區別

特性 容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 一般爲MB 一般爲GB
性能 接近原生 較弱
系統支持量 單機支持上千個容器 一般幾十個

在這裏插入圖片描述

5.Docker 組件

(1)Docker服務器與客戶端

Docker客戶端只需要向Docker服務器或者守護進程(在後臺運行並且不受任何終端控制的進程)發出請求,服務器或者守護進程將完成所有工作並返回結果。

Docker提供了一個命令行工具Docker以及一整套RESTful API。

你可以在同一臺宿主機上運行Docker守護進程和客戶端,也可以從本地的Docker客戶端連接到運行在另一臺宿主機上的遠程Docker守護進程。

Docker架構(客戶端-服務器(C/S))
在這裏插入圖片描述
在這裏插入圖片描述

(2) Docker三大組件

鏡像【image】、容器【container】、註冊中心【registry】

在這裏插入圖片描述

Ⅰ 鏡像

操作系統分爲:內核和用戶空間。對於Linux而言,內核啓動後,會掛載root文件系統爲其提供用戶空間的支持。

而Docker鏡像(Image),相當於一個root文件系統。

比如:官方進行centos:7.6就包含了完整的一套centos:7.6最小系統的root文件系統。

Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件之外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

Docker鏡像分層存儲

  • 爲什麼要分層存儲?
    Docker鏡像包含操作系統完整的root文件系統,體積龐大。
    鏡像只是一個虛擬概念,其實際體現是多層文件聯合組成。

  • 操作系統
    鏡像構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上任何改變之發生在自己這一層。
    在構建鏡像的時候,每一層儘量只包含該層需要添加的東西,任何額外的東西應該在該層構建結束之前清理掉。

  • 分層的優點?
    使得鏡像的複用、定製變得更爲容易。甚至可以用之前構建好的鏡像作爲基礎層,然後進一步添加新的層,以定製自己所需的內容,構建新的鏡像。

  • 鏡像是構建Docker的基石。用戶基於鏡像來運行自己的容器。鏡像也是Docker生命週期中的“構建”部分。鏡像是基於聯合文件系統的一種層式結構,由一系列指令一步一步構建出來。
    例如:添加一個文件; 執行一個命令; 打開一個窗口。
    也可以將鏡像當作容器的“源代碼”。鏡像體積很小,非常“便攜”,易於分享、存儲和更新。

Ⅱ 容器

Docker容器就是: 一個鏡像格式; 一些列標準操作; 一個執行環境。

  • 鏡像和容器對比

不同點

特徵 鏡像 容器
定義 靜態定義 運行時的實體(可以被創建、啓動、停止、刪除、暫停等。容器是基於鏡像啓動起來的,容器中可以運行一個或多個進程,一旦容器啓動完成後,我們就可以登錄到容器中安裝自己需要的軟件或者服務。
階段 Docker生命週期中的構建或者打包階段 啓動或者執行階段

相同點

都是分層存儲。
每一個容器運行時,是以鏡像爲基礎層,在其上創建一個當前容器的存儲層(爲容器運行時讀寫準備),稱爲容器存儲層

容器存儲層的生命週期和容器一樣,容器消亡時,容器存儲層也隨之消亡,任何保存於容器存儲層的信息都會隨容器刪除而丟失。因此容器不應該向其存儲層寫入任何數據,容器存儲層要保存無狀態化。

所有的文件寫入操作,都應該使用Volume數據卷、或者綁定宿主目錄,在這寫位置的讀寫會跳過容器存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。數據卷的生命週期獨立於容器,容器消亡,數據卷不會消亡。因此,使用數據卷後,容器刪除或重新運行後,數據不會丟失。

  • 示例:

Docker借鑑了標準集裝箱的概念:集裝箱運輸貨物,而Docker運輸軟件。

和集裝箱一樣,Docker在執行上述操作時,並不關心容器中到底裝了什麼,它不管是web服務器,還是數據庫,或者是應用程序服務器。所有的容器都按照相同的方式將內容“裝載”進去。

Docker也不關心把容器運到何方:我們可以在自己的筆記本中構建容器,上傳到Registry,然後下載到一個物理的或者虛擬的服務器來測試,在把容器部署到具體的主機中。像標準集裝箱一樣,Docker容器方便替換,可以疊加,易於分發,並且儘量通用。

Ⅲ 註冊中心

Registry

Docker用Registry來保存用戶構建的鏡像。Registry分爲公共私有兩種。(可類比maven倉庫)

鏡像構建完成後,可以很容易在當前宿主機上運行。但是,如果需要在其它服務上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務。

內容 含義
倉庫和標籤 Docker Registry可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個鏡像。一個倉庫包含同一軟件不同版本鏡像,而標籤對應軟件各個版本。通過<倉庫名>:<標籤>指定軟件哪個版本鏡像。不給標籤,將默認latest作爲標籤。
公共的Registry Docker公司運營公共的Registry叫做Docker Hub。用戶可以在Docker Hub註冊賬號,分享並保存自己的鏡像(說明:在Docker Hub下載鏡像巨慢,可以自己構建私有的Registry)。
倉庫名 倉庫名經常兩段式形式。例如:study/nginx,前者是Docker Registry多用戶環境下的用戶名,後者是對應的軟件名。但這並非絕對,取決於使用的具體Docker Registry的軟件或服務。

Docker安裝與啓動

1. 安裝Docker

​ Docker官方建議在Ubuntu中安裝,因爲Docker是基於Ubuntu發佈的,而且一般Docker出現的問題Ubuntu是最先更新或者打補丁的。在很多版本的CentOS中是不支持更新最新的一些補丁包的。

​ 由於我們學習的環境都使用的是CentOS,因此這裏我們將Docker安裝到CentOS上。注意:這裏建議安裝在CentOS7.x以上的版本,在CentOS6.x的版本中,安裝前需要安裝其他很多的環境而且Docker很多補丁不支持更新。

  • 使用工具,如下圖:具體安裝步驟,可以從搜索相應的博客,這裏不做贅述。
    在這裏插入圖片描述

(1)yum 包更新到最新

sudo yum update

(2)安裝需要的軟件包

yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

(3)設置yum源爲阿里雲

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(4)安裝docker

sudo yum install docker-ce

(5)安裝後查看docker版本

docker -v

2 設置ustc的鏡像

ustc是老牌的linux鏡像服務提供者了,還在遙遠的ubuntu 5.04版本的時候就在用。ustc的docker鏡像加速器速度很快。ustc docker mirror的優勢之一就是不需要註冊,是真正的公共服務。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker

編輯該文件:

vi /etc/docker/daemon.json  

在該文件中輸入如下內容:


{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

3 Docker的啓動與停止

systemctl命令是系統服務管理器指令

(1)啓動docker:

systemctl start docker

(2)停止docker:

systemctl stop docker

(3)重啓docker:

systemctl restart docker

(4)查看docker狀態

systemctl status docker

(5)開機啓動

systemctl enable docker

(6)查看docker概要信息

docker info

(7)查看docker幫助文檔

docker --help

總結

到這裏,你已經對Docker有了一個初步的認識,更多操作可以關注後面的博客。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章