乐趣区

关于docker:不借助-Docker-Desktop-在Mac上开发容器应用

镜像下载、域名解析、工夫同步请点击 阿里巴巴开源镜像站

Docker Desktop 是最为风行的开发者工具,Docker 公司在 8/31 发表对 Docker Desktop 的用户协定进行了变更,对集体开发者持续收费,然而对商业开发者采取了免费策略。最近很多同学来征询我相干的问题,我也就此做一个阐明

解决方案

对于为 Docker Desktop 付费流程,咱们曾经和团体洽购团队进行沟通,然而 Docker 公司的 License 受权有些简单,如果是洽购 Pro 版本,须要每个开发者本人付费,不反对批量洽购。而 Business 版本,反对批量洽购,然而咱们也不须要。还在跟进其余可行性,咱们会继续和大家沟通。
如果您只是须要运行 K8s 环境,用阿里云容器服务 ACK 是最举荐的计划,没有之一 :-)
如果您须要一个收费的本地开发环境,也有较好的入手能力,能够参考本文内容

Minikube 简介

Minikube 是社区一个风行的开源 Kubernetes 开发环境。为了帮忙国内的同学能够更加高效和无障碍地应用 minikube 进行日常开发,Minikube 能够反对阿里云作为容器镜像的 mirror site。进一步,在 v1.24.0 的官网 Minikube 中,曾经合并了由阿里云团队提交的一个计划,能够完满反对 Minikube 丰盛的 addon 组件!

Minikube 能够借助不同的 driver 实现,在 MacOS/Windows/Linux 环境中创立 Kubernetes 运行环境。

本文将借助 hyperkit 驱动来在 MacOS 上创立一个虚拟机来配置 Minikube 环境。

首先卸载 Docker Desktop

关上 Preference -> TroubleShoot 页面,点击 Uninstall

装置配置 Minikube 以及相应 Docker 环境

装置 hyperkit, Minikube,以及 Docker 命令行工具(注:不蕴含运行时环境)

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

体验 Minikube 上面的 Kubernetes

创立 Kubernetes 环境最简略的计划是应用如下命令

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

minikube start 命令提供了十分多的配置参数,

罕用配置参数如下

  • --cpus=2: 为 minikube 虚拟机调配 CPU 核数
  • --memory=2048mb: 为 minikube 虚拟机分配内存数
  • --registry-mirror=***: 为了晋升拉取 Docker Hub 镜像的稳定性,能够为 Docker daemon 配置镜像减速,参考阿里云镜像服务 相干加速器配置
  • --kubernetes-version=***: minikube 虚拟机将应用的 kubernetes 版本。比方,创立 minikube 环境并且调整默认资源配置

创立 minikube 运行环境

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

  Darwin 11.6 上的 minikube v1.24.0
✨  主动抉择 hyperkit 驱动
✅  正在应用镜像存储库 registry.cn-hangzhou.aliyuncs.com/google_containers
  Starting control plane node minikube in cluster minikube
  Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
  正在 Docker 20.10.8 中筹备 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

开启 Kubernetes 控制台

$ minikube dashboard
  正在开启 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
  正在验证 dashboard 运行状况 ...
  Launching proxy ...
  正在验证 proxy 运行状况 ...
  Opening http://127.0.0.1:49996/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

Minikube 也提供了丰盛的 Addon 组件,比方咱们开启了 metrics-server 组件,就能够监控 Pod 的资源应用状况。

$ minikube addons enable metrics-server

    ▪ Using image registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.4.2
  启动 'metrics-server' 插件 

如果大家须要应用 Ingress,能够参考 https://minikube.sigs.k8s.io/… 来学习应用

更多对于 Minikube 的应用信息能够参考 https://minikube.sigs.k8s.io/

创立不运行 Kubernetes 的 Minikube

对不须要应用 Kubernetes 的开发者,Minikube 在 v1.24 版本之后也提供对不运行 Kubernetes 的 Minikube 环境的反对。能够更加节俭资源。

$ minikube start --no-kubernetes
  Darwin 11.6 上的 minikube v1.24.0
    ▪ MINIKUBE_ACTIVE_DOCKERD=minikube
✨  主动抉择 hyperkit 驱动
  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.                                 │
│                                                                                       │
╰───────────────────────────────────────────────────────────────────────────────────────╯

配置 Docker 环境

首先配置 Docker 命令行工具的环境变量

$ eval $(minikube docker-env)

而后就能够利用相熟的 Docker 命令行工具高兴地游玩了

$ docker ps
$ docker images

创立如下的一个 Dockerfile

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

构建并运行镜像

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

测试镜像,

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

留神: Docker 暴露出的 host 端口是在 Minikube 虚拟机上,所以须要应用 minikube ip 取得虚拟机所在的 IP。Docker Desktop 进一步优化了开发者体验,让裸露的端点能够间接映射到本地。

咱们如何将本地文件卷挂载到 Docker 容器中呢? 这个就是有点绕。首先,咱们要晓得 Docker 环境是运行在 Virtual Machine 的虚拟机上,咱们须要首先将本地卷,挂载到 Minikube 虚拟机上。

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

而后,咱们能够在 Docker 镜像中挂载 Minikube 虚拟机上的卷,并进行拜访

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

Just for test!

留神:Docker Desktop 在这个场景下也提供了良好的用户体验,让用户疏忽底层实现的复杂性。

总结

对于入手能力比拟强的开发者,抱着生命不息,折腾不止的态度,不借助 Docker Desktop,也能够进行本地的容器和 Kubernetes 开发。阿里云团队也为国内开发者提供了良好的网络拜访体验。如果大家有问题能够到 Github 上提 Issue.

然而对于一般开发者,Docker Desktop 在开发体验上有很多的优化,每个月 Pro 版本 5$ 的价格也就是一杯星巴克咖啡,能够节俭一些折腾的工夫。

原文起源:https://developer.aliyun.com/…

退出移动版