macOS Tahoe 26 Linux 容器初探
苹果在 macOS Tahoe 26 中推出原生 Linux 容器工具 container,采用"一容器一虚拟机"架构,提供更高安全性和性能。该工具支持 M 系列芯片,可通过 Homebrew 安装,基本命令与 Docker 相似,包括镜像构建、容器运行等操作。每个容器拥有独立 IP,支持 DNS 域名访问,并可配置 CPU/内存资源。目前该功能仍处于 beta 测试阶段,需升
苹果在 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 命令:提供用户界面,用于管理容器、构建镜像、下载或发布 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 相比,它在安全性、隐私保护和架构设计上都有独特的优势。虽然在端口映射等功能上有所不同,但其"一容器一虚拟机"的设计理念为容器化应用提供了更好的隔离性和安全性。
更多推荐
所有评论(0)