1
0
mirror of https://github.com/containers/youki synced 2024-09-19 18:37:40 +02:00
youki/README.md

77 lines
2.6 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)
> 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
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.
2021-05-16 12:38:33 +02:00
# 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)
2021-03-29 17:23:45 +02:00
2021-05-16 12:38:33 +02:00
# Getting Started
Local build is only supported on linux.
For other platforms, please use the devcontainer that we prepared.
## Requires
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-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
Starting the docker daemon.
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-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
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
TBD
2021-03-27 12:08:13 +01:00
2021-03-29 17:23:45 +02:00
# Features
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
- [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-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).