一、概念原理
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 中可以包含多個倉庫(打包好的軟體鏡像);每個倉庫可以包含多個标簽(一個軟體的多個版本鏡像);
tips:官方的鏡像庫
https://hub.docker.com/國内阿裡雲的鏡像庫
https://cr.console.aliyun.com/二、安裝
下面僅介紹 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
參考資料:
《Docker — 從入門到實踐》