Docker簡介
Docker 是 Docker.Inc 公司開源的一個基於 LXC技術之上構建的Container容器引擎, 源代碼托管在 GitHub 上, 基於Go語言並遵從Apache2.0協議開源。
Docker是通過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離與安全保障等。由於Docker通過操作系統層的虛擬化實現隔離,所以Docker容器在運行時,不需要類似虛擬機(VM)額外的操作系統開銷,提高資源利用率。
三大理念:Build(構建)、Ship(運輸)、Run(運行)
Docker組成:Docker Client、Docker Server
Docker組件:Image(鏡像)、Container(容器)、Repository(倉庫)
- 鏡像介紹:類似於虛擬機,作用和虛擬機是一樣的,唯獨是組成部分會有些區別。簡單的說如果我們想啟動一個容器就必須要有鏡像。
- 容器介紹: docker是通過容器來運行業務的,就像運行一個kvm虛擬機是一樣的。容器其實就是從鏡像創建的一個實例。我們可以對容器進行增刪改查,容器之間也是相互隔離的。和虛擬機最大的區別就是一個是虛擬的一個是隔離的。 缺點:不會像虛擬機那樣隔離的那么徹底,我們可以將容器理解為簡化版的linux,有進程運行在里面。
- 倉庫介紹: 根據docker的三大理念構建 運輸 運行,我們就需要一個倉庫來存放鏡像 。簡單的說:我們將鏡像創建完成就需要存放到倉庫里面,進行集中式的管理。倉庫這點類似於github,docker也有一個dockerhub,他也是一個公共對外的倉庫。
虛擬機和docker的區別
簡單解釋,VMware運行在操作系統上,而docker是直接運行在應用上。所以docker無法提供一個像VMware那樣完全的隔離,甚至到很多地方都沒有進行隔離,比如說用戶空間。
Docker與OpenStack區別
Docker能干什么?
1、簡化配置
這是Docker公司宣傳的Docker的主要使用場景。虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平 台(軟件、系統),Docker在降低額外開銷的情況下提供了同樣的功能。它能讓你將運行環境和配置放在代碼中然后部署,同一個Docker的配置可以在 不同的環境中使用,這樣就降低了硬件要求和應用環境之間耦合度。
2、代碼流水線(Code Pipeline)管理
前一個場景對於管理代碼的流水線起到了很大的幫助。代碼從開發者的機器到最終在生產環境上的部署,需要經過很多的中間環境。而每一個中間環境都有自己微小的差別,Docker給應用提供了一個從開發到上線均一致的環境,讓代碼的流水線變得簡單不少。
3、提高開發效率
這就帶來了一些額外的好處:Docker能提升開發者的開發效率。如果你想看一個詳細一點的例子,可以參考Aater在DevOpsDays Austin 2014 大會或者是DockerCon上的演講。
不同的開發環境中,我們都想把兩件事做好。一是我們想讓開發環境盡量貼近生產環境,二是我們想快速搭建開發環境。
理想狀態中,要達到第一個目標,我們需要將每一個服務都跑在獨立的虛擬機中以便監控生產環境中服務的運行狀態。然而,我們卻不想每次都需要網絡連接,每次重新編譯的時候遠程連接上去特別麻煩。這就是Docker做的特別好的地方,開發環境的機器通常內存比較小,之前使用虛擬的時候,我們經常需要為開發環境的機器加內存,而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。
4、隔離應用
有很多種原因會讓你選擇在一個機器上運行不同的應用,比如之前提到的提高開發效率的場景等
5、整合服務器
正如通過虛擬機來整合多個應用,Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本。由於沒有多個操作系統的內存占用,以及能在多個實例之間共享沒有使用的內存,Docker可以比虛擬機提供更好的服務器整合解決方案 。
6、調試能力
Docker提供了很多的工具,這些工具不一定只是針對容器,但是卻適用於容器。它們提供了很多的功能,包括可以為容器設置檢查點、設置版本和查看兩個容器之間的差別,這些特性可以幫助調試Bug。你可以在《Docker拯救世界》的文章中找到這一點的例證。
7、多租戶環境
另外一個Docker有意思的使用場景是在多租戶的應用中,它可以避免關鍵應用的重寫。我們一個特別的關於這個場景的 例子是為IoT(譯者注:物聯網)的應用開發一個快速、易用的多租戶環境。這種多租戶的基本代碼非常復雜,很難處理,重新規划這樣一個應用不但消耗時間, 也浪費金錢。
使用Docker,可以為每一個租戶的應用層的多個實例創建隔離的環境,這不僅簡單而且成本低廉,當然這一切得益於Docker環境的啟動速度和其高效的diff命令。
8、快速部署
在虛擬機之前,引入新的硬件資源需要消耗幾天的時間。Docker的虛擬化技術將這個時間降到了幾分鍾,Docker只是創建一個容器進程而無需啟動操作系統,這個過程只需要秒級的時間。這正是Google和Facebook都看重的特性。
你可以在數據中心創建銷毀資源而無需擔心重新啟動帶來的開銷。通常數據中心的資源利用率只有30%,通過使用Docker並進行有效的資源分配可以提高資源的利用率。
小結: 一句話說明docker的本質就是低開銷(系統文件、內存共用)的虛擬機
Docker改變了什么?
面向產品:產品交付
面向開發:簡化環境配置
面向測試:多版本測試
面向運維:環境一致
面向架構:自動化擴容(微服務)
Docker的性質
Docker的容器,很多人下載一個鏡像,然后跑起來一個容器,就想進容器里看一看究竟。各位看官,很明確的告訴你們,你這個想法本身就是錯誤的。你跑起來一個容器,容器的進程是直接運行在宿主機內核上的,和你在宿主機上跑一個進程是一樣的,只是容器的userland不同,容器的userland由容器的鏡像提供。
假設宿主機是centos的系統,但是你起了一個ubuntu的容器。ubuntu容器內部的進程調用的是centos的內核,而不會去調用ubuntu。而這點就和虛擬機有了本質的區別,虛擬機是虛擬環境,在現有的系統上去虛擬一個物理設備,再去虛擬一個內核,進程是跑在虛擬機的系統上的,虛擬機的進程和你宿主機是沒有任何聯系的。
所以你也可以這樣理解,docker容器,其實就是一個進程,既然它只是一個進程,不是操作系統,也不是虛擬機。
環境
[root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@linux-node1 ~]# uname -r 3.10.0-327.28.3.el7.x86_64
安裝社區版
centos 7 官方介紹 https://docs.docker.com/engine/installation/linux/centos/
1、清除環境
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
2、依賴安裝
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
3、設置倉庫
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
4、yum安裝
sudo yum install docker-ce
5、開機啟動設置
systemctl enable docker.service
6、啟動docker
systemctl start docker
docker playground
https://labs.play-with-docker.com