一、概念原理
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、安裝依賴包並添加 Docker 源
$ 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 文章:Docker 入門教程
參考資料:《Docker — 從入門到實踐》