C
发布于 2026/09/03 · 阅读 2

macOS 容器虚拟机

  • #macOS
  • #容器
  • #Linux
  • #开发者工具
  • #Apple开源
macOS 容器虚拟机

容器虚拟机提供高度集成的 Linux 环境,可在 Mac 上无缝运行。容器虚拟机快速、轻量且持久,基于标准的 OCI 镜像,可构建和共享。主机集成功能如自动用户和主目录共享,使您无论身处终端何处,都能快速轻松地访问 Linux 环境。

为什么使用容器虚拟机

容器通常以应用程序为模型。容器虚拟机以 Linux 环境为模型。它运行镜像的 init 系统,允许您注册长时间运行的服务或在进程监督器下测试应用程序。容器虚拟机自动将您的用户名和主目录映射到 Linux 环境中。您的仓库和点文件在两个平台上都可用。您可以直接在 macOS 上使用编辑器和工具,同时在 Linux 环境中构建和运行应用程序。

  • 在 Mac 上编辑,在内核中构建。 您的仓库位于 macOS 的 $HOME 中,并挂载到容器虚拟机内的 /Users/<username>。使用 macOS 编辑器或 IDE;在容器虚拟机内编译和运行。
  • 使用 macOS 原生工具处理 Linux 产物。 Mac 上的性能分析器、截图工具、浏览器和 GUI 调试器都能看到容器虚拟机看到的相同文件——从“构建”到“检查”无需复制步骤。
  • 用于测试的真实 Linux 服务。 运行数据库或您的栈所需的任何系统服务——在安装了 systemd 的镜像上,systemctl start postgresql 可正常工作。
  • 每个目标发行版一个环境。 创建与目标发行版数量相同的容器虚拟机——alpine、ubuntu、debian。每个都有相同的 $HOME 和来自 Mac 的相同点文件。快速在各种发行版中测试您的应用程序。

快速开始

container machine create alpine:latest --name dev
container machine run -n dev whoami   # 您的主机用户名,而非 root
container machine run -n dev pwd      # /home/<你> —— 您的 Mac 主目录,已挂载
container machine run -n dev          # 交互式 shell;cd 进入 $HOME 中的仓库

container machine run 是获取 shell 或运行单个命令的方式。如果容器虚拟机已停止,run 会先启动它。

在容器虚拟机中工作

打开 shell 或运行单个命令

  • 不带命令时,container machine run 会以匹配您主机账户的用户身份打开交互式 shell:
    container machine run -n dev
    
  • 传递命令以运行一次并退出:
    container machine run -n dev uname -a
    container machine run -n dev -- cat /proc/cpuinfo
    

设置默认虚拟机

选择一个默认容器虚拟机,这样可以去掉 -n 标志:

container machine set-default dev
container machine run   # 操作 dev

列出、检查、停止、删除

container machine ls              # 列出所有容器虚拟机
container machine inspect dev     # 一个容器虚拟机的 JSON 详情
container machine stop dev        # 停止容器虚拟机
container machine rm dev          # 删除,包括其持久存储

container machine 有别名 m,因此 m lsm run 等均可使用。

调整 CPU、内存或更改主目录挂载

container machine set 更新磁盘上的配置。更改在下次停止并启动后生效:

container machine set -n dev cpus=4 memory=8G
container machine stop dev
container machine run -n dev -- nproc

内存默认为主机内存的一半。主目录挂载可以是 rw(默认)、ronone

自带容器虚拟机镜像

任何包含 /sbin/init 的 Linux 镜像都可以作为容器虚拟机。例如,以下 Dockerfile 构建了一个带有 systemd 和常用命令行工具的 Ubuntu 24.04 容器虚拟机镜像:

FROM ubuntu:24.04
ENV container container
RUN apt-get update && \
    apt-get install -y \
      dbus systemd openssh-server net-tools iproute2 iputils-ping curl wget vim-tiny man sudo && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    yes | unminimize
RUN >/etc/machine-id
RUN >/var/lib/dbus/machine-id
RUN systemctl set-default multi-user.target
RUN systemctl mask \
      dev-hugepages.mount \
      sys-fs-fuse-connections.mount \
      systemd-update-utmp.service \
      systemd-tmpfiles-setup.service \
      console-getty.service
RUN systemctl disable \
      networkd-dispatcher.service
RUN sed -i -e 's/^AcceptEnv LANG LC_\*$/#AcceptEnv LANG LC_*/' /etc/ssh/sshd_config

构建并从中创建容器虚拟机:

container build -t local/ubuntu-machine:latest .
container machine create local/ubuntu-machine:latest --name ubuntu

默认情况下,容器在首次启动时运行内置设置脚本以预配上述用户。要改为使用您自己的设置,请将可执行脚本 /etc/machine/create-user.sh 添加到镜像中。该脚本以 root 身份在首次启动时运行一次,并设置以下变量:

  • CONTAINER_GID
  • CONTAINER_HOME
  • CONTAINER_MACHINE_ID
  • CONTAINER_UID
  • CONTAINER_USER
2 阅读0 评论0 点赞

评论

登录 / 注册即可发布评论!
暂无评论,成为第一个发表评论的用户吧。