自己动手写 Docker 系列文章总览
簡介
本文章系列起源于:《自己動手寫 Docker》,編程實踐方得真知,雖然大部分代碼書中都有,但還是遇到了不少困難,下面是對于自己寫的 Docker Demo 的總覽
工程說明
同時放到了 Gitee 和 Github 上,都可進行獲取
- GitHub: https://github.com/lw1243925457/dockerDemo
- Gitee: https://gitee.com/free-love/docker-demo
工程基于 Go:1.17
由于系統原因,不能在 Windows 平臺運行,只能在 Linux 平臺上運行
本工程實現了的大致功能清單如下:
- 構造實現 run 命令版本的容器
- 實現 run 命令
- 增加容器限制
- 增加管道及環境變量識別
- 使用 busybox 創建容器
- 使用 AUFS 包裝 busybox
- 實現 volume 數據卷
- 實現簡單鏡像打包
- 實現容器的后臺運行
- 實現查看運行中的容器
- 實現查看容器日志
- 實現進入容器 Namespace
- 實現停止容器
- 實現刪除容器
- 實現通過容器制作鏡像
- 實現容器指定環境變量運行
- 容器地址分配
- 創建 Bridge 網絡
- 在 Bridge 網絡創建容器
環境說明
本文基于下面的環境進行開發發運:
- Ubuntu 20 TLS :本地搭建的 Ubuntu 系統
- Centos7 :騰訊云服務器,也能跑本工程下的所有代碼
注:Windows 不能運行該工程,因為其中有些庫是 Linux 采用的,
但如果想要寫 Windows 的話,可以倉庫 RunC 中關于 Windows 相關的代碼
如果后期有時間的話,本工程也嘗試適配下 Windows 系統
看了下,windows 是基于:https://github.com/microsoft/hcsshim
感覺難度有點大,看看后面時間了,時間不緊的話,可以嘗試嘗試
運行說明
docker demo 的代碼都位于文件夾:mydocker 下
可參考下面的方式運行:
go mod init dockerDemo go mod tidy go build mydocker/main.go ./main run -ti /bin/sh需求安裝 Go 環境:https://go.dev/doc/install
根據官網教程進行安裝即可
工程運行需要基礎鏡像:busybox,在文章中有說如何進行配置安裝:自己動手寫 Docker 系列 – 4.1 使用 busybox 創建容器
本文為了圖便宜犯了一個錯誤,將容器的掛載數據卷設置成了工程運行時的所在目錄,導致不同環境運行會有些問題,這是個教訓
如果在克隆本工程,運行時出現報錯:找不到 /proc
需要將 busybox 下的內容復制到工程根目錄下的 /opt/busybox,命令如下(壓縮包放到了gitee上,可以使用命令直接下載)
wget https://gitee.com/free-love/docker-demo/attach_files/1048146/download/busybox.tar? dockerDemo git:(main) ? mkdir /opt/busybox ? dockerDemo git:(main) ? tar -xvf ./busybox.tar -C /opt/busybox/? dockerDemo git:(main) ? ls /opt/busybox bin dev etc home proc root sys tmp usr var實踐文檔
在編寫代碼時,也遇到過不少問題,基本上都對過程進行記錄,代碼相對書中應該是比較完整,如果在編寫過程中遇到問題,可以當做相關的參考
- 自己動手寫 Docker 系列 – 3.1 構造實現 run 命令版本的容器
- 自己動手寫 Docker 系列 – 3.2 增加容器資源限制
- 自己動手寫 Docker 系列 – 3.3 使用命令管道優化參數傳遞
- 自己動手寫 Docker 系列 – 4.1 使用 busybox 創建容器
- 自己動手寫 Docker 系列 – 4.2 使用 AUFS 包裝 busybox
- 自己動手寫 Docker 系列 – 4.3 實現 volume 數據卷
- 自己動手寫 Docker 系列 – 5.1 實現容器的后臺運行
- 自己動手寫 Docker 系列 – 5.2 實現查看運行中的容器
- 自己動手寫 Docker 系列 – 5.3 實現 logs 命令查看容器日志
- 自己動手寫 Docker 系列 – 5.4 實現進入容器的 namespace,exec 命令
- 自己動手寫 Docker 系列 – 5.5 實現容器停止
- 自己動手寫 Docker 系列 – 5.6 實現刪除容器
- 自己動手寫 Docker 系列 – 5.7 實現通過容器制作鏡像
- 自己動手寫 Docker 系列 – 5.8 實現容器制定環境變量運行
- 自己動手寫 Docker 系列 – 6.1 ip 分配管理
- 自己動手寫 Docker 系列 – 6.2 創建網絡
- 自己動手寫 Docker 系列 – 6.3 手動配置容器網絡(上)
- 自己動手寫 Docker 系列 – 6.3 手動配置容器網絡(下)
- 自己動手寫 Docker 系列 – 6.5 啟動時給容器配置網絡
參考資料
- 《自己動手寫 Docker》:非常好的書籍,值得一看并實操
總結
以上是生活随笔為你收集整理的自己动手写 Docker 系列文章总览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【论文精读】Stable Linear
- 下一篇: 头歌-自己动手画CPU(第二关)-原码一