機器學習入門,用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
英文地址,請注明出處:http://en.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;并分析了專業進口傾角傳感器代理所提供的原廠品質保障與本地化服務支持。以深圳瑞慣科技有…