1. 程式人生 > >Docker 系列一(概念原理和安裝)

Docker 系列一(概念原理和安裝)

一、概念原理

    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。—— 百度百科

    之前一直有一個誤區,老聽人說 Docker 是一個容器,應用程式打包好映象,然後在這個容器中執行,以此達到 "一次封裝,處處執行"(Build,Ship and Run Any App,Anywhere)的目的。其實不然,Docker 只是一個應用程式引擎(引擎的基礎是Linux自帶的容器(Linux Containers,LXC)技術),然後每一個程序都是一個容器 —— 運行於 Docker引擎上的容器。

    Docker 在執行時分為 Docker 引擎(也就是服務端守護程序)和客戶端工具。Docker 的引擎提供了一組 REST API,被稱為 Docker Remote API,而如 docker 命令這樣的客戶端工具,則是通過這組 API 與 Docker 引擎互動,從而完成各種功能。因此,雖然表面上我們好像是在本機執行各種 docker 功能,但實際上,一切都是使用的遠端呼叫形式在服務端(Docker 引擎)完成。也因為這種 C/S 設計,讓我們操作遠端伺服器的 Docker 引擎變得輕而易舉。

    Client 和 Server可以執行在同一臺叢集,也可以通過跨主機實現遠端通訊。

     傳統的虛擬機器技術和容器技術的區別?

    傳統虛擬機器技術是虛擬出一套硬體後(記憶體分一點,磁碟分一點),在宿主上執行一個完整作業系統,在該系統上再執行所需要的應用程序;而容器內沒有自己的核心,而且也沒有進行硬體虛擬,應用程序直接運行於宿主的核心,而且程序和程序之間是相隔離的,是一個作業系統級別的虛擬化技術。

    Docker 的優勢:

1、更高效的利用系統資源(不需要進行硬體虛擬以及執行完整作業系統等額外開銷,一個相同配置的主機,往往可以執行更多數量的應用。單機支援上千個容器)
2、更快速的啟動時間
3、一致的執行環境
4、持續交付和部署
5、更輕鬆的遷移
6、更輕鬆的維護和擴充套件

    Docker 包括三個基本概念:

映象:是一個特殊的檔案系統,除了提供容器執行時所需的程式、庫、資源、配置等檔案外,還包含了一些為執行時準備的一些配置引數(如匿名卷、環境變數、使用者等) 。映象不包含任何動態資料,其內容在構建之後也不會被改變,任何使用者程式都可以成為映象的一部分。

          映象=作業系統+軟體執行環境+使用者程式。

容器:映象和容器的關係,就像是面向物件程式設計中類和例項的關係,映象是靜態的定義,容器是映象執行時的實體。容器可以被建立、啟動、停止、刪除、暫停等。

          容器的實質是程序,但與直接在宿主執行的程序不同,容器程序運行於屬於自己的獨立名稱空間。容器內的程序是執行在一個隔離的環境中,使用起來,就好像是在一個獨立於宿主的系統下操作一樣。

          每一個容器執行時,是以映象為基礎層,在其上建立一個當前容器的儲存層,容器儲存層的的生命週期和容器一樣,容器消亡時,容器儲存層也隨之消亡。按照 Docker 的最佳實踐,容器不應該向儲存層寫入任何資料,容器儲存層要保持無狀態變化。所有的檔案寫入操作,都應該使用 資料卷(Volume) 、或者繫結宿主目錄,在這些位置的讀寫會跳過容器儲存層,直接對宿主(或網路儲存) 發生讀寫,其效能和穩定性更高。

Docker Register:一個集中的儲存、分發映象的服務,一個Docker Register 中可以包含多個倉庫(打包好的軟體映象);每個倉庫可以包含多個標籤(一個軟體的多個版本映象);

二、安裝

    下面僅介紹 CentOS 安裝 Docker CE,支援 64 位版本 CentOS 7,並且要求核心版本不低於 3.10。

    1、核心版本

    2、系統版本

    3、使用以下命令解除安裝舊版本的 Docker 

sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

    4、安裝依賴包並新增國內源

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
$ sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

    5、安裝 Docker CE

$ sudo yum makecache fast
$ sudo yum -y install docker-ce

    6、啟動 Docker

$ sudo systemctl enable docker
$ sudo systemctl start docker

    7、建立 docker 使用者組

    預設情況下,docker 命令會使用 Unix socket 與 Docker 引擎通訊。而只有 root 使用者和 docker 組的使用者才可以訪問 Docker 引擎的 Unix socket。完成前面的步驟,會自動建立 docker 使用者組。

    建立 docker 使用者組:

$ sudo groupadd docker

    新增使用者到 docker 使用者組:

$ sudo usermod -aG docker $USER

    8、測試是否安裝成功

    退出當前終端並重新登陸(必須),輸入如下命令驗證是否成功:

    9、安裝映象加速

    修改 /etc/docker/daemon.json 檔案,寫入以下內容:

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

    重啟服務:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker