文章目錄
- 容器(container:容器/集裝箱)技術
- 虛擬機解決了哪些部署問題
- docker解決了哪些部署問題
- docker是如何做到容器間運行時環境隔離的
- docker基本概念
- docker基本使用
容器(container:容器/集裝箱)技術
- 容器本身就是一種沙箱/盒技術
- 其作用就是將應用所需的環境、依賴、配置等單獨隔離出來
- 容器被移動到任意機器上均不會影響內部應用的運行
- docker就是通過go語言所實現的一種容器技術
虛擬機解決了哪些部署問題
- 解決了硬件可能造成的系統運行環境的差異性(內存大小、操作系統差異)
- 相對便捷的提供了系統運行環境的搭建過程(CV虛擬機配置即可)
- 保證了系統運行時依賴版本的一致性(MySQL、Lombok等應用或插件的版本差異)
docker解決了哪些部署問題
- docker容器是共享宿主機操作系統的,而VMware每起一個虛擬機其內部都需要一個獨立操作系統(磁盤占用十幾個G起步,內存也得幾個G)
- 特別注意容器的內存占用是很小的一般只有幾M(因為它本質上不過是一套用于約束資源訪問的隔離規范,自身不被劃分任何硬件資源,容器內應用的運行還是要依賴宿主機的)
- 容器重啟所耗費時間是秒級的,而VMWare則比較慢了(涉及到操作系統的檢測和加載)
docker是如何做到容器間運行時環境隔離的
- 容器本身并不同于虛擬機擁有完整的操作系統內存劃分
- 容器是通過隔離手段(隔離應用程序的運行時環境)限制其進程的資源訪問
- 容器中主要通過Namespace、Control group、Chroot(切根)進行運行時環境隔離
- NameSpace機制是一種資源隔離方案,在該機制下如Linux操作系統中PID、IPC、網絡等全局資源就分屬于各個特定的NameSpace。各個NameSpace下的資源互不干擾,如此每個NameSpace看上去就像一個獨立的操作系統一樣。
- 雖然NameSpace技術可以實現資源隔離,但進程還是可以不受控的訪問系統資源,如CPU、內存、磁盤、網絡等,為了控制容器中進程對資源的訪問,Docker采用control groups技術(也就是cgroup)控制容器中進程對系統資源的消耗,比如可以限制某個容器使用內存的上限、可以在哪些CPU上運行等等
- 切根的意思就是改變一個程序運行時參考的根目錄位置,讓不同容器在不同的虛擬根目錄下工作,從而相互不直接影響。
docker基本概念
- 采用常見C/S架構——Client/demon
- dockerfile:通過docker build生成image的腳本(指定需要哪些程序、依賴什么樣的配置)
- image:就是一個可通過docker run執行的程序
- container:可理解為image執行后的一個進程
docker基本使用
docker build
開發者寫完dockerfile文件后通過Client命令(docker build)交由demon打包為可執行的imagedocker run
當client發送執行命令(docker run)到demon,demon找到對應image并加載到內存開始執行,執行起來該image就是一個對應容器docker pull
該命令就是去docker hub拉取現成image的,demon收到client的pull命令后,向docker registry發送image下載請求,下載后存放在本地