Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kernelerr/shallow-container
A light-weight container tool written in Rust.
https://github.com/kernelerr/shallow-container
Last synced: 25 days ago
JSON representation
A light-weight container tool written in Rust.
- Host: GitHub
- URL: https://github.com/kernelerr/shallow-container
- Owner: KernelErr
- License: apache-2.0
- Created: 2021-09-19T07:25:42.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2021-09-22T11:23:08.000Z (about 3 years ago)
- Last Synced: 2024-08-02T07:02:15.608Z (3 months ago)
- Language: Rust
- Homepage:
- Size: 390 KB
- Stars: 15
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
![Shallow Container](./docs/logo.png)
Shallow Container is a light-weight container tool written in Rust. It is totally for proof-of-concept and may not suit for production environment.
Shallow Container 是一款Rust编写的轻量级容器工具,用于探索在Rust中实现管理Linux命名空间等功能的可能性。请注意,本程序仅作为学习用途,其设计可能不适合生产用途,请勿在生产环境下使用。
在开发本项目时并没有考虑到诸多方面,致使本项目更像是一个玩具,如果需要细致了解Docker的原理,推荐研究Linux Namespace、cgroups、aufs等知识。
## 概念
Rust是一门非常棒的编程语言,在这入门后不到一年的时间,我逐渐感受到了Rust的魅力,并尝试以Rust为切入点去理解后端框架、操作系统等应用。Shallow Container(简称SC)是100% Rust编写的轻型容器工具,目前支持下面的功能:
- 从Docker Hub下载镜像
- 启动镜像(可选和主机共享Net命名空间)SC在设计上一定程度参考了[mocker](https://github.com/tonybaloney/mocker),我和mocker的作者一样花了两天时间写了这样一个程序。程序功能完全比不上Docker的n分之一,在实际执行的过程中也可能有不少问题,不过这已经达到了探索基础知识的目的,后续更深入的容器原理就交给大家和我独自去研究了。
SC的所有文件均保存在`/var/lib/shallow`中,如果需要释放空间,直接删除即可。
## pull
假设程序编译位置为`./target/debug/shallow-container`,如果想pull一个镜像,请执行下面的命令:
```bash
$ sudo ./target/debug/shallow-container pull library/hello-world:latest
```Image需要是完整的scope/image:tag格式,如果为官方镜像,scope请设置为`library`。你大概会看到这样的输出:
![Pull Hello World](./docs/screenshots/pull_hello_world.png)
## run
类似的,如果想启动一个容器,请执行下面的命令,如果没找到镜像会先尝试pull:
```bash
$ sudo ./target/debug/shallow-container run library/hello-world:latest
```默认情况下,SC会为容器使用独立的PID、Net等命名空间。由于SC设计上未考虑到网络相关的功能,所以如果你想运行Nginx容器,可以加上`--Sn`来和主机共享网络命名空间。
```bash
$ sudo ./target/debug/shallow-container run --Sn nginxinc/nginx-unprivileged:latest
```可以预期的输出如下:
![Run Nginx](./docs/screenshots/run_nginx.png)
同时你可以访问`http://127.0.0.1:8080`,你应该能够看到Nginx经典的默认网页。
## License
Shallow Container is available under terms of Apache-2.0.