This directory contains scripts and descriptions that can be used to build and then push Docker images in Kubernetes.
If you log in to a Docker registry using the docker login command the file
$HOME/.docker/config.json
is being created. We can reuse that file for
creating the Docker registry secret.
kubectl create secret generic docker-image-builder-secret \
--from-file=.dockerconfigjson=${HOME}/.docker/config.json
Create a secret in your Kubernetes cluster that stores your Docker registry credentials:
kubectl create secret docker-registry docker-image-builder-secret \
--docker-server=DOCKER_REGISTRY_SERVER \
--docker-username=DOCKER_USER \
--docker-password=DOCKER_PASSWORD \
--docker-email=DOCKER_EMAIL
secret "docker-image-builder-secret" created
After the Docker secret and build configuration is stored you can start the job that builds and pushes the Docker image:
yemplate -s "gitrepo=https://github.com/origoss/dockergit.git" \
-s "tags[0]=docker.origoss.local/dockergit:latest" \
-s "tags[1]=origoss/dockergit:18.04.0-ce" \
-s "tags[2]=origoss/dockergit:latest" \
-t docker-build.yaml.t | \
kubectl apply -f -
job.batch "docker-image-builder" created
After the job is started you can check the status of the started pods with the following command:
kubectl get job/docker-image-builder \
--template="Job's pod status:
Active: {{or .status.active "0"}}
Succ: {{or .status.succeeded "0"}}
Fail: {{or .status.failed "0"}}"
Job's pod status: Active: 1 Succ: 0 Fail: 0
Use can use the simple waitjob.sh
script that waits until the job succeeds
or fails:
./waitjob.sh docker-image-builder
active: 1 active: 1 active: 1 active: 1 active: 1 active: 1 active: 1 active: 1 Success
To list the started pods:
kubectl get pods \
-l controller-uid=$(kubectl get job/docker-image-builder \
--template="{{.metadata.uid}}")
NAME READY STATUS RESTARTS AGE docker-image-builder-fzkg8 0/1 Completed 0 24s
If needed, the logs of a pod can be checked
kubectl logs docker-image-builder-fzkg8
docker build -t docker.origoss.local/dockergit:latest -t origoss/dockergit:18.04.0-ce -t origoss/dockergit:latest . Sending build context to Docker daemon 128kB Step 1/2 : FROM docker:18.04.0-ce ---> 41e946672182 Step 2/2 : RUN apk add --no-cache git ---> Using cache ---> b64c04925efb Successfully built b64c04925efb docker push docker.origoss.local/dockergit:latest The push refers to a repository [docker.origoss.local/dockergit] 1760eedac57c: Preparing b446e0d8c3ad: Preparing 9b4ada052f34: Preparing ecbc5c1a59c8: Preparing b09386d6aa0f: Preparing 1ed7a5e2d1b3: Preparing cd7100a72410: Preparing 1ed7a5e2d1b3: Waiting cd7100a72410: Waiting 1760eedac57c: Layer already exists ecbc5c1a59c8: Layer already exists b09386d6aa0f: Layer already exists b446e0d8c3ad: Layer already exists 9b4ada052f34: Layer already exists 1ed7a5e2d1b3: Layer already exists cd7100a72410: Layer already exists latest: digest: sha256:66194bcef7519f144535e78c84b9acbdfd4d06b3fb4f3757b28b9b36a7a48d73 size: 1782 docker push origoss/dockergit:18.04.0-ce The push refers to a repository [docker.io/origoss/dockergit] 1760eedac57c: Preparing b446e0d8c3ad: Preparing 9b4ada052f34: Preparing ecbc5c1a59c8: Preparing b09386d6aa0f: Preparing 1ed7a5e2d1b3: Preparing cd7100a72410: Preparing 1ed7a5e2d1b3: Waiting cd7100a72410: Waiting 9b4ada052f34: Layer already exists b446e0d8c3ad: Layer already exists b09386d6aa0f: Layer already exists ecbc5c1a59c8: Layer already exists 1760eedac57c: Layer already exists 1ed7a5e2d1b3: Layer already exists cd7100a72410: Layer already exists 18.04.0-ce: digest: sha256:ca29af0618444f37303ed2df1948e440200bbe70e537c0c3cfb0b9afbfad3249 size: 1782 docker push origoss/dockergit:latest The push refers to a repository [docker.io/origoss/dockergit] 1760eedac57c: Preparing b446e0d8c3ad: Preparing 9b4ada052f34: Preparing ecbc5c1a59c8: Preparing b09386d6aa0f: Preparing 1ed7a5e2d1b3: Preparing cd7100a72410: Preparing 1ed7a5e2d1b3: Waiting cd7100a72410: Waiting 9b4ada052f34: Layer already exists b09386d6aa0f: Layer already exists b446e0d8c3ad: Layer already exists 1760eedac57c: Layer already exists ecbc5c1a59c8: Layer already exists 1ed7a5e2d1b3: Layer already exists cd7100a72410: Layer already exists latest: digest: sha256:ca29af0618444f37303ed2df1948e440200bbe70e537c0c3cfb0b9afbfad3249 size: 1782
You can also use the simple joblog.sh
script to check the logs of the pods
belonging to the job:
./joblog.sh docker-image-builder
----------------------------------------------------------- Logs of docker-image-builder-fzkg8 docker build -t docker.origoss.local/dockergit:latest -t origoss/dockergit:18.04.0-ce -t origoss/dockergit:latest . Sending build context to Docker daemon 128kB Step 1/2 : FROM docker:18.04.0-ce ---> 41e946672182 Step 2/2 : RUN apk add --no-cache git ---> Using cache ---> b64c04925efb Successfully built b64c04925efb docker push docker.origoss.local/dockergit:latest The push refers to a repository [docker.origoss.local/dockergit] 1760eedac57c: Preparing b446e0d8c3ad: Preparing 9b4ada052f34: Preparing ecbc5c1a59c8: Preparing b09386d6aa0f: Preparing 1ed7a5e2d1b3: Preparing cd7100a72410: Preparing 1ed7a5e2d1b3: Waiting cd7100a72410: Waiting 1760eedac57c: Layer already exists ecbc5c1a59c8: Layer already exists b09386d6aa0f: Layer already exists b446e0d8c3ad: Layer already exists 9b4ada052f34: Layer already exists 1ed7a5e2d1b3: Layer already exists cd7100a72410: Layer already exists latest: digest: sha256:66194bcef7519f144535e78c84b9acbdfd4d06b3fb4f3757b28b9b36a7a48d73 size: 1782 docker push origoss/dockergit:18.04.0-ce The push refers to a repository [docker.io/origoss/dockergit] 1760eedac57c: Preparing b446e0d8c3ad: Preparing 9b4ada052f34: Preparing ecbc5c1a59c8: Preparing b09386d6aa0f: Preparing 1ed7a5e2d1b3: Preparing cd7100a72410: Preparing 1ed7a5e2d1b3: Waiting cd7100a72410: Waiting 9b4ada052f34: Layer already exists b446e0d8c3ad: Layer already exists b09386d6aa0f: Layer already exists ecbc5c1a59c8: Layer already exists 1760eedac57c: Layer already exists 1ed7a5e2d1b3: Layer already exists cd7100a72410: Layer already exists 18.04.0-ce: digest: sha256:ca29af0618444f37303ed2df1948e440200bbe70e537c0c3cfb0b9afbfad3249 size: 1782 docker push origoss/dockergit:latest The push refers to a repository [docker.io/origoss/dockergit] 1760eedac57c: Preparing b446e0d8c3ad: Preparing 9b4ada052f34: Preparing ecbc5c1a59c8: Preparing b09386d6aa0f: Preparing 1ed7a5e2d1b3: Preparing cd7100a72410: Preparing 1ed7a5e2d1b3: Waiting cd7100a72410: Waiting 9b4ada052f34: Layer already exists b09386d6aa0f: Layer already exists b446e0d8c3ad: Layer already exists 1760eedac57c: Layer already exists ecbc5c1a59c8: Layer already exists 1ed7a5e2d1b3: Layer already exists cd7100a72410: Layer already exists latest: digest: sha256:ca29af0618444f37303ed2df1948e440200bbe70e537c0c3cfb0b9afbfad3249 size: 1782
Finally, you can delete the job
kubectl delete job/docker-image-builder
job.batch "docker-image-builder" deleted