Skip to main content

Customize applications image

Build a CloudImage from helm

See Building an Example CloudImage.

Build calico image

Directory structure

.
├── Kubefile
├── cni
│   ├── custom-resources.yaml
│   └── tigera-operator.yaml
├── images
│   └── shim
│   └── CalicoImageList
└── registry
└── docker
└── registry

Dockerfile

We can build everything into a single image (FROM labring/kubernetes), or we can build applications images where FROM scratch is used.

FROM labring/kubernetes:v1.24.0
COPY cni ./cni
COPY images ./images
COPY registry ./registry
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"]
  1. CalicoImageList is docker image list file.
  2. cni contains kubectl apply config files.
  3. registry is the registry data directory.
  4. sealos build -t kubernetes-calico:1.24.0-amd64 -f Kubefile . builds the oci image.
  5. manifests parse yaml images to docker image list.

Build calico image

Directory structure

.
├── Kubefile
├── cni
│   ├── custom-resources.yaml
│   └── tigera-operator.yaml

Dockerfile

This image contains kubernetes and calico.
FROM labring/kubernetes:v1.24.0-amd64
COPY cni ./cni
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml"]
  1. cni contains kubectl apply config files
  2. sealos build -t kubernetes-calico:1.24.0-amd64 --platform linux/amd64 -f Kubefile . builds the oci image.

Build openebs image

Directory structure

.
├── Kubefile
├── cni
│   ├── custom-resources.yaml
│   └── tigera-operator.yaml
└── manifests
└── openebs-operator.yaml

Dockerfile

FROM labring/oci-kubernetes-calico:1.24.0-amd64
COPY cni ./cni
COPY manifests ./manifests
CMD ["kubectl apply -f cni/tigera-operator.yaml","kubectl apply -f cni/custom-resources.yaml","kubectl apply -f manifests/openebs-operator.yaml"]
  1. cni contains kubectl apply config files
  2. sealos build -t labring/kubernetes-calico-openebs:1.24.0-amd64 --platform linux/amd64 -f Kubefile . builds the oci image.
tip

You'll need to add calico cmd to openebs cmd layer, because dockerfile overrides the old layer.

Build multi-architecture images

$ sealos build -t $prefix/oci-kubernetes:$version-amd64 --platform linux/amd64 -f Kubefile  .
$ sealos build -t $prefix/oci-kubernetes:$version-arm64 --platform linux/arm64 -f Kubefile .

$ buildah login --username $username --password $password $domain
$ buildah push $prefix/oci-kubernetes:$version-amd64
$ buildah push $prefix/oci-kubernetes:$version-arm64
$ buildah manifest create $prefix/oci-kubernetes:$version
$ buildah manifest add $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version-amd64
$ buildah manifest add $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version-arm64
$ buildah manifest push --all $prefix/oci-kubernetes:$version docker://$prefix/oci-kubernetes:$version