什么是docker?
我們現在開發項目是在windows操作系統使用idea開發,本地windows操作系統上有我們項目所需的jdk,mysql,redis,tomcat等環境,如果我們想打包我們的項目到一個別的服務器上,在別的服務器上能運行,同樣的也需要這些環境,但是我們如果在工作過程中去帶著項目去在別人那里演示,沒有這樣的環境,我們該怎么辦?
這時候就用到了我們的docker容器了,docker就相當于一個簡易的微量的操縱系統,我們可以在docker中安裝我們的環境,然后把項目打包部署到docker中。到時候在容器中運行就行了
下面是docker的官方一點的解釋:
1.Docker 是一個開源的應用容器引擎,基于 Go 語言 并遵從 Apache2.0 協議開源。Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。
2. Docker的主要目標是‘build ,ship and run any app,anywhere’,也就是說通過對應用程序組件的封裝,分發,部署,運行等生命周期的管理。使用戶的app(可以是一個web應用程序或者數據庫應用等)及其運行環境能夠做到‘一次封裝,到處運行’。
3.Linux容器技術的出現解決了這個問題。而docker就是基于他的基礎上發展過來的。將應用運行到docker容器上面,而docker容器在任何操作系統上都是一致的,這就是實現跨平臺跨服務器。只需要一次配置好環境,換到別的機子上就可以一鍵部署好,大大簡化了操作。
4.?容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
5.Docker 從 17.03 版本之后分為 CE(Community Edition: 社區版) 和 EE(Enterprise Edition: 企業版),我們用社區版就可以了。
總結:Docker實際上就是一個虛擬化輕量級linux服務器,可以解決我們在開發環境中運行配置問題。
為什么使用docker?
Docker:虛擬化容器技術
Docker主要解決我們開發環境配置遷移的問題。
1.解決項目運行需要依賴很多環境的問題
本地運行項目需要多少環境,部署到服務器上同樣需要多少環境。
2.解決依賴的版本沖突問題
有時候可能會發生這些問題:我在本地運行環境沒有問題,但是打包到Linux服務器運行總是遇到很多錯誤,大多數由于一些版本沖突影響。
在這時候我們就可以使用docker部署和安裝軟件就非常方便,直接將該springboot項目制作成一個鏡像文件,鏡像文件中包含jdk版本 tomcat版本信息 ?直接部署linux即可,減少依賴沖突概率。
以安裝MySQL避免環境沖突為例:
Linux安裝MySQL:阿里云、騰訊云 linux系統安裝mysql 5.7_mysql57哪個版本適用阿里云-CSDN博客
在對比docker安裝mysql
docker pull mysql:5.7 docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7
Docker最終解決了運行環境配置中的問題。----鏡像文件底層封裝好了
使用docker的優缺點?
優點
1.簡化不同環境配置差異虛擬機的最大好處是能在你的硬件設施上運行各種配置不一樣的平臺(軟件, 系統), Docker在降低額外開銷的情況下提供了同樣的功能. 它能讓你將運行環境和配置放在代碼匯總然后部署, 同一個Docker的配置可以在不同的環境環境中使用, 這樣就降低了硬件要求和應用環境之間耦合度。
2.代碼流水線管理代碼從開發者的機器到最終在生產環境上的部署, 需要經過很多的中間環境,而每一個中間環境都有自己微小的差別, Docker給應用提供了一個從開發到上線均一致的環境, 讓代碼的流水線變得簡單不少。
3.提升開發效率不同環境中, 開發者的共同目標:(1)讓開發環境盡量貼近生產環境.(2)快速搭建開發環境開發環境的機器通常內存比較小, 之前使用虛擬的時候, 我們經常需要為開發環境的機器加內存, 而現在Docker可以輕易的讓幾十個服務在Docker中跑起來。
4.隔離應用開發時會在一個臺機器上運行不同的應用.(1) 為了降低成本, 進行服務器整合(2)將一個整體式的應用拆分成低耦合的單個服務(微服務架構)
5.整合服務器Docker隔離應用的能力使得Docker可以整合多個服務器以降低成本。由于沒有多個操作系統的內存占用, 以及能在多個實例之間共享沒有使用的內存, Docker可以比虛擬機提供更好的服務器整合解決方案。
6.調試能力Docker提供了很多的工具, 這些工具不一定只是針對容器, 但是卻適用于容器. 他們提供了很多功能, 包括可以為容器設置檢查點, 設置版本, 查看兩個容器之間的差別, 這些特性可以幫助調試Bug.
7.多租戶環境多租戶環境的應用中, 它可以避免關鍵應用的重寫.我們一個特別的關于這個場景的例子是為loT(物聯網)的應用開發一個快速, 易用的多租戶環境. 這種多租戶的基本代碼非常復雜, 很難處理, 重新規劃以應用不但消耗時間, 也浪費金錢.
使用Docker, 可以為每一個租戶的應用層的多個實例創建隔離的環境, 這不僅簡單而且成本低廉, 因為Docker環境啟動的速度快, diff命令很高效.
8.快速部署Docker為進程創建一個容器, 不需要啟動一個操作系統, 時間縮短為秒級別.可以在數據中心創建銷毀資源而無須擔心重新啟動帶來的開銷. 通常數據中心的資源利用率只有30% , 通過使用Docker并進行有效的資源分配可以提高資源的利用率。
9.環境標準化和版本控制Docker容器可以在不同的開發與產品發布生命周期中確保一致性,進而標準化你的環境。除此之外,Docker容器還可以像git倉庫一樣,可以讓你提交變更到Docker鏡像中并通過不同的版本來管理它們。設想如果你因為完成了一個組件的升級而導致你整個環境都損壞了,Docker可以讓你輕松地回滾到這個鏡像的前一個版本。這整個過程可以在幾分鐘內完成,如果和虛擬機的備份或者鏡像創建流程對比,那Docker算相當快的,它可以讓你快速地進行復制和實現冗余。此外,啟動Docker就和運行一個進程一樣快。
缺點:
必須是64位機器上運行,目前僅支持 x86_64和AMD64,32系統不支持.
- 系統的Linux內核必須是3.8或者更高,內核支持Device Mapper,AUFS,VFS,btrfs等存儲格式.
- 內核必須支持cgroups和命名空間.
應用場景
1.Web 應用的自動化打包和發布。
2.自動化測試和持續集成、發布。
3.在服務型環境中部署和調整數據庫或其他的后臺應用。
4.從頭編譯或者擴展現有的 OpenShift 或 Cloud Foundry 平臺來搭建自己的 PaaS 環境。
容器與虛擬機區別
什么是虛擬機:在一臺物理機器上,利用虛擬化技術,虛擬出來多個操作系統,每個操作系統之間是隔離的。
從下到上理解上圖:
最下面的一層就是物理機,可以是服務器,設置是一臺個人電腦;
電腦上需要安裝操作系統,比如我們安裝了win10的操作系統;
再往上就是虛擬機軟件了,比如我們常用的VirtualBox、VMWare,它們的作用是模擬計算機硬件;
繼續向上,就是虛擬機模擬出來的操作系統了;
在虛擬的操作系統中,安裝所需的軟件、組件等。比如我們需要在虛擬操作系統中安裝JDK、Tomcat等;
最后就是具體的應用了,例如部署到Tomcat中。?
Docker :Docker是開源的應用容器引擎
依然從下往上看:
最下面兩層,概念同上。
往上,可以看做Docker容器的管理器。
依賴和應用都被打包成了Docker鏡像。例如,JDK、Tomcat、應用都被打包在了一起,運行在Docker容器里,容器和容器間是隔離的
Docker和虛擬機的區別
1.從兩者的架構圖上看,虛擬機是在硬件級別進行虛擬化,模擬硬件搭建操作系統;而Docker是在操作系統的層面虛擬化,復用操作系統,運行Docker容器。
2.Docker的速度很快,秒級,而虛擬機的速度通常要按分鐘計算。
3.Docker所用的資源更少,性能更高。同樣一個物理機器,Docker運行的鏡像數量遠多于虛擬機的數量。
4.虛擬機實現了操作系統之間的隔離,Docker是進程之間的隔離,虛擬機隔離級別更高、安全性方面也更強。
5.虛擬機和Docker各有優勢,不存在誰替代掉誰的問題,很多企業都采用物理機上做虛擬機,虛擬機中跑Docker的方式。
特性 | 容器 | 虛擬機 |
啟動速度 | 秒級 | 分鐘級別 |
硬盤使用 | 一般為MB | 一般GB |
性能 | 接近原生 | 弱于 |
系統支持量 | 單機支持上千個容器 | 一般幾十個 |
隔離性 | 完全隔離 | 完全隔離 |
Docker官網
Docker Docs
Docker: Accelerated Container Application Development