Docker 使用及原理
- created: 2024-08-19T16:54+08:00
- modified: 2024-11-27T11:21+08:00
- published: 2024-11-27T11:41+08:00
- categories: devops
在瞭解什麼是 docker 之前,先思考作業系統給程序提供了什麼:
- 透過檔案系統為程序提供檔案操作
- 為程序提供了網路訪問,如埠監聽等
- 程序可以得知其他程序的資訊,如執行 ps 可以看到其他程序
docker 對程序做了什麼
docker 透過配置檔案 dockerfile 將程序放進了一個沙盒之中,
沙盒裡,程序認為自己獨佔了一個作業系統,有獨立的檔案系統,網路埠,ps
以後以為只有自己。
一個容器程序本質上是一個執行在沙盒中的隔離程序,由 Linux 系統本身負責隔離,Docker 只是提供了一系列工具,幫助我們設定好隔離環境後,啟動這個程序。
最基本的隔離就是程序之間看不到彼此,這是由 Linux 的 Namespace 機制實現的。程序隔離的結果就是以隔離方式啟動的程序看到的自身程序 ID 總是 1,且看不到系統的其他程序。
第二種隔離就是隔離系統真實的檔案系統。
Docker 利用 Linux 的 mount 機制,給每個隔離程序掛載了一個虛擬的檔案系統,使得一個隔離程序只能訪問這個虛擬的檔案系統,無法看到系統真實的檔案系統。
至於這個虛擬的檔案系統應該長什麼樣,這就是製作 Docker 映象要考慮的問題。
比如我們的 Python 程式要正常執行,需要一個 Python3 直譯器,需要把用到的第三方庫如 psutil 引入進來,這些複雜的工作被簡化為一個 Dockerfile,再由 Docker 把這些執行時的依賴打包,就形成了 Docker 映象。
我們可以把一個 Docker 映象看作一個 zip 包,每啟動一個程序,Docker 都會自動解壓 zip 包,把它變成一個虛擬的檔案系統。第三種隔離就是網路協議棧的隔離,這個最不容易理解。
...—— 一文讀懂 Docker 原理 - 廖雪峰的官方網站
docker 原理
- 透過 namespace 遮擋程序的視線,看不到其他程序、網路卡等資源,透過 Mount 為自己掛載 image
- 透過 cgroups 限制資源的使用,比如 CPU 使用率等
- 透過 引入 layer,使用 UFS 實現對 rootfs 的複用
比如在 root 下 del test 資料夾,不會真的把 test 刪掉,只是利用 UFS 的功能,限制程序無法再看到 test 資料夾
Docker 教程(三)---深入理解 Docker 核心原理:Namespace、Cgroups 和 Rootfs -
c 語言實現 docker 相關功能
如何通俗解釋 Docker 是什麼? - 光度的回答 - 知乎
docker 使用
前言 | Docker — 從入門到實踐