[TOC]
## Docker簡介
### 思考
**思考一:**
我們之前是如何將項目發布到Linux服務器的?
大致步驟如下
1. 安裝jdk
2. 安裝tomcat
3. 將項目war包上傳到tomcat的webapps下
4. 修改配置文件
5. 啟動tomcat
這樣看似沒問題,其實我們想想,發一臺機器還好,這幾步就完成了。如果我們要將這個項目發布到N多臺機器,那么我們是否需要再每個機器上都進行相同的步驟?并且要進行環境兼容性的測試。
<br>
**思考二:**
再來看一個例子,我們現在是想部署一個成熟的產品,這個產品是go語言開發的,我們該如何部署?go語言運行的環境怎么裝,這個項目又該如何部署?
<br>
**思考三:**
一臺linux機器上裝了很多軟件,部署了很多項目,相互之間有干擾怎么辦?
<br>
<hr>
### Docker是什么
Docker是以容器技術為核心的一套應用的構建,分發,執行的體系和生態。

### Docker 解決了什么問題
* 程序在我這里跑的好好的,在你那怎么不行了?(環境與程序打包交付)
* 系統好卡,是哪個進程把CPU吃光了?(容器之間沙箱隔離)
* 這套系統我已經搭建好了,要不你再重新搭一遍?(一次構建,到處運行)
### Docker 的優點
* **更快速的交付和部署**
對開發和運維來說,最希望的是一次構建或配置,可以在任意地方正常運行。
例如:開發者可以使用一個標準的鏡像來構建一套開發容器,開發完成之后,運維人員可以直接使用這個容器來部署代碼。Docker容器很輕很快,容器的啟動時間是秒級的,大量地節約開發,測試,部署的時間,并且解決開發環境和生產環境不一致的問題。
<br>
* **更輕松的遷移和擴展**
Docker容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等,這種兼容性可以讓用戶把一個應用程序從一個平臺直接遷移到另外一個平臺。
<br>
* **更高的資源利用率**
Docker對系統資源的利用率很高,一臺主機上可以同時運行數千個Docker容器,容器除了運行其中的應用外,基本不消耗額外的系統資源,使得應用的性能很高,同時系統的開銷盡量小。
### Docker的目的
* **集裝箱**:變革了人類整個的生產流程體系,讓貨物全世界流通
<br>
* **Docker**:變革了IT領域的軟件交付方式,讓IT之間的鴻溝消失
:-: **目標:簡化部署流程,提高生產力**
### Docker常用場景
* 構建DevOps流程,實現運維的自動化
* 企業私有的PAAS平臺,降低開發成本,提升效率
* 企業級AppStore,統一的后端系統分發平臺
* 間歇式計算任務
* 構建微服務架構
<br>
## 虛擬化和Docker的對比

## Docker的架構

**Docker daemon(Docker 進程)**
Docker進程是部署在linux操作系統上,負責支撐Docker Container(容器)的運行以及本地Image(鏡像)的管理。
**Docker Client**
用戶不直接操作Docker daemon,用戶通過Docker client訪問Docker,Docker client提供pull,build,run等操作命令。
**Docker Images**
Docker 鏡像,就是一個只讀的模板。
例如一個鏡像可以包含一個完整的linux操作系統環境,里面安裝了用戶需要的應用程序。
鏡像可以用來創建Docker容器。Docker 提供了一個很簡單的機制來創建鏡像或者更新現有的鏡像,用戶甚至可以從其他人那里下載一個已經做好的鏡像來直接使用。
**Docker Containers**
Docker 容器,是鏡像的一個運行實例。
Docker 是利用容器來運行應用的,它可以被啟動、開始、停止、刪除。每個容器都是互相隔離的,保證安全的平臺。可以把容器看做是一個簡易版的linux環境和運行在其中的應用程序。
**Docker Registry**
倉庫分為公開倉庫和私有倉庫兩種形式。
最大的公開倉庫是 Docker Hub,存放了數量龐大的鏡像供用戶下載;用戶也可以在本地網絡內創建一個私有倉庫。
當用戶創建了自己的鏡像之后就可以使用push命令將它上傳到公有或私有倉庫,這樣其他人只需要從倉庫上pull下來就可以了。
---
:-: 
<span style="color: #993366;"><em>***<span style="text-decoration: underline;"><span style="text-decoration: underline;">微信掃一掃,關注“python測試開發圈”,了解更多測試教程!!</span></span>***</em></span>