containers-the-hard-way
项目核心内容总结:
功能
Gocker 是一个用 Go 编写的轻量级 Docker 实现,用于演示容器如何通过 Linux 系统调用(如命名空间和 cgroups)工作。支持以下操作:
- 创建并运行容器(如
gocker run ubuntu /bin/bash); - 列出运行中的容器(
gocker ps); - 在运行中的容器内执行新命令(
gocker exec [容器ID] /bin/bash); - 管理镜像(下载、挂载);
- 通过 Overlay 文件系统实现镜像分层。
使用方法
- 克隆项目后,使用
go mod download安装依赖,再通过go build -o gocker .构建可执行文件。 - 首次运行需通过脚本
enable_internet.sh配置网络,使容器可访问互联网。 - 命令行操作示例:
gocker run [镜像名] [命令]:启动容器;gocker ps:查看运行中的容器;gocker exec [容器ID] [命令]:在容器内执行命令。
主要特性
- 资源隔离:基于 Linux 命名空间(如网络、进程)实现容器隔离;
- 资源限制:支持通过 cgroups 限制 CPU、内存和进程数;
- 网络功能:自动创建
gocker0桥接网络,容器间可通信; - 镜像管理:依赖 GoContainerRegistry 从 Docker Hub 下载镜像;
- 轻量设计:无复杂代理功能(如端口映射),适合学习容器底层原理。
注意事项
- 需以 root 权限运行,可能对系统造成影响(如创建桥接网络、挂载文件系统);
- 当前不支持端口暴露、错误处理不完善。