机器学习入门,用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题!

国内用户必看】用Lima在macOS免费搭建Docker环境,彻底解决镜像与收费难题!

为了在不同操作系统有一致操作体验,我选择使用docker技术安装ollama,这样子还有一个好处,即使玩坏了,删除重建即可,所以首先需要在开发机上安装docker,从2024年开始在国内使用docker难度越来越大,主要有2大原因:

  1. docker开始收费了,办公电脑公司不让在安装docker桌面版了
  2. docker国内镜像一夜之间都不能用了,docker官方镜像在国内也是无法访问的

下面是在 macOS 上使用 limactl 安装和配置 Docker 的完整步骤。这个方法比 Docker Desktop 更轻量且完全免费。

准备工作

确保你的 macOS 系统已更新到较新版本
确保已安装 Homebrew(macOS 包管理器)

lima&docker安装步骤

步骤 1: 安装 Lima

打开终端(Terminal),执行以下命令:

# 使用 Homebrew 安装 Lima
brew install lima# 验证安装是否成功
limactl --version

步骤 2: 启动 Docker 实例

Lima 使用模板来创建预配置的虚拟机。我们将使用官方提供的 Docker 模板:

# 创建并启动一个名为 "docker" 的实例(使用非root用户模式,推荐)
limactl start --name=docker template://docker

注:除了可以使用官方模板也可以自定义配置文件,启动命令&配置文件&执行过程日志示例如下

# 与上面的命令 limactl start --name=docker template://docker 二选一执行即可
limactl start  ~/work/docker/lima-default.yaml
arch: "aarch64"# 基本系统配置
images:
- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-22.04-server-cloudimg-amd64.img"arch: "x86_64"
- location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-22.04-server-cloudimg-arm64.img"arch: "aarch64"# 系统配置脚本
provision:
- mode: systemscript: |#!/bin/bashset -eux -o pipefail# 安装 Dockercurl -fsSL https://get.docker.com | sh# 将用户添加到 docker 组usermod -aG docker "${LIMA_USER}"# 安装 Docker Compose 插件apt-get install -y docker-compose-plugin# 挂载配置
mounts:
- location: "~"mountPoint: "/home/${LIMA_USER}.linux"# 端口转发(关键!让主机可以访问虚拟机内的 Docker)
portForwards:
- guestSocket: "/var/run/docker.sock"hostSocket: "${LIMA_HOST_HOME}/.lima/docker/sock/docker.sock"# 其他配置
ssh:localPort: 60022
containerd:system: falseuser: false
? Creating an instance "docker" Proceed with the current configuration
INFO[0001] Replacing "http_proxy" value "socks5h://127.0.0.1:13659" with "socks5h://192.168.5.2:13659"
INFO[0001] Replacing "https_proxy" value "socks5h://127.0.0.1:13659" with "socks5h://192.168.5.2:13659"
INFO[0001] Starting the instance "docker" with VM driver "vz"
INFO[0001] Attempting to download the image              arch=aarch64 digest= location="https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img"
INFO[0007] Using cache "/Users/mac/Library/Caches/lima/download/by-url-sha256/002fbe468673695a2206b26723b1a077a71629001a5b94efd8ea1580e1c3dd06/data"
INFO[0007] Converting "/Users/mac/.lima/docker/basedisk" (qcow2) to a raw disk "/Users/mac/.lima/docker/diffdisk"
3.50 GiB / 3.50 GiB [---------------------------------------] 100.00% 1.56 GiB/s
INFO[0009] Expanding to 100GiB
INFO[0010] Attempting to download the nerdctl archive    arch=aarch64 digest="sha256:544fa1e518155fcc01a117ea49819d12d96b4dacfb2b62922f9f7956dc9f6dc8" location="https://github.com/containerd/nerdctl/releases/download/v2.1.3/nerdctl-full-2.1.3-linux-arm64.tar.gz"
INFO[0010] Using cache "/Users/mac/Library/Caches/lima/download/by-url-sha256/46d9ee12c9f3f484518470db8093719f2b3ddca7daa6f1741c71e0aeb198db2a/data"
INFO[0010] [hostagent] Replacing "http_proxy" value "socks5h://127.0.0.1:13659" with "socks5h://192.168.5.2:13659"
INFO[0010] [hostagent] Replacing "https_proxy" value "socks5h://127.0.0.1:13659" with "socks5h://192.168.5.2:13659"
INFO[0010] [hostagent] Replacing "http_proxy" value "socks5h://127.0.0.1:13659" with "socks5h://192.168.5.2:13659"
INFO[0010] [hostagent] Replacing "https_proxy" value "socks5h://127.0.0.1:13659" with "socks5h://192.168.5.2:13659"
INFO[0011] [hostagent] hostagent socket created at /Users/mac/.lima/docker/ha.sock
INFO[0011] [hostagent] Starting VZ (hint: to watch the boot progress, see "/Users/mac/.lima/docker/serial*.log")
INFO[0012] SSH Local Port: 60022
INFO[0011] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0011] [hostagent] [VZ] - vm state change: running
INFO[0021] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0031] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0041] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0052] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0062] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0072] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0082] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0092] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0102] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0112] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0122] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0132] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"
INFO[0142] [hostagent] Waiting for the essential requirement 1 of 2: "ssh"

这个过程会:

  1. 下载 Ubuntu 基础镜像
  2. 在虚拟机内自动安装 Docker、Docker Compose 和其他相关工具
  3. 配置文件共享和端口转发
  4. 可能需要几分钟时间,取决于你的网络速度

步骤 3: 配置 Shell 环境

安装完成后,需要设置环境变量,让 macOS 上的 Docker CLI 能够与 Lima 虚拟机中的 Docker 引擎通信:

# 将以下行添加到你的 shell 配置文件(~/.zshrc 或 ~/.bash_profile)
echo 'export DOCKER_HOST="unix://${HOME}/.lima/docker/sock/docker.sock"' >> ~/.bash_profile# 使配置生效
source ~/.bash_profile

步骤 4: 验证安装

测试 Docker 是否正常工作:


# 检查 Docker 版本
docker --version# 运行测试容器
docker run --rm hello-world# 查看 Docker 系统信息
docker info

如果这些命令都能正常执行并返回信息,而没有报错说无法连接到 Docker 守护进程,那么就说明您的 Shell 环境已经配置成功!

总结

配置注意事项

在这里插入图片描述

附加常用命令

limactl list
NAME      STATUS     SSH                VMTYPE    ARCH       CPUS    MEMORY    DISK      DIR
docker    Stopped    127.0.0.1:60022    vz        aarch64    4       4GiB      100GiB    ~/.lima/dockerlimactl delete docker
INFO[0000] The vz driver process seems already stopped
INFO[0000] The host agent process seems already stopped
INFO[0000] Removing *.pid *.sock *.tmp under "/Users/mac/.lima/docker"
INFO[0000] Deleted "docker" ("/Users/mac/.lima/docker")limactl list
WARN[0000] No instance found. Run `limactl create` to create an instance.

快速重建docker

如果虚拟机安装时出错,需要修改您的lima-docker.yaml文件想重新创建可以依次执行如下命令:

limactl delete -f docker
rm -rf /Users/mac/.lima/docker
limactl start --name=docker  --debug ~/work/docker/lima-docker.yaml

替代方案2:使用coliama

步骤 1: 安装必要的工具

安装 Docker 客户端和 Colima

# 更新 Homebrew
brew update# 安装 Docker 客户端 (命令行工具)
brew install docker# 安装 Docker Compose (可选但推荐)
brew install docker-compose# 安装 Colima
brew install colima

步骤 2: 启动 Colima

2.1 使用默认配置启动 Colima

# 简单启动 (使用默认配置)
colima start

2.2 使用自定义配置启动 (推荐)

# 使用自定义配置启动
colima start --cpu 4 --memory 8 --disk 100 --runtime docker   # 注释如下
colima start \--cpu 4 \          # 分配 4 个 CPU 核心--memory 8 \       # 分配 8GB 内存--disk 100 \       # 分配 100GB 磁盘空间--arch aarch64 \   # 使用 ARM64 架构 (适用于 M1/M2 Mac)--runtime docker   # 使用 Docker 运行时colima start --profile /Users/mac/.colima/default/colima.yaml
INFO[0000] starting colima
INFO[0000] runtime: docker
INFO[0002] creating and starting ...                     context=vm
INFO[0017] provisioning ...                              context=docker
INFO[0018] starting ...                                  context=docker
INFO[0020] done

步骤 3: 验证安装

3.1 检查 Colima 状态

colima status
INFO[0000] colima is running using macOS Virtualization.Framework
INFO[0000] arch: aarch64
INFO[0000] runtime: docker
INFO[0000] mountType: virtiofs
INFO[0000] docker socket: unix:///Users/mac/.colima/default/docker.sock
INFO[0000] containerd socket: unix:///Users/mac/.colima/default/containerd.sock

3.2 检查 Docker 是否正常工作

# 检查 Docker 版本
docker --version# 检查 Docker 信息
docker info# 运行测试容器
docker run hello-world

步骤 4: 常用 Colima 命令

4.1 管理 Colima 实例

# 停止 Colima
colima stop# 暂停 Colima
colima pause# 恢复 Colima
colima unpause# 删除 Colima 实例
colima delete# 查看 Colima 日志
colima logs

步骤 5: 配置 Colima (可选)

5.1 创建 Colima 配置文件

# 创建配置文件目录
mkdir -p ~/.colima# 创建配置文件 (如果需要高级配置)
# Colima 会自动使用默认配置,通常不需要手动创建配置文件

5.2 使用不同的运行时

# 如果需要使用 containerd 而不是 Docker
colima start --runtime containerd# 切换回 Docker
colima stop
colima start --runtime docker

步骤 6: 解决常见问题

6.1 如果遇到权限问题

# 将用户添加到 docker 组 (通常不需要,Colima 会自动处理)
sudo usermod -aG docker $USER# 或者直接使用 sudo (不推荐长期使用)
sudo colima start

6.2 如果启动失败

# 查看详细日志
colima start --debug# 或者查看日志文件
colima logs

6.3 重置 Colima

# 完全重置 Colima
colima delete
rm -rf ~/.colima
brew reinstall colima
colima start

常见错误

🚫 错误配置示例

❌ 错误:使用环境变量(无效)

export http_proxy=http://127.0.0.1:8080
docker pull hello-world

Docker 不会自动读取 http_proxy 环境变量,除非你通过 daemon.json 显式配置。

✅ 正确:通过 daemon.json 配置

进入虚拟机并修改文件

colima ssh
vi /etc/docker/daemon.json 

注:
如果没有vi命令,则先安装一下
默认情况下daemon.json 中没有 proxies节点,下方示例中proxies均属新增内容

{"registry-mirrors": ["https://<your-mirror>.mirror.aliyuncs.com"],"proxies": {"default": {"httpProxy": "http://127.0.0.1:8080","httpsProxy": "http://127.0.0.1:8080","noProxy": "localhost,127.0.0.1"}}
}

保存后退出虚拟机,重启colima

colima stop
colima start
docker info
docker info|grep -i proxy -A 5
# 下方是docker info|grep -i proxy -A 5执行结果示例
HTTP Proxy: socks5h://192.168.5.2:8080
HTTPS Proxy: socks5h://192.168.5.2:8080
Experimental: false
Insecure Registries:
::1/128
127.0.0.0/8
Live Restore Enabled: false

🧩 正确:Docker 客户端代理设置(非守护进程)

如果只想在 客户端(如 docker build 或 docker pull)使用代理,可通过 HTTP_PROXY 环境变量临时设置:

HTTP_PROXY=http://127.0.0.1:8080
docker pull hello-world

ollama&Phi-3:mini安装步骤

这部分之前已经整理过了,详情见:https://alioo.blog.csdn.net/article/details/150591424

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96237.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96237.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 生成签名证书

在Java中生成签名证书通常涉及到使用Java密钥和证书管理工具&#xff08;Java Key and Certificate Management API&#xff0c;即Java Keytool&#xff09;。这个过程通常包括创建密钥库&#xff08;KeyStore&#xff09;&#xff0c;生成密钥对&#xff08;Key Pair&#xff…

语法分析:编译器中的“语法警察”

在编程的世界里&#xff0c;每一种编程语言都有自己的语法规则。就像中文有标点符号和语序规则一样&#xff0c;编程语言也有自己严格的语法规则。语法分析器就像一个严格的"语法警察"&#xff0c;它的职责是检查源代码是否符合语言规范&#xff0c;同时为后续的处理…

容器的定义及工作原理

定义 你可以把 容器 想象成一个 “打包好的软件快递箱”。 里面有什么&#xff1f; 这个箱子里不仅装着你的软件&#xff08;比如一个网站程序&#xff09;&#xff0c;还把软件运行所需要的所有东西都打包进去了&#xff0c;比如它需要哪个版本的Python、需要哪些系统文件、配…

云服务扫盲笔记(2) —— SLS 接入与设置自动化

前篇我们学习了SLS的核心用途及概念&#xff0c;本篇以将一个linux服务器的json格式日志接入阿里云SLS为例&#xff0c;继续学习SLS接入中的关键设置及注意事项&#xff0c;以及如何将其实现简单自动化快速操作。 一、 SLS 日志接入流程 [1] 准备工作&#xff08;确定日志路径…

LwIP入门实战 — 6 LwIP 网络数据包

目录 6.1 pbuf结构体 6.2 pbuf 的类型 6.2.1 PBUF_RAM 类型的pbuf 6.2.2 PBUF_POOL 类型的pbuf 6.2.3 PBUF_ROM 和 PBUF_REF 类型pbuf 6.3 pbuf 6.3.1 pbuf_alloc() 6.3.2 pbuf_free() 6.4 其它pbuf 操作函数 6.5 网卡中使用的 pbuf 6.5.1 low_level_output() 6.5.…

【已解决】Linux中程序脚本可以手动执行成功,但加在rc.local中不能开机自启

之前开发遇到的一个问题&#xff1a;在Linux中&#xff0c;明明程序脚本可以手动执行成功&#xff0c;但加到开机自启动里&#xff0c;却会失败&#xff0c;属实让人摸不着头脑。 问题排查&#xff1a; 有以下几种可能&#xff1a; 自启动脚本&#xff0c;执行权限不足或者脚本…

切块、清洗、烹饪:RAG知识库构建的三步曲

嘿&#xff0c;各位AI技术爱好者们&#xff0c;你是不是经常遇到这样的情况&#xff1a;辛辛苦苦训练的AI助手&#xff0c;面对专业问题时却"一问三不知"或者"胡言乱语"&#xff1f;明明你已经喂了它一堆PDF和Word文档&#xff0c;为啥它就是不会用&#x…

ubuntu 安装 docker 详细步骤

登录&#xff0c;ubuntu版本 22.04 wqbboy192.168.1.2s password: Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-153-generic x86_64)* Documentation: https://help.ubuntu.com* Management: https://landscape.canonical.com* Support: https://ubuntu.com/…

AndroidWorld+mobileRL

1、Android地址 https://github.com/google-research/android_world/tree/main?tabreadme-ov-file#installation 这里有排行榜&#xff0c;提交方式为手工提交到共享表格 https://docs.google.com/spreadsheets/d/1cchzP9dlTZ3WXQTfYNhh3avxoLipqHN75v1Tb86uhHo/edit?gid0#g…

《练手:ipv4地址计算和Telnet 远程设备管理配置实验文档》

实验一&#xff1a;IPv4 地址网段判断原理及实例 判断两个 IPv4 地址是否处于同一网段&#xff0c;核心依据是&#xff1a;将两个 IP 地址分别与子网掩码进行AND 运算后&#xff0c;得到的网络地址是否相同。若相同&#xff0c;则属于同一网段&#xff1b;反之则不属于。 实验拓…

小程序获取手机号完整流程 弹出框获取电话号码

小程序获取手机号完整流程 弹出框获取电话号码 1️⃣ 前提条件 - 使用微信小程序 - 小程序已注册并通过审核 - 后端可存储 session_key2️⃣ 小程序端按钮 <button type"default" open-type"getPhoneNumber" getphonenumber"decryptPhoneNumber&qu…

Nginx 实战系列(四)—— Nginx反向代理与负载均衡实战指南

文章目录前言一、反向代理1.1 反向代理原理1.2 实验配置示例二、负载均衡2.1 负载均衡基本原理2.2 常见负载均衡策略2.2.1 轮询&#xff08;Round Robin&#xff09;&#xff08;最常用&#xff09;2.2.2 最少连接数&#xff08;Least Connections&#xff09;2.2.3 IP 哈希&am…

深度学习(一):人工智能、机器学习与深度学习

人工智能 (AI)&#xff1a;宏大的目标 人工智能是最广泛、最宏大的概念&#xff0c;它的目标是让机器能够模仿人类的智能行为&#xff0c;例如&#xff1a; 推理&#xff1a;像下棋程序一样&#xff0c;通过逻辑来做决策。规划&#xff1a;为实现一个目标而制定步骤&#xff0c…

[网络入侵AI检测] 纯卷积神经网络(CNN)模型 | CNN处理数据

第5章&#xff1a;纯卷积神经网络&#xff08;CNN&#xff09;模型 欢迎回来 在第1章&#xff1a;分类任务配置&#xff08;二分类 vs. 多分类&#xff09;中&#xff0c;我们学习了如何提出正确的问题&#xff1b; 在第2章&#xff1a;数据加载与预处理中&#xff0c;我们准…

Unity AssetBundle详解

简介 AssetBundle&#xff08;简称&#xff1a;AB包&#xff09; 是 Unity 提供的一种资源压缩包&#xff0c;用于在应用运行时动态地加载和卸载资源。它可以将非代码资源&#xff08;如模型、纹理、预制体、音频、甚至整个场景&#xff09;打包成一个或多个文件&#xff0c;这…

golang-gin包

文章目录一、了解gin二、html渲染三、gin中get/post获取值四、路由分组五、中间件六、文件上传七、gin中的cookie一、了解gin Gin 是一个用 Golang编写的 高性能的web 框架, 由于http路由的优化&#xff0c;速度提高了近 40 倍。 Gin的特 点就是封装优雅、API友好。 特性类别…

基于脚手架微服务的视频点播系统-界面布局部分(二):用户界面及系统管理界面布局

基于脚手架微服务的视频点播系统-界面布局部分:二.首页及播放界面布局一.用户界面布局1.1用户界面布局分析与实现1.2更新用户图像按钮及逻辑1.3修改按钮及逻辑1.4上传视频对话框实现逻辑1.4.1页面跳转逻辑处理1.4.2页面控件响应处理二.系统界面布局2.1系统管理页框架2.2审核管理…

STL库——二叉搜索树

ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言&#xff1b; 文章目录 前言 一、二叉搜索树的概念 二、二叉搜索树的性能分析 三、二叉搜索树的插入 四、二叉搜索树的查…

【Linux】线程概念与控制

一. 线程的概念1.什么是线程线程是进程内部的一个执行流&#xff0c;是进程调度的基本单位。它具有轻量的特点&#xff0c;它的创建和销毁所消耗的资源更少&#xff0c;线程间切换比进程间切换消耗的资源更少&#xff1b;它与进程共享一张虚拟地址空间表&#xff0c;通过进程来…

双轴倾角传感器厂家与物联网角度传感器应用全解析

本文主要探讨双轴倾角传感器厂家的核心技术优势&#xff0c;以及物联网角度传感器在智能监测中的创新应用。同时&#xff0c;也详细介绍了水平监测传感器厂家的解决方案特点&#xff0c;并分析了专业进口倾角传感器代理所提供的原厂品质保障与本地化服务支持。以深圳瑞惯科技有…