苹果在 macOS Tahoe 26 中引入了一项令人瞩目的新功能:原生 Linux 容器支持。这个名为 container 的工具让我们可以在 Mac 上直接运行 Linux 容器,而无需依赖 Docker Desktop 这样的第三方解决方案。

与传统的容器运行方式不同,苹果采用了"一容器一虚拟机"的独特架构,为每个容器提供独立的轻量级虚拟机环境。这种设计在安全性、隐私保护和性能方面都有显著优势。

快速开始

1. 安装

推荐使用 Homebrew 进行安装,也可以访问 项目官网 下载安装包。

brew install container --cask

container 依赖 macOS Tahoe 26 系统中新的特性,并且仅支持 M 系列处理器,当前 macOS Tahoe 26 还是 beta 版系统,升级新的系统还需要注意一些常用软件的兼容性。

2. 启动容器服务

运行 container system start 启动容器服务。第一次运行时,系统会自动下载必要的组件:

Verifying apiserver is running...
Installing base container filesystem...
No default kernel configured.
Install the recommended default kernel from [https://github.com/kata-containers/kata-containers/releases/download/3.17.0/kata-static-3.17.0-arm64.tar.xz]? [Y/n]: Y
Installing kernel...

如果系统中没有 Linux 内核,会自动下载并安装一个。启动成功后,运行 container list --all 来验证安装是否正确。

3. 基本命令

使用 container --help 可以查看所有可用命令:

container --help
OVERVIEW: A container platform for macOS
 USAGE: container [--debug] <subcommand>

 OPTIONS:
 --debug Enable debug output [environment: CONTAINER_DEBUG]
 --version Show the version.
 -h, --help Show help information.

 CONTAINER SUBCOMMANDS:
 create Create a new container
 delete, rm Delete one or more containers
 exec Run a new command in a running container
 inspect Display information about one or more containers
 kill Kill one or more running containers
 list, ls List containers
 logs Fetch container stdio or boot logs
 run Run a container
 start Start a container
 stop Stop one or more running containers

 IMAGE SUBCOMMANDS:
 build Build an image from a Dockerfile
 images, image, i Manage images
 registry, r Manage registry configurations

 SYSTEM SUBCOMMANDS:
 builder Manage an image builder instance
 system, s Manage system components

命令结构与 Docker 非常相似,以下是主要命令的对比:

操作 Docker 命令 Apple Container 命令
拉取镜像 docker pull nginx container image pull nginx
运行容器 docker run -d --name web -p 8080:80 nginx container run --detach --name web nginx
列出运行中的容器 docker ps container ls
列出所有容器 docker ps -a container ls --all 或者 container ls -a
停止容器 docker stop web container stop web
删除容器 docker rm web container rm web
查看日志 docker logs web container logs web
执行命令 docker exec -it web /bin/bash container exec -it web /bin/bash
查看镜像/容器详情 docker inspect <name> container image inspect <image-name>, container inspect <name>

4. 构建镜像示例

构建镜像的过程与 Docker 基本一致。让我们创建一个简单的 Web 服务示例:

mkdir web-test
cd web-test

web-test 目录中创建一个 Dockerfile 文件:

FROM docker.io/python:alpine
WORKDIR /content
RUN apk add curl
RUN echo '<!DOCTYPE html><html><head><title>Hello</title></head><body><h1>Hello, world!</h1></body></html>' > index.html
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]

在当前目录执行构建命令:

container build --tag web-test --file Dockerfile .

构建完成后,使用 container image ls 查看镜像列表:

NAME      TAG     DIGEST
python    alpine  b4d299311845147e7e47c970...
web-test  latest  5a960531678d2f72f4f53b79...

5. 运行容器

现在让我们运行刚才构建的容器:

container run --name test-web-server --detach --rm web-test

运行成功后,使用 container ls 查看正在运行的容器:

ID               IMAGE                                               OS     ARCH   STATE    ADDR
test-web-server  web-test:latest                                     linux  arm64  running  192.168.64.4

你可以直接在浏览器中访问容器服务:

open http://192.168.64.4

注意:Container 采用"一容器一虚拟机"的架构(区别于多个容器共享同一虚拟机的模式,如 Docker Desktop)。每个容器都被分配一个独立的 IP 地址,可以通过 IP 直接访问,而不需要进行端口映射。

高级功能

DNS 服务配置

Container 内置了 DNS 服务,支持通过域名访问容器。配置本地域名解析:

sudo container system dns create local
container system dns default set local

配置完成后,上面的 test-web-server 容器就可以通过 test-web-server.local 域名访问。这个域名不仅在 Mac 主机上生效,在容器内部也可以使用域名访问其他容器的服务。

资源配置

Container 创建的每个容器实际上都是一个轻量级虚拟机。你可以通过 --memory--cpus 参数配置虚拟机的内存和 CPU(默认配置:1GB 内存 + 4 核心):

# 配置 2GB 内存和 8 核心 CPU
container run --name my-redis --rm --cpus 8 --memory 2g redis

构建时资源配置

当运行 container build 时,Container 会启动一个构建容器,这个容器同样可以配置资源(默认:2GB 内存 + 2 核心)。可以预先启动 builder 容器:

container builder start --cpus 8 --memory 4g

如果 builder 容器正在运行,可以通过以下命令重新配置:

container builder stop
container builder delete
container builder start --cpus 8 --memory 4g

文件共享

类似于 Docker 的数据卷,可以使用 --volume 参数挂载主机目录:

container run --volume ${HOME}/Project/assets:/content/assets docker.io/python:alpine ls -l /content/assets

也可以使用 --mount 参数,效果相同:

container run --mount source=${HOME}/Project/assets,target=/content/assets docker.io/python:alpine ls -l /content/assets

技术特点与优势

独特的架构设计

在 macOS 上运行 Linux 容器的传统方法是启动一个共享的 Linux 虚拟机来托管所有容器(如 Docker Desktop)。而 Container 采用了不同的方法:为每个容器启动独立的轻量级虚拟机。

这种设计带来了三个显著优势:

  • 安全性:每个容器具有完整虚拟机的隔离特性,使用最少的核心实用程序和动态库集来减少资源利用率和攻击面
  • 隐私保护:只需将必要的数据挂载到对应的虚拟机中,而不是将所有可能用到的数据都挂载到共享虚拟机
  • 性能优化:轻量级虚拟机所需的内存比完整虚拟机更少,启动时间与共享虚拟机中运行的容器相当

系统架构

Container 系统架构

Container 采用分层架构设计:

  • container 命令:提供用户界面,用于管理容器、构建镜像、下载或发布 OCI 镜像
  • 库层:与 apiserver 进行交互的接口层
  • apiserver:核心代理服务,提供容器和网络管理的 API

当执行 container system start 时,apiserver 会启动两个重要的辅助工具:

  • container-core-images:提供镜像管理和本地存储的 API
  • container-network-vmnet:提供虚拟网络管理的 API

对于每个容器,apiserver 会启动 container-runtime-linux 工具来管理具体的容器实例。

总结

macOS Tahoe 26 的原生容器支持为 Mac 用户提供了一个全新的容器化选择。与传统的 Docker Desktop 相比,它在安全性、隐私保护和架构设计上都有独特的优势。虽然在端口映射等功能上有所不同,但其"一容器一虚拟机"的设计理念为容器化应用提供了更好的隔离性和安全性。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐