Developing container applications on Mac without Docker Desktop

For image download, domain name resolution and time synchronization, please click Alibaba open source mirror station

Docker Desktop is the most popular developer tool. Docker announced on August 31 that it has changed the user agreement of Docker Desktop, which will continue to be free for individual developers, but has adopted a charging strategy for commercial developers. Recently, many students came to ask me related questions, and I also made an explanation on this

Solution

As for the payment process for Docker Desktop, we have communicated with the group procurement team, but the License authorization of Docker company is somewhat complex. If the Pro version is purchased, each developer needs to pay for it, and batch procurement is not supported. The Business version supports batch purchase, but we don't need it. We are still following up on other feasibility, and we will continue to communicate with you.
If you only need to run the K8s environment, Alibaba cloud container service ACK is the most recommended solution, not one 😃
If you need a free local development environment and good hands-on ability, you can refer to the content of this article

Introduction to Minikube

Minikube is a popular open source Kubernetes development environment in the community. In order to help domestic students use minicube for daily development more efficiently and barrier free, minikube can support alicloud's mirror site as a container image. Furthermore, in the official minikube of v1.24.0, a scheme submitted by Alibaba cloud team has been merged, which can perfectly support the rich addon components of minikube!

Minikube can create Kubernetes running environment in MacOS/Windows/Linux environment with the help of different driver implementations.

This article will use the hyperkit driver to create a virtual machine on MacOS to configure the Minikube environment.

Uninstall Docker Desktop first

Open the preference - > troubleshoot page and click Uninstall

Install and configure Minikube and corresponding Docker environment

Install hyperkit, Minikube, and Docker command line tools (Note: runtime environment is not included)

$ brew install hyperkit
$ brew install minikube
$ brew install docker

Experience Kubernetes under Minikube

The simplest way to create a Kubernetes environment is to use the following command

minikube start --image-mirror-country='cn'

The minicube start command provides many configuration parameters,

Common configuration parameters are as follows

  • --cpus=2: allocate CPU cores for minicube virtual machine
  • --memory=2048mb: number of memory allocated for minicube virtual machine
  • --Registry mirror = * * *: to improve the stability of pulling Docker Hub images, you can configure image acceleration for Docker daemon. Refer to Alicloud image service Related accelerator configuration
  • --Kubernetes version = * * *: the version of kubernetes that the minicube virtual machine will use. For example, create a minicube environment and adjust the default resource configuration

Create minicube runtime environment

$ minikube start --image-mirror-country='cn'

  Darwin 11.6 Upper minikube v1.24.0
✨  Automatic selection hyperkit drive
✅  Using mirror repository registry.cn-hangzhou.aliyuncs.com/google_containers
  Starting control plane node minikube in cluster minikube
  Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
  Is Docker 20.10.8 Medium preparation Kubernetes v1.22.3...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
  Verifying Kubernetes components...
    ▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner:v5
  Enabled addons: storage-provisioner, default-storageclass
  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

Open the Kubernetes console

$ minikube dashboard
  Opening dashboard ...
    ▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-scraper:v1.0.7
    ▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/dashboard:v2.3.1
  Validating dashboard Operation ...
  Launching proxy ...
  Validating proxy Health status ...
  Opening http://127.0.0.1:49996/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...
	```
![file](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/77107e988a694147820bd4704deb72fd~tplv-k3u1fbpfcp-zoom-1.image)

Minikube It also provides rich Addon Components, such as we opened metrics-server Components can be monitored Pod Resource usage.

$ minikube addons enable metrics-server
▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.4.2

Start the 'metrics server' plug-in
```

If you need to use progress, you can refer to https://minikube.sigs.k8s.io/docs/handbook/addons/ingress-dns/ To learn to use

For more information on the use of Minikube, please refer to https://minikube.sigs.k8s.io/

Create a Minikube that does not run Kubernetes

For developers who do not need to use Kubernetes, Minikube also provides support for Minikube environments that do not run Kubernetes after v1.24. It can save more resources.

$ minikube start --no-kubernetes
  Darwin 11.6 Upper minikube v1.24.0
    ▪ MINIKUBE_ACTIVE_DOCKERD=minikube
✨  Automatic selection hyperkit drive
  Starting minikube without Kubernetes minikube in cluster minikube
  Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
  Done! minikube is ready without Kubernetes!
  Done! minikube is ready without Kubernetes!
╭───────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                       │
│                         Things to try without Kubernetes ...                        │
│                                                                                       │
│    - "minikube ssh" to SSH into minikube's node.                                      │
│    - "minikube docker-env" to point your docker-cli to the docker inside minikube.    │
│    - "minikube image" to build images without docker.                                 │
│                                                                                       │
╰───────────────────────────────────────────────────────────────────────────────────────╯

Configure Docker environment

First, configure the environment variable of Docker command line tool

$ eval $(minikube docker-env)

Then you can play happily with the familiar Docker command-line tool

$ docker ps
$ docker images

Create a Dockerfile as follows

FROM nginx
RUN echo 'Hello World!' > /usr/share/nginx/html/index.html

Build and run images

$ docker build -t test .
$ docker run -d -p 8080:80 test

Test image,

$  curl $(minikube ip):8080
Hello World!

Note: the host port exposed by docker is on the Minikube virtual machine, so you need to use minikube ip to obtain the IP of the virtual machine. Docker Desktop further optimizes the developer experience so that the exposed endpoints can be directly mapped to the local.

How do we mount local file volumes into the Docker container? This is a little windy. First of all, we need to know that the Docker environment is running on the Virtual Machine of Virtual Machine. We need to mount the local volume to the Minikube Virtual Machine first.

$ mkdir test
$ echo 'Just for test!' > test/test.txt
$ minikube mount ./test:/test

Then, we can mount the volume on the Minikube virtual machine in the Docker image and access it

$ docker run --rm -it -v /test:/inside busybox cat /inside/test.txt

Just for test!

Note: Docker Desktop also provides a good user experience in this scenario, allowing users to ignore the complexity of the underlying implementation.

summary

Developers with strong hands-on ability can develop local containers and Kubernetes without the help of Docker Desktop. Alibaba cloud team has also provided good network access experience for domestic developers. If you have any questions, you can mention Issue on Github

However, for ordinary developers, Docker Desktop has many optimizations in the development experience. The price of $5 per month for Pro version, that is, a cup of Starbucks coffee, can save some tossing time.

Original source: https://developer.aliyun.com/article/815063

Posted on Tue, 30 Nov 2021 01:55:54 -0500 by Develop_Sake