寫在前面docker
工做緣由須要接觸很火的Docker,因此開始這個系列的筆記。初步制定的學習教材是《第一本Docker書》,輔以一些網上材料,因此筆記先以此書爲主要內容。數據庫
1.0 容器的簡介安全
容器與管理程序虛擬化的不一樣點:服務器
- 管理程序虛擬化經過中間層將一臺或多臺獨立的機器虛擬運行於物理硬件之上;
- 容器則是直接運行在操做系統內核之上的用戶空間。所以,容器虛擬化也被稱爲「操做系統級虛擬化」。
因爲客居於操做系統,容器只能運行與底層宿主機相同或類似的操做系統。架構
和傳統的虛擬化以及半虛擬化相比,容器運行不須要模擬層和管理層,而是使用操做系統的系統調用接口,下降了開銷。運維
固然容器也有一些侷限性,好比它被一些人認爲是不安全的、它的技術比較複雜、不易安裝和自動化。分佈式
1.1 Docker簡介工具
Docker是一個可以把開發的應用程序自動部署到容器的開源引擎。它的目標是提供一個輕量、快速的環境,可以運行開發者的程序,並方便高效的將程序從開發者的筆記本部署到測試環境,而後再部署到生產環境。性能
Docker但願爲程序開發提供如下功能:學習
- 提供一個簡單、輕量的建模方式。用幾分鐘能夠把本身的程序Docker化,並用「寫時複製」模型,使修改應用程序也很是迅速。建立容器來運行應用程序也很快速,而且一臺宿主機能夠運行不少容器,使用戶能夠儘量充分的利用系統資源。
- 職責的邏輯分離。使用Docker,開發人員只須要關係容器中運行的應用程序,而運維人員只須要關係如何管理容器。同時增強開發人員寫代碼的開發環境與應用程序要部署的生產環境的一致性。
- 快速、高效的開發生命週期。Docker的目的之一就是縮短代碼從開發、測試到部署、上線運行的週期,讓應用程序具備可移植性、易於構建,並易於協做。
- 鼓勵使用面向服務的架構。Docker推薦單個容器只運行一個應用程序或進程,這樣就能造成一個分佈式的應用程序模型。在這種模型下,應用程序或服務均可以表示爲一系列內部互聯的容器,從而使分佈式部署應用程序,擴展或調試應用程序都變得簡單。
1.2 Docker組件
- Docker客戶端和服務器。Docker客戶端只需向Docker服務器或守護進程發出請求,服務器或守護進程完成全部工做並返回結果。Docker提供了一個命令行工具docker以及一套RESTful API。能夠在同一臺宿主機上運行守護進程和客戶端,也能夠從本地的Docker客戶端鏈接到運行在另外一臺宿主機上的遠程Docker守護進程。
- Docker鏡像。鏡像是構建Docker世紀的基石。用戶基於鏡像來運行本身的容器。鏡像也是Docker生命週期中的「構建」部分。鏡像是基於Union文件系統的一種層式的結構,由一系列指令一步步構建出來。也能夠把鏡像當作容器的「源代碼」。鏡像體積小,便攜,易於分享、存儲和更新。可使用已有的鏡像,也能夠構建本身的鏡像。
- Registry。Docker用Registry來保存用戶構建的鏡像。Registry分爲公共和私有兩種。Docker公司運營的公共Registry叫作Docker Hub。用戶能夠在其上註冊帳號,分享並保存本身的鏡像。Docker Hub上的鏡像包括Nginx Web Server的鏡像、MySQL數據庫的鏡像等等。也能夠假設本身的私有Registry。
- 容器。Docker能夠幫助構建和部署容器,只要把本身的應用程序或者服務打包放進容器便可。容器是基於鏡像啓動起來的,容器中能夠運行一個或多個進程。能夠認爲,鏡像是Docker生命週期中的構建或者打包階段,而容器使啓動或執行階段。總結起來,Docker容器就是:一個鏡像格式,一系列標準的操做和一個執行環境。
1.3 咱們能用Docker作什麼
- 加速本地開發和構建流程,使其更加高效、更加輕量化。本地開發人員能夠構建、運行並分享Docker容器。容器能夠在開發環境中構建,而後輕鬆的提交到測試環境中,並最終進入生產環境;
- 可以讓獨立服務或者應用程序在不一樣的環境中獲得相同的運行結果。這一點在面向服務的架構和重度依賴微型服務的部署中尤爲實用;
- 用Docker建立隔離的環境來進行測試。例如,用Jenkins CI這樣的持續集成工具啓動一個用於測試的容器;
- Docker可讓開發者先在本機上構建一個複雜的程序或者架構來進行測試,而不是開始就在生產環境部署、測試;
- 構建一個多用戶的平臺即服務基礎設施;
- 爲開發、測試提供一個輕量級的獨立沙盒環境,或者將獨立的沙盒環境用於技術教學;
- 提供軟件即服務應用程序,如Memcached即服務;
- 高性能、超大規模的宿主機部署。