Quickstart
Five minutes from an empty account to an image you can pull anywhere.
1. Create a project
In the panel, use the + button and choose New project. The name becomes the second segment of every image reference in it, so pick something short — an organisation or a team name works well.
A project reserves storage from your plan's pool. You can change the allocation later without repushing anything.
2. Log in
sudo docker login lazer.shThere is no account password. Mint an API key in the panel and paste that when Docker prompts for one. For anything automated, use a narrowly scoped key and pipe it in:
echo "$LAZER_KEY" | sudo docker login lazer.sh -u ci --password-stdinThe username is ignored when you present a key — the scopes on the key decide what you can do. See keys and scopes.
3. Push an image
Tag with the full reference, including the registry host, then push:
sudo docker tag api:2.4.1 lazer.sh/acme/api:2.4.1
sudo docker push lazer.sh/acme/api:2.4.1The repository is created on first push. You do not need to create it in the panel first.
Layers you have already pushed are deduplicated within the project, so the second image that shares a base only uploads what actually changed.
4. Pull it back
sudo docker pull lazer.sh/acme/api:2.4.1That pull is served from the edge location nearest to whatever ran it, and it does not count against anything. Pull as often as your CI likes.
5. Pull from Kubernetes
Create a pull secret from a key scoped to pull only, then reference it:
kubectl create secret docker-registry lazer \
--docker-server=lazer.sh \
--docker-username=k8s \
--docker-password="$LAZER_PULL_KEY"spec:
imagePullSecrets:
- name: lazer
containers:
- name: api
image: lazer.sh/acme/api:2.4.1There is more detail, including per-namespace secrets, in the Kubernetes guide.
What next
Set a retention rule before your storage grows, and wire up GitHub Actions so pushes happen without a human.