catwithtudou

一直是阵雨

🌦️一枚服务端菜狗/ 大部分时间都是 golang 🫖尝试记录和热爱生活/尝试交一些新朋友 📖目前最重要的事情是打破信息壁垒&重新拾起初心和兴趣&输出者
twitter
github

Mac搭建Docker+Ubuntu環境支持GDB

1. 背景#

最近在準備通過 gdb 來調試 c 語言程序時,發現目前 gdb 是沒有支持 mac m1 的,如下圖:

image

如果想要在 mac 本機來使用 gdb 的話,那只有採取類似虛擬機或容器等的思路,去運行其他系統類型去安裝解決。

之前也嘗試過本機安裝 docker desktop 去通過 docker 解決,但發現運行過程中老是出現異常和超時,基本不可用。

最後找到了 lima 來解決該問題,使用成本極低和兼容性好,能讓 mac 很方便地本地運行其他系統。

這裡記錄了相關使用和通過 lima 搭建 docker+ubuntu 環境的過程,希望能幫助有類似困惑的同學。

2. Lima#

2.1 介紹#

Lima launches Linux virtual machines with automatic file sharing and port forwarding (similar to WSL2).
The original goal of Lima was to promote containerd including nerdctl (contaiNERD ctl) to Mac users, but Lima can be used for non-container applications as well.

簡單來說就是一個裡面運行著 containerd 的虛擬機,使用類似於 windows 上的 WSL2。

其中 containerd 簡單來說就是與 docker 引擎所做的事情一樣,同時也是 CNCF 畢業項目。

containerd is an industry-standard container runtime with an emphasis on simplicity, robustness, and portability. It is available as a daemon for Linux and Windows, which can manage the complete container lifecycle of its host system: image transfer and storage, container execution and supervision, low-level storage and network attachments, etc.

2.2 安裝#

在 mac 上安裝十分簡單:

$ brew install lima

$ lima -v
limactl version 0.20.1

安裝好 lima 後,你就可以通過 lima 來做很多事情了。

目前 lima 官方提供了多個模版,如 archlinux、docker、podman、Kubernetes、ubuntu 等,基本滿足所有搭建環境的需求,可通過下面指令查看:

$ limactl start --list-templates

almalinux-8
almalinux-9
almalinux
alpine
apptainer-rootful
apptainer
archlinux
.....

下面會重點描述下通過 lima 搭建 docker+ubuntu 的環境。

3. 搭建 docker+ubuntu 環境#

3.1 安裝 docker#

這裡我們創建一個目錄來保存下 LimaVM 的配置文件:

$ mkdir lima_vm && cd lima_vm

我們這裡下載使用官方提供的配置模版庫下的 docker.yaml,先查看其內容:

$ curl -o docker.yaml https://raw.githubusercontent.com/lima-vm/lima/master/examples/docker.yaml
$ cat docker.yaml

配置文件中每個配置項的都有詳細的解釋,有興趣的同學可以自行查閱,這裡我們就使用默認的配置文件就可以直接啟動 lima VM:

若想要對虛擬機分配的 CPU、內存、掛載目錄進行調整,配置文件中提供了對應的參數。

$ limactl start ./docker.yaml

image

需要注意的是:

  • 此命令通常是初始化的時候執行,後續創建成功後不用重複執行
  • 上面文件只是初始啟動的配置,啟動後會自動生成下面路徑的配置文件
    • 後續若需要修改配置,則需要編輯下面生成的配置文件,重啟生效。
~/.lima/docker/lima.yaml

3.2 具體使用#

# 查看目前運行列表,並包含其分配的名稱、SSH、Status、CPU、Memory 等
$ limactl list
# 進入 shell
$ limactl shell docker
# 直接執行 shell 命令 docker ps
$ limactl shell docker docker ps
# 關閉 VM
$ limactl stop docker
# 刪除 VM
$ limactl delete docker

上面可看到我們在執行 docker 命令的時候,要麼是要進入到終端具再操作,要麼是要加上對應的limactl shell docker的前綴。

如果想做到像在本地一樣直接執行 docker cli 的話,需要:

# 1. 本地安裝 docker cli
$ brew install docker
# 2. 設置 docker 環境變量
# Name 即 lima 啟動時命名的名稱,如前面的 docker,即 lima-docker)
# Dir 即 lima 啟動後自動生成的路徑,如前面的 ~/.lima/docker/sock/docker.sock
$ docker context create lima-{{.Name}} --docker "host=unix://{{.Dir}}/sock/docker.sock"
$ docker context use lima-{{.Name}}
# 3. 像 docker cli 一樣直接在本地終端執行 docker 命令
$ docker run hello-world

image

3.3 新增 ubuntu 容器#

目前 docker 鏡像中已經有現成的鏡像可以使用,下面安裝的是 ubuntu 20.04 版本:

$ docker pull ubuntu:20.04
$ docker images 

image

安裝好鏡像後,我們直接創建一個 ubuntu 的容器:

# 初始化容器
$ docker run --name ubuntu-container -it ubuntu:20.04 bash

此時你就已經能使用 ubuntu 的操作系統來完成需求了。這裡也貼一下可能會用到的常用操作:

# 查看目前所有的容器及其狀態,比如前面運行的 ubuntu-container
$ docker ps -a 
# 若容器不是運行狀態,則需要啟動它
$ docker start ubuntu-container
# 進行該容器的終端
$ docker exec -it ubuntu-container bash

image

3.4 安裝 gdb#

進入 ubuntu 容器後,就可以安裝 gdb 來調試 c 語言程序了:

# 進入容器後更新軟件包
$ apt update
# 安裝 gdb
$ apt install gdb

參考#

https://zhuanlan.zhihu.com/p/476240258

https://blog.crazyfirelee.tw/posts/sharing/lima/

https://github.com/lima-vm/lima/blob/master/examples/docker.yaml

https://stackoverflow.com/questions/67310123/how-to-install-gdb-on-mac-m1-apple-silicon

https://zhuanlan.zhihu.com/p/354794701

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。