不借助 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/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$ 的价格也就是一杯星巴克咖啡,可以节省一些折腾的时间。
原文来源:https://developer.aliyun.com/article/815063
不借助 Docker Desktop 在Mac上开发容器应用的更多相关文章
- Docker 技术系列之安装Docker Desktop for Mac
终于要进入到Docker技术系列了,感谢大家的持续关注. 为什么要选择Docker?因为Docker 轻巧快速,提供了可行.经济.高效的替代方案.举个例子,安装Nginx,Mysql,Redis等常用 ...
- Homebrew 安装 Docker Desktop for Mac
无意中发现Homebrew现在已经支持Docker Desktop for Mac了,因此特意把原来通过 https://docs.docker.com/docker-for-mac/install/ ...
- 在 Mac 上开发 .NET MAUI
.NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用程序,这些应用程序可以从单个共享代码库在 Android.iOS.macO ...
- 在 M1 Mac 上开发 .NET MAUI (iOS)
在 M1 Mac 上开始使用 .NET MAUI 开发 (iOS) 的最简单方法. .NET 多平台应用程序 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动 ...
- docker服务在Mac上的启动与使用
在mac上打开安装的docker软件就可以启动docker服务了 点击顶部状态栏中鲸鱼图标会弹出操作菜单,显示着服务的状态,如下图所示: 只有在docker服务启动了之后,才可以在终端使用docker ...
- 在Mac上开发使用yeoman构建Asp.net core项目并且实现分层引用
1.Yeoman? yeoman是一个自动化脚手架工具.它提供很多generator,generator相当于VisualStudio的模板,用来初始化项目.更多的就不多说了,写一遍都写不完,自己看吧 ...
- Tidb go mac 上开发环境搭建
1.安装golang 运行环境 2.安装lite ide 工具 3.安装dep 包管理工具 4.安装delve debuger 调试工具 我用的是mac hight sierra 10.13 版, 会 ...
- 在Mac上搭建React Native开发环境
概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境. 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node ...
- [转] 在Mac上搭建React Native开发环境
原文链接: http://blog.csdn.net/xiangzhihong8/article/details/53914336 概述 前面我们介绍过在window环境下开发React Native ...
随机推荐
- Aselenium前言
https://seleniumhq.github.io/docs/index.html https://www.seleniumhq.org/ THE SELENIUM BROWSER AUTOMA ...
- 国外很便宜的服务器 一年 2核2G 一年20美元
今年 服务器 //=====================================一下是去年的================================= 优惠码:zhujicepin ...
- 基于zynq XC7Z100 FMC接口通用计算平台
1.板卡概述 此板卡是北京太速研发,由SoC XC7Z100-2FFG900I芯片来完成卡主控及数字信号处理,XC7Z100内部集成了两个ARM Cortex-A9核和一个kintex 7的FPGA, ...
- Solution -「HDU 6643」Ridiculous Netizens
\(\mathcal{Description}\) Link. 给定一棵含有 \(n\) 个结点的树,点 \(u\) 有点权 \(w_u\),求树上非空连通块的数量,使得连通块内点权积 \(\ ...
- Solution -「CodeChef JUMP」Jump Mission
\(\mathcal{Description}\) Link. 有 \(n\) 个编号 \(1\sim n\) 的格子排成一排,并有三个权值序列 \(\{a_n\},\{h_n\},\{p_n ...
- Solution -「ARC 125F」Tree Degree Subset Sum
\(\mathcal{Description}\) Link. 给定含有 \(n\) 个结点的树,求非负整数对 \((x,y)\) 的数量,满足存在 \(\exist S\subseteq V ...
- kube-proxy的三种工作模式
kube-proxy模式详解 kubernetes里kube-proxy支持三种模式,在v1.8之前我们使用的是iptables 以及 userspace两种模式,在kubernetes 1.8之后引 ...
- Linux 内存分析工具的命令大全介绍
在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍# free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存, ...
- windev的弹窗详情页滚动条实现方法以及弹窗尺寸规划
按照企业信息系统的设计习惯,我们一般将信息以列表的方式在主窗口展现,同时设置需要展现的字段,一些系统会将这个窗口称为总表页.列表页等.而信息的编辑或完整信息的查询,一般通过一个弹窗来实现,一些系统会将 ...
- mysql 语句的使用
查看数据库 show databases; use 数据库名: show tables; //显示数据库的表名describe 表名; //显示某表的字段, 建表模板 这是为了清楚直观,再mysql行 ...