1
0
Fork 0
mirror of https://github.com/containers/youki synced 2024-06-03 05:16:17 +02:00
youki/README.md

93 lines
3.3 KiB
Markdown
Raw Normal View History

2021-05-16 09:47:06 +02:00
# youki: A container runtime in Rust
2021-03-27 12:08:13 +01:00
2021-05-17 16:20:32 +02:00
![logo](docs/youki.png)
2021-05-18 16:30:11 +02:00
2021-05-17 16:20:32 +02:00
> rusty container
2021-03-27 12:08:13 +01:00
youki is an implementation of [runtime-spec](https://github.com/opencontainers/runtime-spec) in Rust, referring to [runc](https://github.com/opencontainers/runc).
2021-05-16 11:24:30 +02:00
# Motivation
2021-05-18 16:30:11 +02:00
Here is why I am rewriting 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. Rust is not yet a major player in the container field, and Rust has the potential to contribute more to this field. I hope to be one of the examples of how Rust can be used in this field.
- youki has the potential to be faster and use less memory than runc. This means that it can work in environments with tight memory usage. I don't have any benchmarks, etc., as it is not yet fully operational, but I expect that it will probably perform better when implemented in Rust. In fact, [crun](https://github.com/containers/crun#performance), a container runtime implemented in C, is quite high performance. For example, it may be possible to experiment with asynchronous processing using async/await in some parts.
2021-05-16 11:24:30 +02:00
- 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.
2021-05-18 16:30:11 +02:00
- I have fun implementing this. In fact, this may be the most important.
2021-05-16 11:24:30 +02:00
2021-05-16 12:38:33 +02:00
# Status of youki
2021-05-18 16:30:11 +02:00
2021-05-16 12:38:33 +02:00
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)
2021-03-29 17:23:45 +02:00
2021-05-16 12:38:33 +02:00
# Getting Started
2021-05-18 16:30:11 +02:00
2021-05-16 12:38:33 +02:00
Local build is only supported on linux.
For other platforms, please use the devcontainer that we prepared.
2021-05-18 16:30:11 +02:00
2021-05-16 12:38:33 +02:00
## Requires
2021-05-18 16:30:11 +02:00
2021-03-29 17:23:45 +02:00
- Rust(See [here](https://www.rust-lang.org/tools/install))
- Docker
2021-05-16 12:38:33 +02:00
## Building
2021-05-18 16:30:11 +02:00
2021-03-29 17:23:45 +02:00
```sh
$ git clone git@github.com:utam0k/youki.git
2021-05-16 12:38:33 +02:00
$ cd youki
2021-03-29 17:23:45 +02:00
$ cargo build
```
2021-05-16 12:38:33 +02:00
## Usage
2021-05-18 16:30:11 +02:00
2021-05-16 12:38:33 +02:00
Starting the docker daemon.
2021-05-18 16:30:11 +02:00
2021-03-28 12:31:01 +02:00
```
2021-05-16 12:38:33 +02:00
$ dockerd --experimental --add-runtime="youki=$(pwd)/target/x86_64-unknown-linux-gnu/debug/youki"
2021-03-27 12:08:13 +01:00
```
2021-05-16 12:38:33 +02:00
You can use youki in a different terminal to start the container.
2021-05-18 16:30:11 +02:00
2021-03-27 12:08:13 +01:00
```
2021-05-16 12:38:33 +02:00
$ docker run -it --rm --runtime youki busybox
2021-03-27 12:08:13 +01:00
```
2021-05-16 12:38:33 +02:00
### Integration test
2021-05-18 16:30:11 +02:00
2021-05-16 12:38:33 +02:00
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.
2021-03-27 12:08:13 +01:00
2021-05-16 12:38:33 +02:00
# Design and implementation of youki
2021-05-18 16:30:11 +02:00
2021-05-16 12:38:33 +02:00
TBD
2021-03-27 12:08:13 +01:00
2021-03-29 17:23:45 +02:00
# Features
2021-05-18 16:30:11 +02:00
2021-03-27 12:08:13 +01:00
- [x] run with docker
2021-05-16 12:38:33 +02:00
- [x] pivot root
- [x] mount devices
2021-03-27 12:08:13 +01:00
- [x] namespace
2021-04-18 12:43:07 +02:00
- [x] capabilities
2021-05-16 12:38:33 +02:00
- [x] rlimits
2021-04-18 12:43:07 +02:00
- [ ] cgroups v1
2021-05-18 16:30:11 +02:00
- [x] devices
- [ ] cpu
- [ ] cpuacct
- [ ] cpuset
- [ ] memory
- [ ] freezer
- [ ] net_cls
- [ ] blkio
- [ ] perf_event
- [ ] net_prio
- [ ] hugetlb
- [ ] pids
- [ ] rdma
2021-03-29 17:23:45 +02:00
- [ ] hooks
2021-03-27 12:08:13 +01:00
2021-03-29 17:23:45 +02:00
# Contribution
2021-05-18 16:30:11 +02:00
2021-03-27 12:08:13 +01:00
This project welcomes your PR and issues.
For example, refactoring, adding features, correcting English, etc.
2021-03-28 14:14:12 +02:00
If you need any help, you can contact me on [Twitter](https://twitter.com/utam0k).