DEV Community

Cover image for kind - Loading Custom Docker Image into the Cluster - Part 2
Unni P
Unni P

Posted on • Originally published at iamunnip.hashnode.dev

kind - Loading Custom Docker Image into the Cluster - Part 2

In this article we will talk about how we can create a custom Docker image and load to our kind cluster

Prerequisites

We need a running kind cluster to do our tasks

$ kubectl get nodes NAME STATUS ROLES AGE VERSION dev-control-plane Ready control-plane 25s v1.26.3 
Enter fullscreen mode Exit fullscreen mode

Building Docker Image

Create a sample index.html file

$ echo “Hello from Pod!” > index.html 
Enter fullscreen mode Exit fullscreen mode

Write a Dockerfile for our custom application

$ cat Dockerfile FROM nginx:1.23 COPY index.html /usr/share/nginx/html 
Enter fullscreen mode Exit fullscreen mode

Now we have index.html and Dockerfile in the working directory

$ tree . ├── Dockerfile └── index.html 0 directories, 2 files 
Enter fullscreen mode Exit fullscreen mode

Build the image using Dockerfile

$ docker image build -f Dockerfile -t my-app:v1 . [+] Building 0.9s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 91B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/nginx:1.23 0.9s => [1/2] FROM docker.io/library/nginx:1.23@sha256:63b44e8ddb83d5dd8020327c1f40436e37a6fffd3ef2498a6204df23be6e7e94 0.0s => [internal] load build context 0.0s => => transferring context: 31B 0.0s => CACHED [2/2] COPY index.html /usr/share/nginx/html 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:e7d1111901cd427f155186597c1dfc850e1a7656b9ad0291f23e8a9dcc60e1de 0.0s => => naming to docker.io/library/my-app:v1 
Enter fullscreen mode Exit fullscreen mode
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my-app v1 e7d1111901cd About a minute ago 142MB kindest/node <none> 36d37c652064 3 weeks ago 936MB 
Enter fullscreen mode Exit fullscreen mode

Deploying Application

Now our custom Docker image is ready and we can load it to our Kubernetes cluster

$ kind load docker-image my-app:v1 --name dev Image: "my-app:v1" with ID "sha256:e7d1111901cd427f155186597c1dfc850e1a7656b9ad0291f23e8a9dcc60e1de" not yet present on node "dev-control-plane", loading... 
Enter fullscreen mode Exit fullscreen mode

We can get a list of images loaded in our cluster using the below command

$ docker container exec -it dev-control-plane crictl images IMAGE TAG IMAGE ID SIZE docker.io/library/my-app v1 e7d1111901cd4 147MB registry.k8s.io/kube-controller-manager v1.26.3 cb77c367deebf 68.5MB registry.k8s.io/kube-proxy v1.26.3 eb3079d47a23a 67.2MB registry.k8s.io/kube-scheduler v1.26.3 dec886d066492 57.8MB docker.io/library/import-2023-04-20 <none> 1e4c13e43754c 147MB registry.k8s.io/coredns/coredns v1.9.3 5185b96f0becf 14.8MB registry.k8s.io/etcd 3.5.6-0 fce326961ae2d 103MB registry.k8s.io/pause 3.7 221177c6082a8 311kB docker.io/kindest/local-path-helper:v20230330-48f316cd <none> 37af659db0ba1 3.05MB docker.io/kindest/local-path-provisioner:v0.0.23-kind.0 <none> c408b2276bb76 18.7MB registry.k8s.io/kube-apiserver v1.26.3 801fc1f38fa6c 80.4MB 
Enter fullscreen mode Exit fullscreen mode

Create a pod using our custom image and expose it as ClusterIP

$ kubectl run my-app --image=my-app:v1 --port=80 --expose service/my-app created pod/my-app created 
Enter fullscreen mode Exit fullscreen mode
$ kubectl get pods,svc NAME READY STATUS RESTARTS AGE pod/my-app 1/1 Running 0 7s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 57m service/my-app ClusterIP 10.96.168.181 <none> 80/TCP 7s 
Enter fullscreen mode Exit fullscreen mode

Once our pod is running, verify our application using the below command.

From the output, we can see the “Hello from Pod!” message.

$ kubectl run busybox --image=busybox --restart=Never --rm -it -- wget -O- http://my-app Connecting to my-app (10.96.168.181:80) writing to stdout Hello from Pod! - 100% |********************************| 16 0:00:00 ETA written to stdout pod "busybox" deleted 
Enter fullscreen mode Exit fullscreen mode

Cleanup

Deleting our cluster

$ kind delete cluster --name dev Deleting cluster "dev" ... Deleted nodes: ["dev-control-plane"] 
Enter fullscreen mode Exit fullscreen mode

Reference

https://kind.sigs.k8s.io/

Top comments (0)