C
发布于 2026/09/03 · 阅读 2
macOS 容器虚拟机
- #macOS
- #容器
- #Linux
- #开发者工具
- #Apple开源
容器虚拟机提供高度集成的 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 ls、m 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(默认)、ro 或 none。
自带容器虚拟机镜像
任何包含 /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_GIDCONTAINER_HOMECONTAINER_MACHINE_IDCONTAINER_UIDCONTAINER_USER
2 阅读0 评论0 点赞
评论