Your own hosting like a boss (3 of 5)
I’m going to need docker images and I don’t want to use a public repository.
There’s a Official repo called registry, now we can create our own image store.
Let’s create a new stack!
First we need to create the network:
docker network create registry_network --scope swarm
And we need a file to save the Basic Auth. Remember this user and password
mkdir -p registry/auth && mkdir -p registry/data
echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g > registry/auth/registry.password
Into Portainer go to Stacks and press “+ Add stack”.
Choose a name and paste this configuration:
version: "3.3"
services:
registry:
image: registry:2
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
REGISTRY_AUTH_HTPASSWD_REALM: Registry
volumes:
- ./registry/data:/var/lib/registry
- ./registry/auth:/auth
networks:
- registry_network
- portainer_default
labels:
- "traefik.enable=true"
- "traefik.docker.network=portainer_default"
- "traefik.http.routers.registry.rule=(Host(`registry.yourdomain.com`))"
- "traefik.http.routers.registry.entrypoints=websecure"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
- "traefik.http.services.registry.loadBalancer.sticky.cookie=true"
- "traefik.http.routers.registry.service=registry"
- "traefik.http.routers.registry.tls=true"
- "traefik.http.routers.registry.tls.certresolver=leresolver"
networks:
portainer_default:
external: true
registry_network:
external: true
Press deploy button and wait some seconds ⧖.
If everythig gone well you should login.
# docker login -u user -p password registry.contabo.bdunk.com
Login Succeeded
here you can find a very simple sample to make a image.
Building the image:
docker build .
Listing the images with docker images
`
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 60081ed32117 5 minutes ago 133MB
A quick test for the image:
docker run -p 8888:80 60081ed32117
Making a curl:
# curl localhost:8888
hello conch
Creating a tag for the image:
docker image tag 60081ed32117 registry.yourdomain.com/your-username/nginx-test:latest
And then push 🚀
# docker push registry.yourdomain.com/your-username/nginx-test
The push refers to repository [registry.yourdomain.com/moncho/nginx-test]
0b411e19d514: Pushed
1914a564711c: Mounted from your-username/nginx-test
db765d5bf9f8: Mounted from your-username/nginx-test
903ae422d007: Mounted from your-username/nginx-test
66f88fdd699b: Mounted from your-username/nginx-test
2ba086d0a00c: Mounted from your-username/nginx-test
346fddbbb0ff: Mounted from your-username/nginx-test
latest: digest: sha256:e7e7ff0a82e1a97630e9b40377c1e97fadad09072789f9b4ce4e664bcef50671 size: 1777
Yes! The image is now into the repository. Good Job!
Next part is about how to make auto deploys.
See you soon in part 4.