How to Run Locally Built Docker Images in Kubernetes
While working with Kubernetes locally, you may want to run some locally built Docker images in Kubernetes. This may not work out-of-the-box, because minikube uses its own local Docker registry that’s not connected to the one on your local machine.
In this article, I’ll show how easy it is to run locally built images in Kubernetes, without publishing them to a global registry. For this article, I suppose you already have kubectl and minikube installed locally. This article is targeted at the Linux environment.
I start with creating the following trivial
Dockerfilethat runs busybox and outputs “Hello World”:
FROM busyboxCMD [“echo”, “Hello World!”]
I now build it:
> docker build . -t forketyfork/hello-world
I can now run a container from this image and see that it works as expected:
> docker run forketyfork/hello-world
Next, I create the
helloworld.yml configuration file to run this container as a Kubernetes job:
- name: hello-world
Notice that I’ve specified the name of the image I just built and set the
Never so that it would only run once and terminate.
I now try to create a job out of this configuration file using
> kubectl create -f helloworld.yml
Let’s check if it worked, using the
kubectl get pods command:
> kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-world-lfrzh 0/1 ErrImagePull 0 6s
It didn’t work, and the pod failed with the
ErrImagePull status. The reason is Kubernetes tries to pull the image specified in
helloworld.yml, but this image is neither in the
minikube docker registry nor in the public Docker registry.
I don’t want to pull this image from a public registry since it’s only available locally. I fix this by setting the…