
[TOC]
**Docker**是一個開源的容器引擎,它輕巧,且易移植,“build once, configure once and run anywhere”。使用go語言開發,并遵從apache2.0協議。
## 一、 傳統軟件行業中存在的問題
* 開發、生產、測試環境不一致,開發環境下可用的服務挪到生產上不可用。
* 不同環境之間遷移成本太高,沒有統一的軟件部署封裝標準及封裝環境。
* 對于分布式軟件持續集成(測試、打包、發布、部署、管理)周期很長,難以自動化、工程化。
* 面臨瞬時用戶流量增大的場景,很難實現分布式應用服務實例的快速部署。

## 二、集裝箱與docker之間的關系
通常稱docker為軟件行業的集裝箱技術,那么docker和集裝箱有什么相似之處呢?
| 傳統行業集裝箱 | 軟件行業Docker |
| --- | --- |
| 裝載實體貨物 | 裝載并運行應用服務 |
| 具有統一的規格,便于搬運 | 封裝環境的統一性(JDK、環境變量都可以封裝在一個docker鏡像里面),可以遵從一定規則反復的、快速的自動化安裝部署 |
| 環境隔離,每個公司的集裝箱貨物與其他的公司的貨物不混在一起。 | 在linux中采用namespace技術進行資源隔離,cgroups技術進行資源限制。容器之間互不影響。 |
|資源共享,一個運送集裝箱的船舶,搭載多個集裝箱|一臺服務器可以啟動多個docker容器,達到共享服務器資源的目的|
| 具備完整的物流倉儲系統 | docker鏡像倉庫中的鏡像,可以導出導入,上傳下載 |
可以參考我的另一篇文章[《【大話云原生】煮餃子與docker之間的關系》](https://zimug.blog.csdn.net/article/details/123321369),我覺得這篇文章對于您理解docker將有非常大的幫助。
## 三、docker與虛擬機的區別
docker和虛擬機在某些應用場景下比較像,但是docker不是虛擬機。

docker是一種虛擬化容器技術,他和虛擬機最根本的區別是:**docker容器和宿主機共用linux操作系統內核,不會在宿主機上再次安裝操作系統**。**docker容器運行狀態下的本質是宿主機上的進程**,通過namespace資源隔離,cgroups資源限制,使它看上去像是一個獨立的虛擬機.
|對比項|虛擬機|docker容器|
|----|----|----|
|啟動速度|龜速(本質是啟動操作系統)|秒速(本質是啟動一個進程)|
|鏡像大小|以Ubuntu為例,1G以上|Ubuntu:195M|
|應用部署集成|通常是手動安裝|下載鏡像+啟動鏡像(自動)|
|內存訪問效率|慢,先訪問虛擬地址|基本等同于宿主機|
|CPU損耗|虛擬操作系統造成的損耗較大|接近于0|
## 四、docker的應用場景
* docker鏡像一旦構建,就已經一次性完成了應用自動打包、集成。docker鏡像可以進行版本管理、復制、分享、修改,就像管理代碼一樣。
* 通過統一的docker環境封裝(比如鏡像中封裝了同一版本的JDK、同樣的環境變量等等),保證應用服務運行環境的一致性。避免出現在測試環境上好用,挪到生產環境下運行失敗的問題。
* docker可以做到秒級、甚至毫秒級的啟動時間。大大的節約了開發、測試、部署的時間。
* 因為鏡像可下載、可復用,docker容器可快速啟動等特性,結合容器編排服務(k8s)可以實現大型分布式部署的彈性伸縮,快速擴展。
## 五、總結
如果初學者對于本節內容理解起來有困難,也不要氣餒。其實docker的學習難度很低,隨著學習的深入,上面的這些概念很容易理解的。
- 文檔概要
- 第一章 docker基礎
- docker介紹
- CentOS7安裝docker
- 基礎概念介紹
- 示例-docker安裝nginx
- 鏡像管理詳解
- 容器管理詳解
- 容器自啟動與保活
- 使用IDEA工具遠程管理
- 第二章 制作與管理鏡像
- 鏡像分層原理
- Dockerfile語法解析
- 使用Dockerfile構建鏡像
- 制作Springboot鏡像
- registry v2鏡像倉庫搭建
- 第三章 docker數據管理
- docker存儲驅動
- 數據管理-Bind mounts
- 數據管理-Volumes
- 容器間數據共享
- 第四章 Docker容器安全
- 用戶提權問題實驗
- 非root用戶安裝使用Docker
- API認證接口使用HTTPS
- 資源配額限制
- 第五章 Docker網絡基礎
- docker網絡基礎概念
- docker基礎網絡模式
- overlay跨宿主機通信
- 配置DNS服務
- 第六章 DockerCompose
- 安裝與入門
- 一鍵部署wordpress
- Harbor的搭建與使用
- YAML配置文件詳解
- 第七章 Docker Swarm
- 幾乎沒人用就不寫了
- 附錄
- CentOS7內核升級
- docker引擎及容器日志
- 離線掛載yum源
- 筆者其他作品推薦
- vue深入淺出系列
- 手摸手教你Spring Boot2.0
- Spring Security-JWT-OAuth2一本通
- 實戰前后端分離RBAC權限管理系統
- 實戰SpringCloud微服務從青銅到王者