docker基礎
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
一個完整的Docker有以下幾個部分組成:
-
docker Client客戶端
-
Docker Daemon守護進程
-
Docker Image鏡像
-
Docker Container容器
Docker相關的核心技術之cgroups:
Linux系統中經常有個需求就是希望能限制某個或者某些進程進行資源分配。於是就出現了cgroups的概念,cgroups就是control group,在這個group中,有分配好的特定比例的cpu時間,IO時間,可用內存大小等。cgroups是將任意進程進行分組化管理的Linux內核功能。最初由google工程師提出,後來被整合進Linux內核中
cgroups中的重要概念是“子系統”,也就是資源控制器,每種子系統就是一個資源的分配器,比如cpu子系統是控制cpu時間分配。首先掛載子系統,然後纔有control group的。比如先掛載memory子系統,然後在memory子系統中創建了一個cgroups節點,在這個節點中,將需要控制的進程id寫入,並且將控制的屬性寫入,這就是完成了內存的資源限制
cgroups被Linux內核支持,有得天獨厚的性能優勢,發展勢頭迅猛,在很多領域可以取代虛擬化技術分割資源,cgroups默認有諸多資源組,可以限制幾乎所有服務器上的資源:cpu、mem、iops、iobangwide、net、device、acess等
Docker相關的核心技術之LXC:
LXC是Linux containers的簡稱,是一種基於容器的操作系統層級的虛擬化技術。藉助於namespace的隔離機制和cgroups限額功能,LXC提供了一套統一的API和工具來建立和管理container。LXC跟其他操作系統層級的虛擬化技術相比,最大的優勢在於LXC被整合進了Linux內核,不用單獨爲內核打補丁
LXC旨在提供一個共享kernel的OS級虛擬化方法,在執行對不用重複加載kernel,且container的kernel與host共享,因此可以大大加快container的啓動過程,並顯著減少內存消耗,容器在提供隔離的同時,還通過共享這些資源節省開銷,這意味着容器比真正的虛擬化的開銷要小得多,在實際測試中,基於LXC的虛擬化方法的IO和CPU性能幾乎接近baremetal的性能
顯然容器所使用的這種類型的隔離總的來說非常強大,然後不是像運行在hypervisor上的虛擬化那麼強壯仍具有爭議性。如果內核停止,那麼所有的容器就會停止運行
性能方面:LXC>KVM>XEN(由於LXC使用cgroup機制,其性能損壞基本爲0。)
內存利用率:LXC>KVM>XEN(LXC只能虛擬化linux。)
隔離程度:XEN>KVM>LXC(由於LXC共用內核,內存利用率最高;其他兩種方案每個虛機都需要單獨的操作系統佔用一部分內存空間。)
Docker相關的核心技術之AUFS:
AUFS是一個能透明覆蓋一個或多個現有文件系統的層級文件系統,支持將不同目錄掛載到同一個虛擬文件系統下,可以把不同的目錄聯合在一起,組成一個單一的目錄。這種是一種虛擬的文件系統,文件系統不用格式化,直接掛載即可。
Docker一直在用AUFS作爲容器的文件系統。當一個進程需要修改一個文件時,AUFS創建該文件的一個副本。AUFS可以把多層合併成文件系統的單層表示。這個過程稱爲寫入複製(copy on write)
AUFS允許Docker把某些鏡像作爲容器的基礎。例如,你可能有一個可以作爲爲很多不同容器的基礎的centos系統鏡像。多虧AUFS,只要一個centos鏡像的副本就夠了,這樣既節省了存儲和內存,也保證更快速的容器部署。
使用AUFS的另一個好處是Docker的版本容器鏡像能力。每個新版本都是一個與之版本的簡單差異改動,有效的保持鏡像文件最小化。但這也意味着你總是要有一個記錄該容器從一個版本到另一個版本改動的審計跟蹤。
mac 上docker安裝
使用 Homebrew 安裝
macOS 我們可以使用 Homebrew 來安裝 Docker。
Homebrew 的 Cask 已經支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來進行安裝:
$ brew cask install docker ==> Creating Caskroom at /usr/local/Caskroom ==> We'll set permissions properly so we won't need sudo in the future Password: # 輸入 macOS 密碼 ==> Satisfying dependencies ==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg ######################################################################## 100.0% ==> Verifying checksum for Cask docker ==> Installing Cask docker ==> Moving App 'Docker.app' to '/Applications/Docker.app'. 🍺 docker was successfully installed!
在載入 Docker app 後,點擊 Next,可能會詢問你的 macOS 登陸密碼,你輸入即可。之後會彈出一個 Docker 運行的提示窗口,狀態欄上也有有個小鯨魚的圖標()。
手動下載安裝
如果需要手動下載,請點擊以下鏈接下載 Stable 或 Edge 版本的 Docker for Mac。
如同 macOS 其它軟件一樣,安裝也非常簡單,雙擊下載的 .dmg 文件,然後將鯨魚圖標拖拽到 Application 文件夾即可。
從應用中找到 Docker 圖標並點擊運行。可能會詢問 macOS 的登陸密碼,輸入即可。
點擊頂部狀態欄中的鯨魚圖標會彈出操作菜單。
第一次點擊圖標,可能會看到這個安裝成功的界面,點擊 "Got it!" 可以關閉這個窗口。
啓動終端後,通過命令可以檢查安裝後的 Docker 版本。
$ docker --version Docker version 17.09.1-ce, build 19e2cf6
鏡像加速
鑑於國內網絡問題,後續拉取 Docker 鏡像十分緩慢,我們可以需要配置加速器來解決,我使用的是網易的鏡像地址:http://hub-mirror.c.163.com。
在任務欄點擊 Docker for mac 應用圖標 -> Perferences... -> Daemon -> Registry mirrors。在列表中填寫加速器地址即可。修改完成之後,點擊 Apply & Restart 按鈕,Docker 就會重啓並應用配置的鏡像地址了。
之後我們可以通過 docker info 來查看是否配置成功。
$ docker info ... Registry Mirrors: http://hub-mirror.c.163.com Live Restore Enabled: false
linux下docker安裝:
安裝docker,採用添加docker的repo:
1、安裝必要的包支持
# yum install -y yum-utils device-mapper-persistent-data lvm2
2、配置添加docker穩定版本倉庫
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3、安裝docker-ce
# yum install docker-ce
安裝docker-ce也就一個核心包docker-ce,外加一個依賴包
如果利用上述添加的docker源下載安裝速度緩慢,可以將docker-ce的包下載到本地進行安裝
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
如果安裝的系統存在之前的docker舊的版本,需要先將舊版本低額docker的包remove掉,然後刪掉數據目錄,默認的數據目錄/var/lib/docker
啓動docker服務:
# systemctl start docker
查看啓動過程日誌:
# tail -f /var/log/messages |grep docker
校驗docker是否安裝成功,執行hello-world鏡像
# docker run hello-world
這條命令的執行過程:
1、先從本地查看是否有這個鏡像
2、如果在本地沒有這個鏡像,那麼就從docker-hub上面進行拉取,並啓動container
還有一種安裝方式採用腳本安裝:
# curl -fsSL get.docker.com -o get-docker.sh # sh get-docker.sh(詳見官方文檔)
將docker服務配置開機啓動:
# systemctl enable docker
卸載docker:
# yum remove docker-ce # rm -rf /var/lib/docker
參考文章: