Go to file
l4p1n ea39aa1623
Set content length on the initiate upload endpoint
2023-07-31 10:56:05 +02:00
app Set content length on the initiate upload endpoint 2023-07-31 10:56:05 +02:00
bootstrap 1st commit 2022-12-30 19:56:05 +01:00
config 1st commit 2022-12-30 19:56:05 +01:00
database Delete superfluous files 2023-07-30 16:51:29 +02:00
documentation Document project in the README file 2022-12-30 19:56:10 +01:00
lang/en 1st commit 2022-12-30 19:56:05 +01:00
public 1st commit 2022-12-30 19:56:05 +01:00
resources 1st commit 2022-12-30 19:56:05 +01:00
routes Use Laravel's implicit route binding in uploads controller 2023-07-30 16:50:19 +02:00
storage 1st commit 2022-12-30 19:56:05 +01:00
tests 1st commit 2022-12-30 19:56:05 +01:00
.editorconfig 1st commit 2022-12-30 19:56:05 +01:00
.env.example 1st commit 2022-12-30 19:56:05 +01:00
.gitattributes 1st commit 2022-12-30 19:56:05 +01:00
.gitignore Add Laravel IDE helper files to gitignore 2022-12-30 19:56:06 +01:00
LICENSE 1st commit 2022-12-30 19:56:05 +01:00
README.md Document project in the README file 2022-12-30 19:56:10 +01:00
artisan 1st commit 2022-12-30 19:56:05 +01:00
composer.json Serve a container layer straight from the upstream registry 2022-12-30 19:56:08 +01:00
composer.lock Use Laravel's native ULID support 2022-12-30 19:56:07 +01:00
package.json 1st commit 2022-12-30 19:56:05 +01:00
phpunit.xml 1st commit 2022-12-30 19:56:05 +01:00
vite.config.js 1st commit 2022-12-30 19:56:05 +01:00

README.md

Docker container registry and proxy API

his project aims to implement a Docker Registry HTTP API that can also act as a proxy to other registries with a dedicated path for that purpose. In other words, it's a storage for your own Docker images and a cache for others. If you're using GitLab, this will probably remind you of the Container Registry and the Dependency Proxy.

Note: This project is not production-ready and should be used at your own risk !

Repository architecture

Diagram illustrating the components architecture of the registry, with the SQLite 3 database, S3 bucket, remote registry and Docker client

Why not Docker's Go implementation of the registry ?

While installing the registry was a breeze, I can't make it work as a pull-through registry and a storage registry at the same time. It's either one, or the other. While I could set up another registry (pretty much automated with Ansible), that would mean grabbing another TLS certificate, setting up another subdomain and configure the HTTP reverse proxy appropriately. Let alone configuring the HTTP reverse-proxy to use only one domain.

Current limitations

Implementing the entire Docker Registry HTTP API V2 specification is not really the final goal of the project. As long as I can push and pull images with the docker client and the Kaniko container builder, I will be fine.

While uploads are more or less cleaned after, the files stored on the S3 bucket are not. Cleaning manifests and pruning will be implemented whenever the storage on my side is close to being out of control, or earlier. In other words, deleting a file from the S3 storage while keeping the database as is WILL BREAK the repository for that container.

License

Copyright 2022 Mathias B. contact@l4p1n.ch

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.