Docker技術學習(一)- Docker簡介

在這裏插入圖片描述

簡介

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。(–來自百度詞條)
一個完整的Docker有以下幾個部分組成:
DockerClient客戶端
Docker Daemon守護進程
Docker Image鏡像
DockerContainer容器

Docker 架構

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。Docker 容器通過 Docker 鏡像來創建。容器與鏡像的關係類似於面向對象編程中的對象與類。

Docker 面向對象
鏡像
容器 對象

Docker採用 C/S架構 Docker daemon 作爲服務端接受來自客戶的請求,並處理這些請求(創建、運行、分發容器)。 客戶端和服務端既可以運行在一個機器上,也可通過 socket 或者RESTful API 來進行通信。
在這裏插入圖片描述
Docker daemon 一般在宿主主機後臺運行,等待接收來自客戶端的消息。 Docker 客戶端則爲用戶提供一系列可執行命令,用戶用這些命令實現跟 Docker daemon 交互。

侷限性

Docker並非適合所有應用場景,Docker只能虛擬基於Linux的服務。Windows Azure 服務能夠運行Docker實例,但到目前爲止Windows服務還不能被虛擬化。也就是windows無法使用docker

Docker的用途

Docker的主要用途,目前又三大類:

提供了一次性的環境:比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。
提供彈性的雲服務:因爲Docker容器可以隨開隨關,很適合動態擴容和所容。
組建微服務架構:通過多個容器,一臺機器可以跑多個服務,因此在本機就可以模擬出微服務架構。

基本概念

1.Docker鏡像

操作系統分爲內核和用戶空間,對於Linux而言,內核啓動後,會掛載root文件系統爲其提供用戶空間支持。而Docker鏡像(Image),就相當於是一個root文件系統。
Docker鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之後也不會被改變。

2.Docker容器

鏡像(image)和容器(container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。
容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於屬於自己的獨立的命名空間。因此容器可以擁有自己的root文件系統、自己的網絡配置、自己的進程空間,甚至自己的用戶ID空間。容器內的進程是運行在一個隔離的環境裏,使用起來,就好像是在一個獨立宿主的系統下操作一樣。這種特性使容器封裝的應用比直接在宿主運行更加安全。
前面講過鏡像使用的是分層儲存,容器也是如此。每一個容器運行時,是以鏡像爲基礎層,在其上創建一個當前容器的存儲層,可以稱這個味容器運行時讀寫而準備的存儲層爲容器存儲層。
容器存儲層的生存週期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存於容器存儲層的信息都會隨容器刪除而丟失。
按照Docker最佳實踐的要求,容器不應該向其存儲層寫入任何數據,容器存儲層要保持無狀態化。所有的文件寫入操作,都應該使用數據卷(volume)、或者綁定宿主目錄,在這些位置的讀寫會跳過存儲層,直接對宿主(或網絡存儲)發生讀寫,其性能和穩定性更高。
數據卷的生存週期獨立於容器,容器消亡,數據卷不會消亡。因此,使用數據卷後,容器刪除或者重新運行之後,數據卻不會丟失。

3.倉庫

Docker Registry
鏡像構建完成後,可以很容易的在當前宿主機上運行,但是,如果需要在其它服務器上使用這個鏡像,我們就需要一個集中的存儲、分發鏡像的服務,Docker Registry就是這樣的服務。
一個Docker Registry中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(tag);每個標籤對應一個鏡像。
通常,一個倉庫會包含一個軟件不同版本的鏡像,而標籤就常用於對應該軟件的各個版本。我們可以通過<倉庫名>:<標籤>的格式來指定具體是這個軟件那個版本的鏡像。如果不給出標籤,將以laest作爲默認標籤。
以ubuntu鏡像爲例,ubuntu是倉庫的名字,其包含有不同的版本標籤,如,14.04,16.04。我們可以通過ubuntu:14.04或者ubuntu:16.04來具體指定所需要哪個版本的鏡像。如果忽略了標籤,比如ubuntu,那將視爲ubuntu:latest。
倉庫名經常以兩段式路徑形式出現,比如jwilder/nginx-proxy,前者意味着Docker Registry多用戶環境下的用戶名,後者則往往是對應的軟件名。但這並非絕對,取決於所使用的具體Docker Registry的軟件或服務。
Docker Registry公開服務
Docker Registry公開服務是開放給用戶使用、允許用戶管理鏡像的Registry服務。一般這類公開服務允許用戶免費上傳、下載公開的鏡像,並可能提供收費服務供用戶管理私有鏡像。
最常使用的Registry公開服務是官方的Docker Hub,這也是默認的Registry,並擁有大量的高質量的官方鏡像。除此以外,還有CoreOS的Quay.io,CoreOS相關的鏡像存儲在這裏;Google的Google Container Registry,Kubernetes的鏡像使用的就是這個服務。
在國內訪問這些服務可能會比較慢,郭恩ID餓一些雲服務商題提供了針對Docker Hub的鏡像服務(Registry Mirror),這些鏡像服務被稱爲加速器。常見的有阿里雲加速器、DaoCloud加速器等。使用加速器會直接從國內的地址下載Docker Hub的鏡像,比直接從Docker Hub下載速度會提高很多。

Ubuntu16.04 安裝Docker CE教程
Docker常用命令

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