docker overview
docker是一個可以開發、傳輸和運行程序的開放平臺。Docker讓我們可以將應用程序從基礎架構中拆分出來,這樣我們就可以快速的分發我們的軟件。使用Docker,可以像管理應用程序一樣去管理基礎設施。利用Docker的方法學快速的去傳輸、測試和部署代碼,我們能明顯縮短代碼的編寫到部署上線的時間。也就是說,Docker將應用程序和底層基礎設施結偶,可以明顯加快應用程序的迭代速度,這一點對于業務發展迅速的互聯網公司十分重要。
Docker平臺
Docker為我們提供在一種被稱為容器這一相對隔離程度較低的環境中打包和運行應用程序的能力。隔離性和安全性允許我們可以在一臺主機上同時運行多個容器。容器是輕量級的,因為他們不需要像虛擬機一樣引入hypervisor的額外性能消耗,而是直接運行在主機的內核里面。這意味著比起使用虛擬機,我們可以在一臺宿主機上運行更多的容器,我們甚至可以在虛擬機上運行Docker容器。
Docker提供工具和平臺來管理容器的生命周期:
- 使用容器來開發應用程序和對應的依賴;
- 容器成為應用程序分發和測試的單元;
- 當一切就緒后,將應用程序部署到生產環境,作為一個容器或者被編排的服務。無論你的生產環境是本地數據中心、云環境或者兩者的混合,這些容器運行效果是一致的;
Docker引擎
docker引擎是個client-server的應用,包含如下組件:
- dockerd守護進程,作為docker server;
- REST API:指定了和dockerd進程如何交互以及能執行哪些指令;
- docker CLI client:docker的命令行客戶端
CLI通過腳本或者直接的CLI命令使用docker REST API來控制或者和Docker守護進程交互。
一些其他的Docker應用使用底層的API和CLI。
守護進程負責創建和管理docker對象:
- image
- container
- networks
- volums
Docker的用處
快速持續分發應用。
Docker通過允許開發者使用本地容器來在標準化環境中進行開發,從而使得應用程序開發生命周期流程化。容器很好的支持了持續集成和持續分發。
考慮下面的場景:
- 開發者本地編寫代碼,使用Docker容器將代碼分享給同事;
- 他們使用Docker將應用推送到測試環境,然后執行自動和手動測試;
- 當開發者發現 bugs的時候,他們在開發環境修復bug,然后再一次將其部署到測試環境進行測試驗證;
- 當測試完畢以后,使得fix線上生效,僅僅需要將被更新的鏡像推送到生產環境即可;
響應式開發和伸縮
Docker給予容器的平臺允許高度可移植的工作流。Docker容器能運行在開發者的筆記本,在物理或者虛擬機上,在云環境中,或者在這些環境的混合環境中。
在相同的硬件上運行更多的工作流
Docker是輕量級和快速的。它提供一個可行的、經濟的替代給予hypervisor虛擬機的方案,因此你能使用計算機資源更多的來完成業務目標。Docker完美支持高密度環境,對于中小型開發,你可以使用較少的資源做更多的事情。
Docker架構
Docker架構圖:
- Client:docker client
- Docker Host:物理機
- Registry:docker鏡像倉庫
- Docker daemon:
dockerd監聽Docker API的請求,然后管理類似鏡像、容器、網絡和卷。一個守護進程也能和其他守護進程進行通信從而來管理Docker服務。 - Docker client
docker client docker是一些docker用戶和Docker交互的主要方式。當你使用類似docker run的命令,客戶端將這些命令發送給dockerd守護進程,由dockerd負責解釋執行。docker使用Docker API。Docker client也能和多個守護進程通信。 - Docker registries
docker registry存儲Docker鏡像。Docker Hub和Docker Cloud是公開的registry,任何人都能訪問 使用它。Docker默認配置是去Docker Hub上搜索鏡像。你能搭建自己的私有docker registry。
當你使用docker pull或者docker run命令的時候,被需要的鏡像將會從你配置的resigtry中拉取下來。當你使用docker push的時候,你的鏡像會被推送到你配置的registry。
Docker store運行你購買和售賣Docker鏡像或者免費發布他們。例如,你可以購買一個包含軟件提供商提供的服務或程序的鏡像,然后使用這個鏡像來將程序部署到你的測試 預發和生產環境。對于更新,你僅僅需要拉取一個新版本的鏡像,然后重新部署這個容器即可。
Docker objects
當你使用docker的時候,你正在創建和使用鏡像、容器、網路、卷、插件和其他對象。下面是對一些對象的簡要介紹。
- images
鏡像是一個含有創建一個Docker容器指令的只讀模版。通常,一個鏡像是基于另一個鏡像加上一些定制化。例如,你也許基于Ubuntu鏡像構建了一個新的鏡像,但是這個新的鏡像中安裝了Apache Web Server和你的應用程序,同時還有一些程序運行的配置細節。
你可以創建你自己的鏡像或者使用別人創建的發布在registry商現成的鏡像。為了構建你自己的鏡像,你性能使用簡單語法創建一個Dockerfile,這個文件定義了創建一個鏡像和運行它的必要步驟。在Dockerfile中的每個指令都會在鏡像中創建一層。當你改變Dockerfile然后重新構建鏡像的時候,僅僅那些發生實際改變的層才會被重新構建。這就是使得鏡像相對于其他虛擬化技術更加輕量快速的原因之一。
- containers
一個容器是鏡像的可運行的實例。你能使用Docker API或者CLI創建、啟動、停止、移動或者刪除一個容器。你也能將一個容器鏈接到一個或多個網絡,給容器附加存儲,甚至基于當前的狀態構建新的鏡像。
默認的,容器與容器之間、容器與宿主機之間還是相對隔離的很好的。你可以控制一個容器的網絡、存儲或者其他底層子系統是如何同其他容器或者宿主機隔離的。
當你創建或者啟動一個容器的時候,鏡像和一些你提供的配置就定義一個容器。當一個容器被移除的時候,任何沒有進行持久存儲的狀態改變都將丟失。
docker run命令的例子:
下面的命令運行一個ubuntu容器,交互式的將本地的命令行會話附加到容器,然后執行/bin/bash命令。
docker run -i -t ubuntu /bin/bash當你運行這個命令的時候,會發生下面的事情:
- service
Service允許你能跨多個Docker守護進程進行容器的伸縮,這些工作起來就像是一個擁有多個manager和worker的群體swarm。每個swarm的成員就是一個Docker守護進程,這些守護進程使用Dokcer API進行通信。一個服務運行你定一個期望的狀態,例如服務熱備份的數量。默認的,服務是跨所有work節點進行負載均衡的。對于服務消費者,Docker服務好像是一個應用。從Docker1.12開始,Docker引擎支持swarm模式。
底層技術
Docker使用Linux提供的namespace功能提供隔離的工作空間,這個叫做容器。當創建一個docker容器的時候,docker會為這個容器創建一系列的namespace。
namespace提供一個隔離層。運行在不同的namespace的容器,每一項訪問都限制在自己對應的namespace里面。
Docker引擎在linux上面使用下面的namspace:
- pid 進程隔離
- net:管理網絡接口
- ipc:管理ipc資源的訪問
- mnt:管理文件系統掛載點
- uts:隔離內核和版本標志(uts:unix timesharing system)
在Linux上的Docker引擎也依賴control groups簡稱cgroup技術。一個cgroup限制一個應用使用指定的資源集合。cgroup允許docker引擎讓容器共享硬件資源,同時施加一些限制和約束。例如,我們可以對某個容器限制其可用的內存大小。
Union File Systems通過創建不同的層,來達到非常輕量快速的目的。Docker引擎使用UFS為容器提供構建塊。Docker Image的分層就是利用UnionFS來實現的。
Docker將namespace、cgroup、ufs結合在一起成為了一個wrapper,格式為libcontainer。
轉載于:https://www.cnblogs.com/Spground/p/9625687.html
總結
以上是生活随笔為你收集整理的docker overview的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于windows10设置环境变量的问题
- 下一篇: 【WPF】右键菜单ContextMenu