mirror of
https://github.com/containers/youki
synced 2024-09-20 02:41:47 +02:00
77 lines
2.6 KiB
Markdown
77 lines
2.6 KiB
Markdown
# youki: A container runtime in Rust
|
|
|
|
![logo](docs/youki.png)
|
|
> rusty container
|
|
|
|
youki is an implementation of [runtime-spec](https://github.com/opencontainers/runtime-spec) in Rust, referring to [runc](https://github.com/opencontainers/runc).
|
|
|
|
# Motivation
|
|
Here is why we are writing a new container runtime in Rust.
|
|
- Rust is one of the best languages to implement oci-runtime. Many container tools are written in Go. It's all very nice products. However, the container runtime requires the use of system calls, which requires a bit of special handling when implemented in Go. This is too tricky(e.g. *namespaces(7)*, *fork(2)*); with Rust, it's not that tricky and you can use system calls. Also, unlike C, Rust provides the benefit of memory management.
|
|
- The development of [railcar](https://github.com/oracle/railcar) has been suspended. This project was very nice but is no longer being developed. This project is inspired by it.
|
|
- We have fun implementing this. In fact, this may be the most important.
|
|
|
|
# Status of youki
|
|
youki is not at the practical stage yet. However, it is getting closer to practical use, running with docker and passing all the default tests provided by [opencontainers/runtime-rools](https://github.com/opencontainers/runtime-tools).
|
|
![youki demo](docs/demo.gif)
|
|
|
|
# Getting Started
|
|
Local build is only supported on linux.
|
|
For other platforms, please use the devcontainer that we prepared.
|
|
## Requires
|
|
- Rust(See [here](https://www.rust-lang.org/tools/install))
|
|
- Docker
|
|
|
|
## Building
|
|
```sh
|
|
$ git clone git@github.com:utam0k/youki.git
|
|
$ cd youki
|
|
$ cargo build
|
|
```
|
|
|
|
## Usage
|
|
Starting the docker daemon.
|
|
```
|
|
$ dockerd --experimental --add-runtime="youki=$(pwd)/target/x86_64-unknown-linux-gnu/debug/youki"
|
|
```
|
|
|
|
You can use youki in a different terminal to start the container.
|
|
```
|
|
$ docker run -it --rm --runtime youki busybox
|
|
```
|
|
|
|
### Integration test
|
|
You can use [opencontainers/runtime-rools](https://github.com/opencontainers/runtime-tools) to do integration testing used in CI.
|
|
See it's documentation for details.
|
|
|
|
# Design and implementation of youki
|
|
TBD
|
|
|
|
# Features
|
|
- [x] run with docker
|
|
- [x] pivot root
|
|
- [x] mount devices
|
|
- [x] namespace
|
|
- [x] capabilities
|
|
- [x] rlimits
|
|
- [ ] cgroups v1
|
|
- [x] devices
|
|
- [ ] cpu
|
|
- [ ] cpuacct
|
|
- [ ] cpuset
|
|
- [ ] memory
|
|
- [ ] freezer
|
|
- [ ] net_cls
|
|
- [ ] blkio
|
|
- [ ] perf_event
|
|
- [ ] net_prio
|
|
- [ ] hugetlb
|
|
- [ ] pids
|
|
- [ ] rdma
|
|
- [ ] hooks
|
|
|
|
# Contribution
|
|
This project welcomes your PR and issues.
|
|
For example, refactoring, adding features, correcting English, etc.
|
|
If you need any help, you can contact me on [Twitter](https://twitter.com/utam0k).
|