Skip to content

Commit a529784

Browse files
authored
Merge pull request #1183 from adamqqqplay/refine-readme
docs: polish and simplify README.md
2 parents 140a0d7 + ba4d2f9 commit a529784

File tree

1 file changed

+58
-61
lines changed

1 file changed

+58
-61
lines changed

README.md

Lines changed: 58 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,50 @@
1+
[**[⬇️ Download]**](https://github.com/dragonflyoss/image-service/releases)
2+
[**[📖 Website]**](https://nydus.dev/)
3+
[**[☸ Quick Start (Kubernetes)**]](https://github.com/containerd/nydus-snapshotter/blob/main/docs/run_nydus_in_kubernetes.md)
4+
[**[🤓 Quick Start (nerdctl)**]](https://github.com/containerd/nerdctl/blob/master/docs/nydus.md)
5+
[**[❓ FAQs & Troubleshooting]**](https://github.com/dragonflyoss/image-service/wiki/FAQ)
6+
17
# Nydus: Dragonfly Container Image Service
28

39
<p><img src="misc/logo.svg" width="170"></p>
410

511
[![Release Version](https://img.shields.io/github/v/release/dragonflyoss/image-service?style=flat)](https://github.com/dragonflyoss/image-service/releases)
612
[![License](https://img.shields.io/crates/l/nydus-rs)](https://crates.io/crates/nydus-rs)
13+
[![Twitter](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2Fdragonfly_oss)](https://twitter.com/dragonfly_oss)
14+
[![Nydus Stars](https://img.shields.io/github/stars/dragonflyoss/image-service?label=Nydus%20Stars&style=social)](https://github.com/dragonflyoss/image-service)
715

8-
[![Smoke Test](https://github.com/dragonflyoss/image-service/actions/workflows/smoke.yml/badge.svg?event=schedule)](https://github.com/dragonflyoss/image-service/actions/workflows/ci.yml)
16+
[![Smoke Test](https://github.com/dragonflyoss/image-service/actions/workflows/smoke.yml/badge.svg?event=schedule)](https://github.com/dragonflyoss/image-service/actions/workflows/smoke.yml)
917
[![Image Conversion](https://github.com/dragonflyoss/image-service/actions/workflows/convert.yml/badge.svg?event=schedule)](https://github.com/dragonflyoss/image-service/actions/workflows/convert.yml)
18+
[![Integration Test](https://github.com/dragonflyoss/image-service/actions/workflows/integration.yml/badge.svg?event=schedule)](https://github.com/dragonflyoss/image-service/actions/workflows/integration.yml)
1019
[![Release Test Daily](https://github.com/dragonflyoss/image-service/actions/workflows/release.yml/badge.svg?event=schedule)](https://github.com/dragonflyoss/image-service/actions/workflows/release.yml)
11-
[![Twitter](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2Fdragonfly_oss)](https://twitter.com/dragonfly_oss)
12-
[![Nydus Stars](https://img.shields.io/github/stars/dragonflyoss/image-service?label=Nydus%20Stars&style=social)](https://github.com/dragonflyoss/image-service)
1320

1421
## Introduction
15-
The nydus project implements a content-addressable filesystem on top of a RAFS format that improves the current OCI image specification, in terms of container launching speed, image space, and network bandwidth efficiency, as well as data integrity.
22+
Nydus implements a content-addressable file system on the RAFS format, which enhances the current OCI image specification by improving container launch speed, image space and network bandwidth efficiency, and data integrity.
1623

17-
The following benchmarking result shows the performance improvement compared with the OCI image for the container cold startup elapsed time on containerd. As the OCI image size increases, the container startup time of using Nydus image remains very short.
24+
The following Benchmarking results demonstrate that Nydus images significantly outperform OCI images in terms of container cold startup elapsed time on Containerd, particularly as the OCI image size increases.
1825

1926
![Container Cold Startup](./misc/perf.jpg)
2027

21-
Nydus' key features include:
28+
## Principles
29+
30+
***Provide Fast, Secure And Easy Access to Data Distribution***
2231

23-
- Container images can be downloaded on demand in chunks for lazy pulling to boost container startup
24-
- Chunk-based content-addressable data de-duplication to minimize storage, transmission and memory footprints
25-
- Merged filesystem tree in order to remove all intermediate layers as an option
26-
- in-kernel EROFS or FUSE filesystem together with overlayfs to provide full POSIX compatibility
27-
- E2E image data integrity check. So security issues like "Supply Chain Attach" can be avoided and detected at runtime
28-
- Compatible with the OCI artifacts spec and distribution spec, so nydus image can be stored in a regular container registry
29-
- Native [eStargz](https://github.com/containerd/stargz-snapshotter) image support with remote snapshotter plugin `nydus-snapshotter` for containerd runtime.
30-
- Various container image storage backends are supported. For example, Registry, NAS, Aliyun/OSS, S3.
31-
- Integrated with CNCF incubating project Dragonfly to distribute container images in P2P fashion and mitigate the pressure on container registries
32-
- Capable to prefetch data block before user IO hits the block thus to reduce read latency
33-
- Record files access pattern during runtime gathering access trace/log, by which user abnormal behaviors are easily caught
34-
- Access trace based prefetch table
35-
- User I/O amplification to reduce the amount of small requests to storage backend.
32+
- **Performance**: Second-level container startup speed, millisecond-level function computation code package loading speed.
33+
- **Low Cost**: Written in memory-safed language `Rust`, numerous optimizations help improve memory, CPU, and network consumption.
34+
- **Flexible**: Supports container runtimes such as [runC](https://github.com/opencontainers/runc) and [Kata](https://github.com/kata-containers), and provides [Confidential Containers](https://github.com/confidential-containers) and vulnerability scanning capabilities
35+
- **Security**: End to end data integrity check, Supply Chain Attack can be detected and avoided at runtime.
3636

37-
Currently Nydus includes following tools:
37+
## Key features
38+
39+
- **On-demand Load**: Container images/packages are downloaded on-demand in chunk unit to boost startup.
40+
- **Chunk Deduplication**: Chunk level data de-duplication cross-layer or cross-image to reduce storage, transport, and memory cost.
41+
- **Compatible with Ecosystem**: Storage backend support with Registry, OSS, NAS, Shared Disk, and [P2P service](https://d7y.io/). Compatible with the [OCI images](https://github.com/dragonflyoss/image-service/blob/master/docs/nydus-zran.md), and provide native [eStargz images](https://github.com/containerd/stargz-snapshotter) support.
42+
- **Data Analyzability**: Record accesses, data layout optimization, prefetch, IO amplification, abnormal behavior detection.
43+
- **POSIX Compatibility**: In-Kernel EROFS or FUSE filesystems together with overlayfs provide full POSIX compatibility
44+
- **I/O optimization**: Use merged filesystem tree, data prefetching and User I/O amplification to reduce read latency and improve user I/O performance.
45+
46+
## Ecosystem
47+
### Nydus tools
3848

3949
| Tool | Description |
4050
| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
@@ -47,30 +57,25 @@ Currently Nydus includes following tools:
4757
| [nydus-overlayfs](https://github.com/dragonflyoss/image-service/tree/master/contrib/nydus-overlayfs) | `Containerd` mount helper to invoke overlayfs mount with tweaking mount options a bit. So nydus prerequisites can be passed to vm-based runtime |
4858
| [nydus-backend-proxy](./contrib/nydus-backend-proxy/README.md) | A simple HTTP server to serve local directory as a blob backend for nydusd |
4959

50-
Currently Nydus is supporting the following platforms in container ecosystem:
60+
### Supported platforms
5161

5262
| Type | Platform | Description | Status |
5363
| ------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ |
5464
| Storage | Registry/OSS/S3/NAS | Support for OCI-compatible distribution implementations such as Docker Hub, Harbor, Github GHCR, Aliyun ACR, NAS, and Aliyun OSS-like object storage service ||
5565
| Storage/Build | [Harbor](https://github.com/goharbor/acceleration-service) | Provides a general service for Harbor to support acceleration image conversion based on kinds of accelerator like Nydus and eStargz etc ||
5666
| Distribution | [Dragonfly](https://github.com/dragonflyoss/Dragonfly2) | Improve the runtime performance of Nydus image even further with the Dragonfly P2P data distribution system ||
5767
| Build | [Buildkit](https://github.com/moby/buildkit/blob/master/docs/nydus.md) | Provides the ability to build and export Nydus images directly from Dockerfile ||
68+
| Build/Runtime | [Nerdctl](https://github.com/containerd/nerdctl/blob/master/docs/nydus.md) | The containerd client to build or run (requires nydus snapshotter) Nydus image ||
69+
| Runtime | [Docker / Moby](https://github.com/dragonflyoss/image-service/blob/master/docs/docker-env-setup.md) | Run Nydus image in Docker container with containerd and nydus-snapshotter ||
5870
| Runtime | [Kubernetes](https://github.com/containerd/nydus-snapshotter/blob/main/docs/run_nydus_in_kubernetes.md) | Run Nydus image using CRI interface ||
5971
| Runtime | [Containerd](https://github.com/containerd/nydus-snapshotter) | Nydus Snapshotter, a containerd remote plugin to run Nydus image ||
6072
| Runtime | [CRI-O / Podman](https://github.com/containers/nydus-storage-plugin) | Run Nydus image with CRI-O or Podman | 🚧 |
61-
| Runtime | [Docker / Moby](https://github.com/dragonflyoss/image-service/blob/master/docs/docker-env-setup.md) | Run Nydus image in Docker container with containerd and nydus-snapshotter ||
62-
| Build/Runtime | [Nerdctl](https://github.com/containerd/nerdctl/blob/master/docs/nydus.md) | The containerd client to build or run (requires nydus snapshotter) Nydus image ||
6373
| Runtime | [KataContainers](https://github.com/kata-containers/kata-containers/blob/main/docs/design/kata-nydus-design.md) | Run Nydus image in KataContainers as a native solution ||
6474
| Runtime | [EROFS](https://www.kernel.org/doc/html/latest/filesystems/erofs.html) | Run Nydus image directly in-kernel EROFS for even greater performance improvement ||
6575

66-
To try nydus image service:
67-
68-
1. Convert an original OCI image to nydus image and store it somewhere like Docker/Registry, NAS, Aliyun/OSS or S3. This can be directly done by `nydusify`. Normal users don't have to get involved with `nydus-image`.
69-
2. Get `nydus-snapshotter`(`containerd-nydus-grpc`) installed locally and configured properly. Or install `nydus-docker-graphdriver` plugin.
70-
3. Operate container in legacy approaches. For example, `docker`, `nerdctl`, `crictl` and `ctr`.
71-
72-
## Build Binary
76+
## Build
7377

78+
### Build Binary
7479
```shell
7580
# build debug binary
7681
make
@@ -80,88 +85,80 @@ make release
8085
make docker-static
8186
```
8287

83-
## Quick Start with Kubernetes and Containerd
88+
### Build Nydus Image
8489

85-
For more details on how to lazily start a container with `nydus-snapshotter` and nydus image on Kubernetes nodes or locally use `nerdctl` rather than CRI, please refer to [Nydus Setup](./docs/containerd-env-setup.md)
90+
Convert OCIv1 image to Nydus image: [Nydusify](./docs/nydusify.md), [Acceld](https://github.com/goharbor/acceleration-service) or [Nerdctl](https://github.com/containerd/nerdctl/blob/master/docs/nydus.md#build-nydus-image-using-nerdctl-image-convert).
8691

87-
## Build Nydus Image
92+
Build Nydus image from Dockerfile directly: [Buildkit](https://github.com/moby/buildkit/blob/master/docs/nydus.md).
8893

89-
Build Nydus image from directory source: [Nydus Image Builder](./docs/nydus-image.md).
94+
Build Nydus layer from various sources: [Nydus Image Builder](./docs/nydus-image.md).
9095

91-
Convert OCIv1 image to Nydus image: [Nydusify](./docs/nydusify.md), [Acceld](https://github.com/goharbor/acceleration-service) or [Nerdctl](https://github.com/containerd/nerdctl/blob/master/docs/nydus.md#build-nydus-image-using-nerdctl-image-convert).
96+
#### Image prefetch optimization
97+
To further reduce container startup time, a nydus image with a prefetch list can be built using the NRI plugin (containerd >=1.7): [Container Image Optimizer](https://github.com/containerd/nydus-snapshotter/blob/main/docs/optimize_nydus_image.md)
9298

93-
Optionally, a containerd(>=1.7) NRI plugin - [container image optimizer](https://github.com/containerd/nydus-snapshotter/blob/main/docs/optimize_nydus_image.md) - can be leveraged to build an optimized nydus image which will reduce the container startup time further.
99+
## Run
100+
### Quick Start
94101

95-
## Nydus Snapshotter
102+
For more details on how to lazily start a container with `nydus-snapshotter` and nydus image on Kubernetes nodes or locally use `nerdctl` rather than CRI, please refer to [Nydus Setup](./docs/containerd-env-setup.md)
103+
104+
### Run Nydus Snapshotter
96105

97106
Nydus-snapshotter is a non-core sub-project of containerd.
98107

99108
Check out its code and tutorial from [Nydus-snapshotter repository](https://github.com/containerd/nydus-snapshotter).
100109
It works as a `containerd` remote snapshotter to help setup container rootfs with nydus images, which handles nydus image format when necessary. When running without nydus images, it is identical to the containerd's builtin overlayfs snapshotter.
101110

102-
## Run Nydusd Daemon
111+
### Run Nydusd Daemon
103112

104113
Normally, users do not need to start `nydusd` by hand. It is started by `nydus-snapshotter` when a container rootfs is prepared.
105114

106115
Run Nydusd Daemon to serve Nydus image: [Nydusd](./docs/nydusd.md).
107116

108-
## Run Nydus with in-kernel EROFS filesystem
117+
### Run Nydus with in-kernel EROFS filesystem
109118

110119
In-kernel EROFS has been fully compatible with RAFS v6 image format since Linux 5.16. In other words, uncompressed RAFS v6 images can be mounted over block devices since then.
111120

112121
Since [Linux 5.19](https://lwn.net/Articles/896140), EROFS has added a new file-based caching (fscache) backend. In this way, compressed RAFS v6 images can be mounted directly with fscache subsystem, even such images are partially available. `estargz` can be converted on the fly and mounted in this way too.
113122

114123
Guide to running Nydus with fscache: [Nydus-fscache](./docs/nydus-fscache.md)
115124

116-
## Run Nydus with Dragonfly P2P system
125+
### Run Nydus with Dragonfly P2P system
117126

118127
Nydus is deeply integrated with [Dragonfly](https://d7y.io/) P2P system, which can greatly reduce the network latency and the single point of network pressure for registry server, testing in the production environment shows that using Dragonfly can reduce network latency by more than 80%, to understand the performance test data and how to configure Nydus to use Dragonfly, please refer to the [doc](https://d7y.io/docs/setup/integration/nydus).
119128

120-
## Accelerate OCI image directly with Nydus
129+
### Run OCI image directly with Nydus
121130

122131
Nydus is able to generate a tiny artifact called a `nydus zran` from an existing OCI image in the short time. This artifact can be used to accelerate the container boot time without the need for a full image conversion. For more information, please see the [documentation](./docs/nydus-zran.md).
123132

124-
## Build Images via Harbor
125-
126-
Nydus cooperates with Harbor community to develop [acceleration-service](https://github.com/goharbor/acceleration-service) which provides a general service for Harbor to support image acceleration based on kinds of accelerators like Nydus, eStargz, etc.
127-
128-
## Run with Docker
133+
### Run with Docker(Moby)
129134

130-
A **experimental** plugin helps to start Docker container from nydus image. For more particular instructions, please refer to [Docker Nydus Graph Driver](https://github.com/nydusaccelerator/docker-nydus-graphdriver)
135+
Nydus provides a variety of methods to support running on docker(Moby), please refer to [Nydus Setup for Docker(Moby) Environment](./docs/docker-env-setup.md)
131136

132-
## Run with macOS
137+
### Run with macOS
133138

134-
Nydus can also run with macfuse(a.k.a osxfuse).For more details please read [nydus with macOS](./docs/nydus_with_macos.md).
139+
Nydus can also run with macfuse(a.k.a osxfuse). For more details please read [nydus with macOS](./docs/nydus_with_macos.md).
135140

136-
## Run eStargz image (with lazy pulling)
141+
### Run eStargz image (with lazy pulling)
137142

138143
The containerd remote snapshotter plugin [nydus-snapshotter](https://github.com/containerd/nydus-snapshotter) can be used to run nydus images, or to run [eStargz](https://github.com/containerd/stargz-snapshotter) images directly by appending `--enable-stargz` command line option.
139144

140145
In the future, `zstd::chunked` can work in this way as well.
141146

142-
## Reuse Nydus Services
147+
### Run Nydus Service
143148

144149
Using the key features of nydus as native in your project without preparing and invoking `nydusd` deliberately, [nydus-service](./service/README.md) helps to reuse the core services of nyuds.
145150

146-
147151
## Documentation
148152

149-
Browse the documentation to learn more. Here are some topics you may be interested in:
150-
151-
- [A Nydus Tutorial for Beginners](./docs/tutorial.md)
152-
- [Nydus Design Doc](./docs/nydus-design.md)
153-
- Our talk on Open Infra Summit 2020: [Toward Next Generation Container Image](https://drive.google.com/file/d/1LRfLUkNxShxxWU7SKjc_50U0N9ZnGIdV/view)
154-
- [EROFS, What Are We Doing Now For Containers?](https://static.sched.com/hosted_files/kccncosschn21/fd/EROFS_What_Are_We_Doing_Now_For_Containers.pdf)
155-
- [The Evolution of the Nydus Image Acceleration](https://d7y.io/blog/2022/06/06/evolution-of-nydus/) \([Video](https://youtu.be/yr6CB1JN1xg)\)
156-
- [Introduction to Nydus Image Service on In-kernel EROFS](https://static.sched.com/hosted_files/osseu2022/59/Introduction%20to%20Nydus%20Image%20Service%20on%20In-kernel%20EROFS.pdf) \([Video](https://youtu.be/2Uog-y2Gcus)\)
153+
Please visit [**Wiki**](https://github.com/dragonflyoss/image-service/wiki), or [**docs**](./docs)
157154

158155
## Community
159156

160157
Nydus aims to form a **vendor-neutral opensource** image distribution solution to all communities.
161158
Questions, bug reports, technical discussion, feature requests and contribution are always welcomed!
162159

163160
We're very pleased to hear your use cases any time.
164-
Feel free to reach/join us via Slack and/or Dingtalk.
161+
Feel free to reach us via Slack or Dingtalk.
165162

166163
- **Slack:** [Nydus Workspace](https://join.slack.com/t/nydusimageservice/shared_invite/zt-pz4qvl4y-WIh4itPNILGhPS8JqdFm_w)
167164

0 commit comments

Comments
 (0)