更好的閱讀體驗:點這里 ( www.doubibiji.com
)
1 Docker簡介
Docker是一個強大的容器化平臺,讓你能夠更輕松地構建、部署和運行應用程序。
下面我們來學習 Docker。
1.1 Docker是什么
1 現在遇到的問題
- 每次部署一臺服務器,需要安裝各種依賴,配置各種環境,十分麻煩;
- 應用程序在我的電腦上運行完全沒有問題,你說在你的電腦上不行,環境或配置不同導致的各種問題;
- 由于開發、測試和生產環境配置不一致,導致在生產環境中出現了在開發環境中未曾出現的bug;
- 一臺服務器,硬件大部分時間處于閑置狀態,資源被浪費;
- 等等…
2 虛擬機技術
使用虛擬機,我們可以使用同一個鏡像文件,創建多個虛擬機,多個虛擬機的環境和配置是一模一樣的,這樣就不會存在多個虛擬機環境不一樣的問題了。
3 Docker是怎么解決的
Docker 和虛擬機的思路是類似的,Docker 將應用程序及其依賴項打包成鏡像,鏡像包含了應用程序所需的所有內容,包括代碼、運行時環境、系統工具、庫和依賴項。開發者可以在本地構建鏡像,并將其部署到任何地方,無需擔心環境差異導致的問題。
虛擬機技術將鏡像運行為一個個獨立的虛擬機,Docker 引擎將鏡像運行成一個個的容器,每個容器也是相互隔離,互不影響,確保了應用程序的安全性和穩定性。
總的來說,Docker通過其容器化技術,將應用程序和運行它所需要的環境、依賴等打包成鏡像,這樣就沒有環境問題了。
舉個栗子:
我們可以直接下載 Redis 鏡像,一條語句將鏡像運行起來,就可以直接使用了,不需要復雜的安裝。我們的項目需要 Redis、MySql、JDK、RabbitMQ,我們可以直接將項目、Redis、Mysql、JDK、RabbitMQ 所有的這些打包成一個鏡像,部署在各個機器上,就不需要一個個服務器安裝環境了,聽著是多么的順耳。
4 Docker與虛擬機技術的不同
- 虛擬化層次
- 虛擬機技術: 使用Hypervisor(如VMware、VirtualBox等)在物理服務器上創建多個完整的虛擬機。每個虛擬機都包含了自己的操作系統、內核和用戶空間,相互獨立。
- Docker: 利用宿主機的操作系統內核,并在其之上運行容器。容器與宿主機共享同一個操作系統內核,但各自擁有自己的用戶空間。這使得容器更為輕量級。
- 資源利用方式
- 虛擬機技術: 每個虛擬機需要獨立的操作系統,因此較為笨重,占用更多資源。多個虛擬機在同一物理機上運行時,會占用更多的內存和硬盤空間,隨隨便便20、30G的占用空間。
- Docker: 容器共享宿主機的操作系統,不需要額外的操作系統虛擬化,因此更為輕量級。它們利用相同的內核和資源,節省了資源,并允許更多容器在同一臺機器上運行。
- 啟動時間和性能
- 虛擬機技術: 虛擬機啟動需要較長時間,因為需要啟動完整的操作系統。
- Docker: 容器啟動速度更快,因為它們不需要啟動完整的操作系統,只需啟動應用及其依賴項即可。
- 環境隔離
- 虛擬機技術: 虛擬機提供了完全隔離的環境,每個虛擬機都是相對獨立的。
- Docker: 容器也提供了良好的隔離性,但與虛擬機相比,容器之間的隔離度略低。
總體來說,Docker相對于傳統虛擬機技術更為輕量級、啟動更快、資源利用更高效,因為它利用了宿主機的操作系統內核,并通過容器實現了更好的資源共享和隔離。使得應用程序能夠更便捷、高效、一致地部署和運行,解決了環境一致性、快速部署、資源利用率、版本控制、隔離性等多個方面的問題。
1.2 Docker 三要素
在學習操作 Docker 之前,先介紹一下 Docker 中的基礎概念。
- 鏡像
- 容器
- 倉庫
先用一句話解釋:我們從倉庫中下載鏡像,然后運行鏡像成為容器,一個鏡像可以運行多次形成多個容器實例。
1 鏡像(image)
鏡像是一個靜態的、只讀的文件,其中包含了應用程序運行所需的所有內容,如代碼、運行時環境、系統工具、庫和依賴項。它是一個模板,用來創建容器。
使用一個鏡像可以創建多個容器。所以用面向對象的方式來比喻的話,鏡像就是類,容器就是使用類創建的一個一個實例。
2 容器(container)
容器是鏡像的運行時實例,相當于面向對象中的一個個的對象實例。
當你運行一個鏡像時,Docker會創建一個容器。它提供了一個隔離的環境,讓應用程序可以在其中運行。
所以容器可以被理解為一個隔離的、獨立的運行時環境,其中包含了應用程序及其運行所需的一切。
3 倉庫(repository)
倉庫就是存放鏡像的地方,倉庫分為公有倉庫和私有倉庫。
Docker 公司提供了公共的鏡像倉庫 https://hub.docker.com
,里面提供了大量的鏡像可以給我們給我們使用,我們也可以基于別人的鏡像來創建我們自己的鏡像。但是國內訪問 dockerhub
速度比較慢,一般使用阿里云或網易云。
在使用 docker run
運行鏡像的時候,docker 會檢查本機是否存在鏡像,如果存在就使用這個鏡像運行為一個容器,而如果不存在,就會去 Docker Hub上下載,下載完成,再運行這個鏡像。
我們一般不會直接運行一個本機不存在的鏡像,我們一般會先搜索鏡像,找到鏡像后,將鏡像下載下來,然后再通過鏡像創建容器運行。