Docker簡要教程

1 概述

1.1 應用場景

docker一詞的原意為“碼頭的裝卸工”,Docker 是一個基於 Golang 語言開發的開源的應用容器引擎,可以讓開發者打包應用及其依賴到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 服務器。使用容器部署應用程序稱為容器化。主要解決“在我的機器上正常運行、但到你的機器上不正常運行”的問題。

1.2 工作原理

Docker並非是一個通用的容器工具,它依賴於已存在並運行的Linux內核環境。Docker基於客戶端-服務器架構,客戶端與 Docker 守護進程通信,服務端負責構建、運行和分發Docker容器等繁重的工作。Docker 客戶端和守護進程可以運行在同一個系統上,也可以連接到一個遠程 Docker 守護進程。兩者通過 UNIX 套接字或網絡接口使用 REST API 進行通信。

2 比較虛擬機

虛擬機需要模擬硬件,運行整個操作系統不但體積臃腫內存占用高,程序的性能也會受到影響。

Docker 容器 在概念上與虛擬機非常類似,但是它不會去模擬底層的硬件 ,隻會為每一個應用提供完全隔離的運行環境,這些“環境”就是Docker中的Container(容器)。

2.1 相同:

虛擬機和容器都可以模擬完全相同的本地開發環境。

2.2 區別:

  • 虛擬機:虛擬出硬件後,在其上運行一個完整操作系統,再在該系統上運行所需應用進程;
  • 容器:應用進程直接運行於宿主的內核,容器內沒有自己的內核,也不進行硬件虛擬

虛擬機和docker架構

3 構成

Docker中的三個重要構成:Image(鏡像),Container(容器),Repository(倉儲)。Image相當於OOP中的類,Container相對於類實例,Repository是存放位置。

3.1 image:是一個隻讀模板,帶有創建Docker容器的說明。

通常一個鏡像是基於另一個鏡像,並進行一些額外的拓展自定義。例如,用戶可以構建一個基於ubuntu映像的映像,並安裝Apache web服務器、應用程序以及所需的配置信息。也就是說,鏡像是一個特殊的文件系統,除瞭提供容器運行時所需的程序、庫、資源、配置等文件外,還包含瞭一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。

操作系統分為內核和用戶空間,Linux內核啟動後,會掛載root文件系統為其提供用戶空間支持。而Docker鏡像就相當於是一個root文件系統,這個文件系統裡面包含可以運行在 Linux 內核的程序以及相應的數據。可以創建自己的鏡像,也可以隻使用他人創建並在倉庫中發佈的鏡像。

要構建自己的鏡像,可以創建一個Dockerfile定義創建映像和運行映像所需的步驟。Dockerfile中的每個指令都會在映像中創建一個層。當更改Dockerfile並重建圖像時,隻會重建那些已更改的層。

3.2 Container:鏡像運行時的實例

類似運行起來的虛擬機,裡面運行著用戶的的應用程序。通過一個鏡像可以創建許多個互不影響的Container容器。Docker 鏡像類似 Linux 的Root FileSystem,通過鏡像啟動一個容器。一個鏡像就是一個可執行的包,其中包括運行應用程序所需要的代碼、運行時、庫、環境變量和配置文件等。

容器的實質是進程,但與直接在宿主執行的進程不同,容器進程運行於獨立的命名空間。容器存儲層的生存周期和容器一樣,皮之不存毛將焉附,容器消亡時,容器存儲層也隨之消亡。3.3 Repository:集中存放鏡像文件的地方

鏡像構建完成後,可以在當前宿主上運行,但是如果需要在其它服務器上使用這個鏡像,就需要一個類似Git倉庫那樣的集中存儲、分發鏡像的服務,Docker Registry就是這樣的服務。

一個Docker Registry中可以包含多個倉庫,每個倉庫可以包含多個Tag,每個Tag對應一個鏡像。鏡像倉庫是Docker用來集中存放鏡像文件的地方,類似於之前常用的代碼倉庫。

通常一個倉庫會包含同一個軟件不同版本的鏡像,而標簽就常用於對應該軟件的各個版本 。可以通過<倉庫名>:<標簽>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以latest作為默認標簽。

4 常用命令

4.1 docker 進程

docer 進程啟動、停止、重啟等三種 常見操作

service docker start # 啟動docker
service docker stop # 關機docker
service docker restart # 重啟docker

赞(0)