Is Dockerfile only for building container images or we can do more with it? How about using Docker multi-stage builds to compile binaries, run tests, and other operations typically performed before building container images?
k3d is a lightweight wrapper to run Rancher k3s in Docker. k3d allows us to create single-node and multi-node k3s clusters in Docker, for local development on Kubernetes, or as temporary testing environment.
Portainer is the definitive open source container management tool for Kubernetes, Docker, Docker Swarm and Azure ACI. It allows anyone to deploy and manage containers without the need to write code. Continue reading →
Skaffold allows us to build, push, and deploy applications into any Kubernetes environment by combining a myriad of tools like Docker, Kaniko, Bazel, jib, Buildpacks, Helm kpt, Kustomize, kubectl, etc.
Dockershim has been deprecated in Kubernetes 1.20 and is scheduled to be removed in 1.22. That effectively killed Docker in Kubernetes. When your clusters are concerned, it is dead. What should we do about that?
The setup of a development environment tends to be complicated, time-consuming, and expensive.
Gitpod changes the way we think about development environments. It gives us an IDE to write code, all the tools we need to compile our applications, run tests, and do whatever else we might be doing. It gives us the infrastructure we need. It allows us to onboard anyone into any project instantly.
How do we build container images inside containers running in a Kubernetes cluster? Docker is a bad option since it cannot run inside containers. Using it requires communication to the Docker engine running in cluster nodes. Even if that security concern is not enough, Dockershim is deprecated in Kubernetes 1.20 and will be (or already is) removed from 1.22. That means that alternative container engines like ContainerD will take its place. In other words, using Docker is not even an option anymore.
Kaniko comes to the rescue. It is a tool to build container images from a Dockerfile, inside a container or Kubernetes cluster.
Software development is hard. It takes years to become a proficient developer, and the tech and the processes change every so often. What was effective yesterday, is not necessarily effective today. The number of languages we code in is increasing. While in the past, most developers would work in the same language throughout their whole carrier, today it is not uncommon for a developer to work on multiple projects written in different languages. We might, for example, work on a new project and code in Go, while we still need to maintain some other project written in Java. For us to be efficient, we need to install compilers, helper libraries, and quite a few other things. Continue reading →
The difference between continuous integration, delivery, and deployment is not in processes, but in the level of confidence we have in them.
The continuous deployment process is relatively easy to explain, even though implementation might get tricky. We’ll split our requirements into two groups. We’ll start with a discussion about the overall goals that should be applied to the whole process. To be more precise, we’ll talk about what I consider non-negotiable requirements. Continue reading →