# mydocker_learn **Repository Path**: fingersnow/mydocker_learn ## Basic Information - **Project Name**: mydocker_learn - **Description**: docker原理学习实践 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-28 - **Last Updated**: 2026-04-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MyDocker 学习项目 ## 项目简介 这是一个用于学习 Docker 原理并实践的项目,通过 Go 语言实现了容器的核心功能,帮助理解 Docker 的底层工作原理。 ## 项目结构 ``` mydocker/ ├── doc/ # 文档目录 ├── namespace/ # 命名空间相关实现 │ ├── namespace.go # 容器命名空间实现 │ └── namespace # 编译后的可执行文件 ├── go.mod # Go 模块文件 └── README.md # 项目说明文档 ``` ## 核心功能 ### 命名空间隔离 `namespace/namespace.go` 文件实现了容器的命名空间隔离,使用 Go 语言的 `syscall` 包创建了以下命名空间: - **UTS 命名空间**:隔离主机名和域名 - **IPC 命名空间**:隔离进程间通信 - **PID 命名空间**:隔离进程 ID - **Mount 命名空间**:隔离文件系统挂载点 - **User 命名空间**:隔离用户和组 ID - **Network 命名空间**:隔离网络设备和配置 ## 如何使用 ### 编译和运行 1. 进入项目目录: ```bash cd /home/dyb/workspaces/mydocker ``` 2. 编译 namespace 程序: ```bash go build -o namespace/namespace namespace/namespace.go ``` 3. 运行容器: ```bash sudo ./namespace/namespace ``` 4. 在容器中执行命令,例如: ```bash # 查看容器内的进程 ps aux # 查看容器内的网络配置 ifconfig # 退出容器 exit ``` ## 学习要点 1. **命名空间原理**:了解 Linux 命名空间如何实现资源隔离 2. **容器创建过程**:学习如何使用 Go 语言创建容器 3. **系统调用**:熟悉 Linux 系统调用在容器中的应用 4. **权限管理**:理解容器的权限控制机制 ## 扩展方向 1. **镜像管理**:实现容器镜像的拉取和管理 2. **网络配置**:添加网络配置和端口映射功能 3. **存储管理**:实现容器数据卷功能 4. **容器编排**:学习容器编排工具的原理 ## 参考资源 - [Docker 官方文档](https://docs.docker.com/) - [Linux 容器技术入门](https://www.ibm.com/developerworks/cn/linux/l-cn-linux-containers/index.html) - [Go 语言系统编程](https://golang.org/pkg/syscall/) ## 许可证 本项目仅供学习使用,无特定许可证。