1、容器技術
1.1 容器技術的歷史
一、在最開始,全部服務都時直接部署在物理機上的,具備以下缺點:git
- 部署很是慢
- 成本很是高
- 資源浪費
- 難於遷移和擴展
- 可能會被限定硬件廠商
二、以後出現虛擬化技術,虛擬機經過Hypervisor層實現資源的調度web
- 一個物理機能夠部署多個app
- 每一個app運行在一個虛擬機裏面
虛擬化的優勢:docker
- 資源池:一個物理機的資源分配到了不一樣的虛擬機裏
- 很容器擴展:容器增長物理機和虛擬機
- 很容易雲化:AWS,阿里雲等
虛擬化的侷限性:數據庫
- 每個虛擬機都是一個完整的操做系統,要給其分配資源。當虛擬機數量增多時,操做系統自己消耗的資源勢必增多!
三、容器技術的出現安全
什麼是容器技術?架構
- 對軟件和其依賴的標準化打包
- 應用之間相互隔離,效果略低於虛擬機之間的隔離
- 共享一個OS Kernel
- 能夠運行在不少主流操做系統上
容器和虛擬機的區別:app
容器解決了什麼問題?運維
- 提供app的打包,環境一致性的問題!!
- 解決了開發和運維之間的矛盾
容器技術的發展歷程:性能
2、Docker簡介
2.1 什麼是docker?
- Docker是容器技術的一種實現!
- Docker 是基於Go語言實現的開源項目,誕生於2013年初,最初的發起者dotClound公司,Docker天然開源後受到普遍關注;
- Docker項目目前已經加入Linux的基金會,遵循Apache2.0協議,所有開源代碼均在https://gitHub.com/docker/docker上;
- Linux的操做系統的支持:Redhat RHEL 6.5/CentOS 6.5往上的操做系統,Ubuntu14.04操做系統,都默認帶有docker的安裝包;
- 與Docker的合做方:Google的PaaS(platform as a Service)平臺及服務產品,微軟的雲平臺Azure,亞馬遜的AWS EC2 Container
- Docker 的主要目的:Build、Ship and Run Any APP Anywhere,即經過對應用組件的封裝(Packing)、分發(Dispatcher)、部署(Deployment) 、運行(Runtime) 等生命週期的管理,達到一次封裝處處運行;
- 組件能夠是一個web的應用,也能夠是一套數據庫,甚至是一個操做系統;
- Docker 基於Linux的多項開源技術提供了高效敏捷和輕量級的容器方案,而且支持多種主流平臺(Paas) 和本地系統上的部署。
2.2 docker與虛擬機比較
特性 |
容器 |
虛擬機 |
啓動速度 |
秒級 |
分鐘級 |
硬盤使用 |
通常MB |
通常GB |
性能 |
接近原生 |
相對弱於 |
系統支持 |
單機支持上千個容器 |
通常幾十個 |
隔離性 |
安全隔離 |
徹底隔離 |
2.3 docker的引擎
docker引擎是一個c/s結構的應用:ui
- Server是一個常駐進程;
- REST API 實現了client和server間的交互協議;
- CLI實現容器和鏡像的管理,爲用戶提供統一的操做界面。
2.4 docker的架構
Docker使用C/S架構,Client 經過接口與Server進程通訊實現容器的構建,運行和發佈。client和server能夠運行在同一臺集羣,也能夠經過跨主機實現遠程通訊。
2.5 docker的核心概念
鏡像是隻讀的,鏡像中包含須要運行的文件(提供容器運行時所需的程序、庫、資源、配置等文件,還包含了一些爲運行時準備的一些配置參數)。鏡像用來建立container,一個鏡像能夠運行多個container;鏡像能夠經過Dockerfile建立,也能夠從Docker hub/registry上下載。
Docker的運行組件,啓動一個鏡像就是一個容器,容器是一個隔離環境,多個容器之間不會相互影響,保證容器中的程序運行在一個相對安全的環境中。
從認識上來講,就好像軟件包上傳下載站,有各類軟件的不一樣版本被上傳供用戶下載,共享和管理Docker鏡像,官方地址爲:https://registry.hub.docker.com/
2.6 Docker底層核心技術
一、Namespaces
二、Control groups
三、Union file systems
參考文章:https://blog.csdn.net/huangjun0210/article/details/85680586#2_Docker_10