docker是docker.lnc公司開源的一個基於LXC技術之上構建的container容器引(openstack是基於KVM),源代碼託管在GitHub上,基於Go語言並遵從Apache2.0協議開源。
docker是通過內核(linux內核)虛擬化技術(namespaces及cgroups等)(KVM是基於硬件虛擬化技術來實現的)來提供容器的資源隔離與安全保障等。由於Docker通過操作系統層的虛擬化實現隔離,所以docker容器在運行時,不需要類似虛擬機(VM)額外的系統開銷,提高資源利用率。
docker的組成:docker是一個C/S結構的(C/S就是客戶端/服務器,B/S就是瀏覽器/服務器模式)
Docker Client
Dockerserver
docker的組件:
1,鏡像(p_w_picpath)
2,容器(container)
3,倉庫(repository)
Docker鏡像
Docker鏡像( Image) 就是一個只讀的模板。
例如:一個鏡像可以包含一個完整的ubuntu 操作系統環境,裏面僅安裝了 Apache
或用戶需要的其它應用程序。
鏡像可以用來創建Docker 容器。
Docker提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以
直接從其他人那裏下載一個已經做好的鏡像來直接使用。
Docker 容器
Docker利用容器( Container) 來運行應用。
容器是從鏡像創建的運行實例。它可以被啓動、開始、停止、刪除。每個容器都是
相互隔離的、保證安全的平臺。
可以把容器看做是一個簡易版的Linux 環境( 包括root用戶權限、進程空間、用戶
空間和網絡空間等)和運行在其中的應用程序。
*注:鏡像是隻讀的,容器在啓動的時候創建一層可寫層作爲最上層。
Docker 倉庫
倉庫(Repository) 是集中存放鏡像文件的場所。有時候會把倉庫和倉庫註冊服務
器(Registry) 混爲一談,並不嚴格區分。實際上,倉庫註冊服務器上往往存放着
多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag) 。
倉庫分爲公開倉庫(Public) 和私有倉庫( Private) 兩種形式。
最大的公開倉庫是Docker Hub,存放了數量龐大的鏡像供用戶下載。
國內的公開倉庫包括時速雲 、網易雲 等,可以提供大陸用戶更穩定快速的訪問。
當然,用戶也可以在本地網絡內創建一個私有倉庫(參考本文“私有倉庫”部分) 。
當用戶創建了自己的鏡像之後就可以使用push 命令將它上傳到公有或者私有倉
庫,這樣下次在另外一臺機器上使用這個鏡像時候,只需要從倉庫上pull 下來
就可以了。
*注:Docker倉庫的概念跟 Git 類似,註冊服務器可以理解爲 GitHub 這樣的託管服
務
容器與虛擬化的區別:containersvs VMS
Docker和傳統虛擬化方式的不同之處,可見容器是在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,而傳統方式則是在硬件層面實現。
VM:首先需要有一個server(物理機)上面需要裝一個操作系統host OS,再上去需要起一個虛擬機管理器(比如是KVM,XEN等),然後在上面跑一個虛擬機guest OS,在虛擬機上就可以跑各種應用了。
containers:需要有一個server(物理機)上面需要裝一個操作系統host OS,然後他是基於docker的一個引擎來創建各個docker,是隔離起來的
docker與openstack的對比:
docker能幹什麼?
1,簡化配置。(環境不一致配置就不一致:測試環境中我們裝了python的依賴,生產環境沒有裝就會出現上線失敗)(openstack,saltstack也能做)
2,代碼流水線管理(開發寫一個代碼需要開發環境,測試者測試,然後上線)保證所有環境一致(saltstack也能做,保證所有環境都是saltstack)
3,開發效率(新員工入職的時候新機器需要配置很多環境,不同業務線的給打包不同的鏡像)(openstack起個虛擬機更快,每人一臺虛擬機)docker起在本地可能一斷電就沒了
4,應用隔離(虛擬機是完全隔離,docker只是一個隔離(openstack起KVM需要佔用資源,docker不用))
5,服務器整合(一個服務器可以跑多個docker來提高服務器的利用率)
6,調試能力(進入docker調試比較難,虛擬機就方面很多)
7,多租戶(opensatck本來設置就是多租戶,每個project就是一個租戶)
8,快速部署(體積小,快)(微信春晚搶紅包,一秒鐘啓動上千個docker)
用docker的理由:
1,技術儲備。2,符合當前業務需求,3,速度快
docker的壞處:docker用的是S/C架構,一當服務器掛了,所有的docker都會停止運行。
centos7下載docker :yum installdocker -y
啓動:systemctlstart docker