Cách Sử Dụng Apple Container: Giải Pháp Docker Mã Nguồn Mở Bằng Swift

Mark Ponomarev

Mark Ponomarev

10 tháng 6 2025

Cách Sử Dụng Apple Container: Giải Pháp Docker Mã Nguồn Mở Bằng Swift

Container đã trở thành một công cụ không thể thiếu. Chúng mang lại tính di động, tính nhất quán và hiệu quả, cho phép các nhà phát triển xây dựng và triển khai ứng dụng một cách đáng tin cậy trên các môi trường khác nhau. Trong nhiều năm, Docker đã là tiêu chuẩn mặc định trên macOS, nhưng một đối thủ mới, ra đời trực tiếp từ Apple, sẵn sàng mang đến trải nghiệm nguyên bản hơn, tích hợp hơn và hợp lý hơn cho các nhà phát triển trên Apple Silicon: container.

container là một công cụ mã nguồn mở mới từ Apple cho phép bạn tạo và chạy các container Linux tiêu chuẩn, tuân thủ OCI trên máy Mac của mình. Được viết hoàn toàn bằng Swift và tối ưu hóa cho Apple Silicon, nó được thiết kế để trở thành một giải pháp thay thế nhẹ nhàng, hiệu suất cao cho các runtime container khác. Nó tận dụng các công nghệ ảo hóa riêng của macOS để chạy container như các máy ảo tối thiểu, cô lập, hứa hẹn bảo mật tốt hơn và dấu chân nhỏ hơn.

Bài viết này cung cấp cái nhìn sâu sắc về dự án container của Apple. Chúng ta sẽ khám phá kiến trúc, những lợi ích chính của nó, và sau đó đi qua một hướng dẫn toàn diện về cách xây dựng, chạy và chia sẻ ứng dụng containerized đầu tiên của bạn. Cho dù bạn là một nhà phát triển backend dày dặn kinh nghiệm hay một người dùng Mac tò mò, bạn sẽ tìm thấy mọi thứ cần thiết để bắt đầu với công cụ mới thú vị này.

💡
Bạn muốn một công cụ Kiểm thử API tuyệt vời tạo ra Tài liệu API đẹp mắt?

Bạn muốn một nền tảng tích hợp, All-in-One để Đội ngũ Phát triển của bạn làm việc cùng nhau với năng suất tối đa?

Apidog đáp ứng mọi yêu cầu của bạn, và thay thế Postman với mức giá phải chăng hơn nhiều!
button

Tại sao lại là một công cụ Container mới? Tầm nhìn đằng sau container

Trong bối cảnh bị chi phối bởi các ông lớn đã có tên tuổi, tại sao Apple lại quyết định xây dựng công cụ container của riêng mình? Câu trả lời nằm ở tầm nhìn về một trải nghiệm tích hợp sâu sắc, hiệu suất cao và thân thiện với nhà phát triển trên phần cứng và phần mềm của chính họ. container không chỉ là một bản sao Docker khác; đó là sự tái hình dung về containerization có thể là gì trên máy Mac.

Hiệu suất nguyên bản trên Apple Silicon

Không giống như các giải pháp khác có thể dựa vào các máy ảo Linux nặng hơn hoặc các lớp tương thích đa nền tảng, container được xây dựng từ đầu cho Apple Silicon. Đó là một ứng dụng Swift giao tiếp trực tiếp với Virtualization.framework nguyên bản của Apple. Điều này mang lại lợi thế hiệu suất đáng kể. Không có lớp mô phỏng như Rosetta 2 liên quan đến runtime, và mỗi container chạy trong máy ảo nhẹ của riêng nó, khởi động chỉ bằng một phần nhỏ thời gian so với việc khởi chạy một máy ảo đầy đủ chức năng.

Một kiến trúc bảo mật độc đáo

Bảo mật là nền tảng của thiết kế container. Tổng quan kỹ thuật tiết lộ một quyết định kiến trúc quan trọng: thay vì chạy tất cả các container trong một máy ảo Linux dùng chung duy nhất, container khởi chạy một micro-VM chuyên dụng, tối thiểu cho mỗi container.

Mô hình "một VM cho mỗi container" này cung cấp sự cô lập cấp độ phần cứng mạnh mẽ. Một tiến trình thoát khỏi container của nó sẽ thấy mình bên trong một VM bị hạn chế nghiêm ngặt, chỉ phục vụ một mục đích duy nhất, chứ không phải trong một môi trường dùng chung có quyền truy cập vào các container khác. Điều này làm giảm đáng kể bề mặt tấn công tiềm năng và tăng cường tư thế bảo mật tổng thể của môi trường phát triển của bạn.

Tuân thủ OCI: Hoạt động tốt với các công cụ khác

Mặc dù có kiến trúc độc đáo, container hoàn toàn tuân thủ các tiêu chuẩn mở. Nó sử dụng và tạo ra các image tuân thủ Open Container Initiative (OCI). Đây là một tính năng quan trọng, vì nó có nghĩa là bạn không bị khóa vào một hệ sinh thái độc quyền. Bạn có thể kéo một image tiêu chuẩn từ Docker Hub, chạy nó bằng container, xây dựng một image mới và đẩy nó trở lại bất kỳ registry nào tuân thủ OCI như GitHub Container Registry (ghcr.io). Các image được xây dựng bằng container của bạn sẽ hoạt động liền mạch trong các công cụ khác và trong các pipeline CI/CD sản xuất.

Tích hợp sâu với macOS

container là một công dân tốt trên macOS. Nó tích hợp với các công nghệ hệ thống cốt lõi để cung cấp trải nghiệm người dùng mượt mà:

Dưới nắp ca-pô: Một cái nhìn sâu sắc kỹ thuật nhanh chóng

Công cụ dòng lệnh container (container) là một client giao tiếp với một tiến trình server chạy nền, container-apiserver. Server này, mà bạn khởi động bằng container system start, quản lý mọi thứ.

Khi bạn đưa ra lệnh như container run, server API sẽ khởi chạy một helper runtime chuyên dụng (container-runtime-linux) cho container cụ thể đó. Helper này, đến lượt nó, sử dụng Virtualization.framework để khởi động một VM Linux mới, tối thiểu, lưu trữ các tiến trình của container của bạn. Kiến trúc này thanh lịch, mạnh mẽ và được thiết kế cho bảo mật và hiệu suất.

Điều quan trọng cần lưu ý là, là một dự án mới, container có một số hạn chế. Nó yêu cầu một phiên bản macOS hiện đại (macOS 15, với hiệu suất tốt nhất trên macOS 26 Beta 1 mới nhất). Mạng giữa các container và host có một số giải pháp thay thế cụ thể, và các tính năng nâng cao như memory ballooning vẫn đang được phát triển. Tuy nhiên, nền tảng rất vững chắc và dự án đang phát triển nhanh chóng.

Cách sử dụng container: Hướng dẫn từng bước

Hãy bắt tay vào thực hành. Hướng dẫn này sẽ hướng dẫn bạn qua toàn bộ vòng đời của một container: xây dựng một image cho một web server đơn giản, chạy nó, tương tác với nó và xuất bản nó.

Bước 1: Cài đặt và Thiết lập

Đầu tiên, đảm bảo bạn đáp ứng các yêu cầu: một máy Mac Apple Silicon chạy phiên bản macOS gần đây.

Cài đặt container: Tải xuống gói cài đặt đã ký mới nhất từ trang phát hành GitHub của dự án. Nhấp đúp vào tệp .pkg và làm theo hướng dẫn cài đặt.

Khởi động Dịch vụ: Mở Terminal của bạn và khởi động các dịch vụ hệ thống container.

container system start

Lần đầu tiên bạn chạy lệnh này, nó có thể sẽ nhắc bạn tải xuống và cài đặt một kernel Linux mặc định. Nhập y và nhấn Enter để tiếp tục.

Xác minh Cài đặt: Kiểm tra xem dịch vụ có đang chạy không bằng cách liệt kê tất cả các container có sẵn (lúc này chưa có cái nào).

container ls -a
# Bạn sẽ thấy các tiêu đề trống:
# ID  IMAGE  OS  ARCH  STATE  ADDR

Bước 2: Xây dựng Image đầu tiên của bạn

Bây giờ, hãy tạo một image container cho một web server Python đơn giản.

Tạo Thư mục Dự án:

mkdir web-test
cd web-test

Tạo một Dockerfile: Bên trong thư mục web-test, tạo một tệp có tên Dockerfile (hoặc Containerfile) với nội dung sau. Tệp này định nghĩa "công thức" cho image của chúng ta.

# Bắt đầu từ một image nền Python nhẹ
FROM docker.io/python:alpine

# Đặt thư mục làm việc bên trong container
WORKDIR /content

# Thêm tiện ích 'curl' để kiểm tra
RUN apk add curl

# Tạo một tệp HTML đơn giản
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html

# Lệnh chạy khi container khởi động
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]

Xây dựng Image: Bây giờ, hãy yêu cầu container xây dựng một image từ Dockerfile của bạn. Chúng ta sẽ gắn thẻ cho nó với tên web-test.

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

Dấu . ở cuối cho builder biết sử dụng thư mục hiện tại làm ngữ cảnh của nó.

Liệt kê các Image của bạn: Sau khi quá trình xây dựng hoàn tất, bạn có thể thấy image mới của mình trong kho image cục bộ.

container images list
# Bạn sẽ thấy image `web-test` của mình và image nền `python:alpine`.
# NAME      TAG     DIGEST
# python    alpine  b4d299311845...
# web-test  latest  25b99501f174...

Bước 3: Chạy Container của bạn

Với image đã được xây dựng, hãy chạy nó.

Chạy Web Server: Sử dụng lệnh container run để khởi động một container từ image web-test của bạn.

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

Hãy phân tích các cờ này:

Kiểm tra Container đang chạy: Liệt kê các container đang hoạt động.

container ls

Bạn sẽ thấy container my-web-server của mình ở trạng thái running, cùng với địa chỉ IP được gán trong cột ADDR (ví dụ: 192.168.64.3).

Truy cập Web Server của bạn: Mở trình duyệt web và điều hướng đến địa chỉ IP hiển thị ở bước trước. Bạn sẽ thấy thông báo "Hello, Apple Container!" của mình.

# Thay thế IP bằng IP từ `container ls`
open <http://192.168.64.3>

Bước 4: Tương tác với Container

container cung cấp các công cụ mạnh mẽ để tương tác với các container đang chạy của bạn.

Thực thi một Lệnh: Bạn có thể chạy các lệnh trực tiếp bên trong container bằng cách sử dụng container exec. Hãy liệt kê các tệp trong thư mục nội dung của web server của chúng ta.

container exec my-web-server ls /content
# Kết quả: index.html

Mở một Shell Tương tác: Để gỡ lỗi phức tạp hơn, bạn có thể mở một shell tương tác bên trong container.

container exec -it my-web-server sh

Các cờ -it (--interactive--tty) rất quan trọng để kết nối terminal của bạn với shell bên trong container. Bạn sẽ được đưa vào dấu nhắc shell bên trong WORKDIR của container của bạn. Bạn có thể xem xung quanh, kiểm tra các tiến trình, và sau đó gõ exit để quay lại terminal của máy Mac của bạn.

Bước 5: Xuất bản Image của bạn

Chia sẻ công việc của bạn thật dễ dàng. Hãy đẩy image của chúng ta lên một container registry. Ví dụ này sử dụng Docker Hub, nhưng bất kỳ registry OCI nào cũng sẽ hoạt động. (Điều này giả định bạn có tài khoản Docker Hub với tên người dùng fido).

Đăng nhập vào Registry:

# Thao tác này sẽ nhắc nhập tên người dùng và mật khẩu/token của bạn
container registry login docker.io

Gắn thẻ Image để Xuất bản: Registry yêu cầu image phải được đặt tên theo định dạng registry/username/image:tag. Hãy tạo một thẻ mới cho image của chúng ta.

container images tag web-test docker.io/fido/web-test:latest

Đẩy Image:

container images push docker.io/fido/web-test:latest

Image của bạn hiện đã có sẵn để người khác kéo và chạy, trên bất kỳ nền tảng nào tuân thủ OCI!

Bước 6: Dọn dẹp

Khi bạn hoàn thành, bạn có thể dừng container và tắt dịch vụ.

# Dừng container
container stop my-web-server

# Dừng tất cả các dịch vụ container
container system stop

Ngoài những điều cơ bản

Hướng dẫn này bao gồm quy trình làm việc cốt lõi, nhưng container có thể làm được nhiều hơn thế. Dưới đây là một vài tính năng từ tài liệu how-to.md:

Quản lý Tài nguyên: Bạn có thể kiểm soát tài nguyên được cấp phát cho các container của mình. Đối với các bản dựng cần nhiều bộ nhớ, bạn có thể cấp cho builder nhiều RAM và CPU hơn:

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

Chia sẻ Tệp: Bạn có thể mount một thư mục từ máy Mac của mình vào container bằng cờ -volume, điều này rất cần thiết cho các quy trình làm việc phát triển nơi bạn muốn chỉnh sửa mã trên host và xem các thay đổi trực tiếp trong container.

container run --volume ${HOME}/my-project:/app my-image

Bản dựng Đa Nền tảng: Bạn có thể xây dựng các image chạy trên cả kiến trúc Apple Silicon (arm64) và Intel (amd64) chỉ bằng một lệnh duy nhất, hoàn hảo để triển khai đến các môi trường server đa dạng.

container build --arch arm64 --arch amd64 --tag my-multi-arch-image .

Kiểm tra Nâng cao: Lệnh container inspect cung cấp thông tin JSON chi tiết về các container và image, hữu ích cho việc viết script và tự động hóa.

Kết luận

container của Apple không chỉ là một công cụ mới; đó là một tuyên bố. Nó báo hiệu cam kết cung cấp các công cụ phát triển tích hợp, hạng nhất cho kỷ nguyên hiện đại của phát triển cloud-native. Bằng cách xây dựng một runtime container nhẹ, bảo mật và hiệu suất cao trực tiếp vào hệ điều hành, Apple đang hạ thấp rào cản gia nhập containerization trên máy Mac và cung cấp một giải pháp thay thế hấp dẫn cho các giải pháp hiện có.

Mặc dù dự án vẫn còn non trẻ, nền tảng của nó vững chắc, kiến trúc của nó hợp lý và việc tuân thủ các tiêu chuẩn mở đảm bảo nó sẽ là một nhân tố có giá trị trong hệ sinh thái container rộng lớn hơn. Nếu bạn là nhà phát triển trên máy Mac Apple Silicon, container là một dự án bạn nên theo dõi—và dùng thử—ngay hôm nay.

💡
Bạn muốn một công cụ Kiểm thử API tuyệt vời tạo ra Tài liệu API đẹp mắt?

Bạn muốn một nền tảng tích hợp, All-in-One để Đội ngũ Phát triển của bạn làm việc cùng nhau với năng suất tối đa?

Apidog đáp ứng mọi yêu cầu của bạn, và thay thế Postman với mức giá phải chăng hơn nhiều!
button

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API