不借助 Docker Desktop 在Mac上开发容器应用

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/e2096947-f310-4ac5-a413-ec2b28b0e040.png)Docker Desktop是最为流行的开发者工具,Docker公司在 8/31 宣布对Docker Desktop的用户协议进行了变更,对个人开发者继续免费,但是对商业开发者采取了收费策

Docker Desktop是最为流行的开发者工具,Docker公司在 8/31 宣布对Docker Desktop的用户协议进行了变更,对个人开发者继续免费,但是对商业开发者采取了收费策略。最近很多同学来咨询我相关的问题,我也就此做一个说明

解决方案

  1. 关于为 Docker Desktop 付费流程,我们已经和集团采购团队进行沟通,但是Docker公司的License授权有些复杂,如果是采购Pro版本,需要每个开发者自己付费,不支持批量采购。而Business版本,支持批量采购,但是咱们也不需要。还在跟进其他可行性,我们会持续和大家沟通。
  2. 如果您只是需要运行K8s环境,用阿里云容器服务ACK是最推荐的方案,没有之一 :-)
  3. 如果您需要一个免费的本地开发环境,也有较好的动手能力,可以参考本文内容

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/docs/handbook/addons/ingress-dns/ 来学习使用

更多关于 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$ 的价格也就是一杯星巴克咖啡,可以节省一些折腾的时间。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
9天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
38 2
|
8天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
9天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
9天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
11天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
11天前
|
Cloud Native 持续交付 Docker
Docker容器化技术:从入门到实践
Docker容器化技术:从入门到实践
|
11天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
11天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
39 0
|
2月前
|
iOS开发 MacOS Windows
Mac air使用Boot Camp安装win10 ,拷贝 Windows 文件时出错
Mac air使用Boot Camp安装win10 ,拷贝 Windows 文件时出错
|
18天前
|
开发工具 iOS开发 开发者
「Mac畅玩鸿蒙与硬件2」鸿蒙开发环境配置篇2 - 在 Mac 上安装 DevEco Studio
本篇将专注于如何在 Mac 上安装鸿蒙开发工具 DevEco Studio,确保开发环境能够顺利搭建。完成安装后,可以正式开始鸿蒙应用的开发工作。
62 1
「Mac畅玩鸿蒙与硬件2」鸿蒙开发环境配置篇2 - 在 Mac 上安装 DevEco Studio