How to use a public registry

After building an image we can push it to one of the mainstream public registries. For this example we have created an account with https://hub.docker.com/ with the username kjackal.

First we run the login command:

docker login

Docker will ask for a Docker ID and password to complete the login.

Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: kjackal
Password: *******

Pushing to the registry requires that the image is tagged with your-hub-username/image-name:tag. We can either add proper tagging during build:

docker build . -t kjackal/mynginx:public

Or tag an already existing image using the image ID. Obtain the ID by running:

docker images

The ID is listed in the output:

REPOSITORY          TAG                 IMAGE ID            SIZE
mynginx             local               1fe3d8f47868        16.1MB
....

Then use the tag command:

docker tag 1fe3d8f47868 kjackal/mynginx:public

Now that the image is tagged correctly, it can be pushed to the registry:

docker push kjackal/mynginx

At this point we are ready to microk8s kubectl apply -f a deployment with our image:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: kjackal/mynginx:public
        ports:
        - containerPort: 80

We refer to the image as image: kjackal/mynginx:public. Kubernetes will search for the image in its default registry, docker.io.

There seems to be a functional bug in here:
When we are tagging an existing docker image we use: docker tag 1fe3d8f47868 kjackal/mynginx:public
But while pushing that image we use: docker push kjackal/mynginx

So now according to docker basics if we do not provide any tag to the image it will append latest as a tag so this command will through an error.

to remove this issue we can use any one method from below:

  1. change push command to → docker push kjackal/mynginx:public
  2. change tag command to → docker tag 1fe3d8f47868 kjackal/mynginx:latest