You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+2-173Lines changed: 2 additions & 173 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,7 @@ This tool implements **streaming-based layer processing** using the OCI client l
21
21
22
22
- ✅ **Streaming Downloads**: Layers are streamed directly to disk without loading into memory
23
23
- ✅ **Sequential Processing**: Processes one layer at a time to minimize memory footprint
24
-
- ✅ **Chunked Uploads**: Large layers (>100MB) are read in 50MB chunks during upload
24
+
- ✅ **Chunked Uploads**: Layers ≥500MB stream in ~5MB chunks (auto-expands when registries demand larger slices)
25
25
- ✅ **Local Caching**: Efficient caching system for faster subsequent operations
26
26
- ✅ **Progress Monitoring**: Real-time feedback on transfer progress and layer sizes
27
27
@@ -47,12 +47,6 @@ can be embedded in other tools. It exposes:
47
47
Rust itself treats the `core` crate. This keeps the CLI boundary clean while enabling other
48
48
projects to reuse the same stable OCI primitives without pulling in the rest of the binary.
49
49
50
-
## 📋 Prerequisites
51
-
52
-
-**Rust**: Version 1.70 or later
53
-
-**Network Access**: To source and target registries
54
-
-**Disk Space**: Sufficient space for caching large images
55
-
56
50
## 🛠️ Installation
57
51
58
52
### Download Pre-built Binaries (Recommended)
@@ -143,11 +137,6 @@ The `push` command now handles most of the bookkeeping automatically:
143
137
- imports `docker save` archives on the fly before uploading
144
138
- reuses saved logins unless you pass explicit `--username/--password`
145
139
146
-
### Tips
147
-
148
-
- Need a different account temporarily? Pass `--username/--password` (or use env vars such as `DOCKER_USERNAME`) and they override stored credentials for that run only.
149
-
- Prefer scripting? Keep everything declarative: `login` once inside CI, then run `pull`, `push`, done.
150
-
- Unsure what target was used last time? Run `push` without `-t`; the history-based inference will suggest a sane default and print it before uploading.
151
140
152
141
## 🏗️ Architecture
153
142
@@ -193,168 +182,8 @@ Tar archives produced by `save` live wherever you choose to write them (current
193
182
4. **Layer/config upload** – reuse existing blobs when present, otherwise stream in fixed-size chunks with telemetry.
194
183
5. **Manifest publish** – rebuild the OCI manifest and push it once all blobs are present.
|< 100MB | Direct Read |~Layer Size | Read entire layer into memory |
201
-
|> 100MB | Chunked Read |~50MB | Read in 50MB chunks with delays |
202
-
| Any Size | Streaming |~Buffer Size | Direct stream to/from disk |
203
-
| Pipeline | Parallel Uploads |~Buffer Size per worker | Extraction publishes layers into an async queue while up to 3 concurrent upload tasks push blobs |
204
-
205
-
Layer extraction now feeds an async channel as soon as each blob hits disk, so uploading overlaps with the remaining tar processing. The default concurrency spins up three upload tasks (tunable in code) to take advantage of multi-core hosts and higher latency links, while still honoring the sequential manifest ordering when publishing.
0 commit comments