Cách cài đặt MacOS bằng Docker

Nếu bạn từng muốn có ngay một chiếc macOS để dùng vài tiếng nhưng lại bị chặn bởi các bước như tải bộ cài, tạo VM, cấu hình UEFI/virtio, chờ đợi… và trong đầu nảy ra suy nghĩ giờ mà chỉ cần gõ vài command là có máy macOS dùng luôn thì tiện.

Hay có team QA/Dev nhờ bạn spin up nhanh một macOS để test Safari, kiểm tra UI/UX, chạy thử app, dựng lab học, demo cho khách,… Nhưng nếu làm theo cách truyền thống thì bạn phải đánh đổi thời gian cài đặt, hàng chục GB dung lượng, hoặc chi phí VPS/Cloud, hay cấp thêm thiết bị, bạn có thể dựng một môi trường tách biệt để họ truy cập qua private network.

Thì chính xác giải pháp trong bài này là điều đáng để bạn quan tâm: chạy macOS trên Docker bằng KVM, truy cập qua web viewer (và tùy chọn VNC) hoặc remote như thông thường.

b89192ce-c440-4a0b-a456-90bcd00e81e3

Lợi ích khi sử dụng macOS trên Docker

  1. Triển khai cực nhanh – chỉ cần chuẩn bị host và vài lệnh Docker là có môi trường macOS để dùng.
  2. Tự động hóa dễ dàng – có thể đóng gói vào script/pipeline để spin up và xoá môi trường theo nhu cầu.
  3. Tiết kiệm thời gian vận hành – giảm công cài đặt thủ công VM, giảm lỗi vặt do mỗi người cài mỗi kiểu.
  4. Khởi tạo lại dễ dàng – tạo/xoá/tạo lại nhiều lần, phù hợp lab và test ngắn hạn.
  5. Đa dạng phiên bản – đổi VERSION để cài các đời macOS khác nhau.
  6. Tối ưu cho lab nội bộ – chạy trong private network, người dùng truy cập qua IP nội bộ.
  7. Không cần desktop GUI trên server – thao tác qua web viewer, tùy chọn VNC khi cần.
  8. Chủ động tài nguyên – tuỳ chỉnh RAM/CPU/DISK theo nhu cầu test.
  9. Phù hợp nhiều đối tượng – DevOps, QA, tester, sinh viên, security team đều có thể tận dụng.
  10. Dễ chia sẻ/backup dữ liệu – bind volume /storage để lưu disk và dữ liệu cài đặt.

Với rất nhiều ưu điểm khác. Tuy nhiên chắc chắn không có cái gì hoàn hảo tuyệt đối, hiểu bản chất đây là môi trường ảo hoá chạy qua KVM, và dùng đúng bài toán để đạt hiệu quả tốt nhất.

Các bước cài đặt macOS trên Docker

Chú ý: thực chất đây là MacOS chạy trên KVM, Docker chỉ là packaging để launch nhanh, nên kỳ vọng performance và failure mode vẫn là VM. Vì vậy, Docker ở đây là cách đóng gói workflow, không phải container hóa macOS theo nghĩa OS-level.

Step 1: Chuẩn bị

Tùy vào hạ tầng và bài toán của bạn để có hạ tầng phù hợp. Dưới đây là cấu hình đề xuất nếu bạn muốn làm Lab để nắm kiến thức: server Ubuntu chạy trên VMware, phần cứng máy chủ cần hỗ trợ công nghệ ảo hóa (Virtualization).

Hệ điều hành RAM CPU Dung lượng lưu trữ
Ubuntu Server 8 GB 4 Core 100 GB

Step 2: Bật Nested VT-x/EPT trên VMware

Bước 1. Đảm bảo đã tắt VM.

Bước 2. Cấu hình bật Nested VT-x/EPT

  • vSphere/ESXi
    • Chuột phải VM → Edit Settings → VM OptionsAdvancedConfiguration Parameters…
    • Thêm (hoặc sửa) khóa: vhv.enable = "TRUE"
    • CPU: bảo đảm “Hardware virtualization” được bật (Expose virtualization extensions to the guest OS). Với UI mới: CPU → Advanced → tick “Expose virtualization extensions to the guest OS”.
    • Nếu có mục CPU/MMU Virtualization, chọn “Intel VT-x/EPT”.
  • VMware Workstation / Fusion
    • Chuột phải VM → Settings → Processors → Chọn “Virtualize Intel VT-x/EPT or AMD-V/RVI”.
    • (Tuỳ chọn) Chọn “Virtualize CPU performance counters”.

Bước 3. Bật lại VM, kiểm tra guest đã thấy VT-x:

grep -m1 -o 'vmx' /proc/cpuinfo || echo "NO_VMX"

Kết quả chính xác sẽ thấy vmx.

Step 3: Cài đặt macOS trên Docker

Đảm bảo server đã được cài Docker và Docker Compose phiên bản không quá cũ. Bạn có thể tham khảo bài viết Cách cài đặt Docker phiên bản mới nhất tự động bằng bashscript để cài nhanh bằng 1 lệnh.

1. Dùng Docker CLI

docker run -it --rm --name macos \
  -e "VERSION=14" \
  -p 8006:8006 \
  --device=/dev/kvm \
  --device=/dev/net/tun \
  --cap-add NET_ADMIN \
  -v "${PWD}/macos:/storage" \
  --stop-timeout 120 \
  docker.io/dockurr/macos

2. Dùng Docker Compose

services:
  macos:
    image: dockurr/macos
    container_name: macos
    environment:
      VERSION: "14"
    devices:
      - /dev/kvm
      - /dev/net/tun
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 5900:5900/tcp
      - 5900:5900/udp
    volumes:
      - ./macos:/storage
    restart: always
    stop_grace_period: 2m

Khởi chạy macOS trên Docker:

docker compose up -d

Kiểm tra logs:

docker logs -f macos
macos-on-docker

Truy cập trên trình duyệt với địa chỉ http://IP_SERVER:8006 sẽ thấy macOS đang được khởi tạo qua web viewer.

Step 4: Các bước cài macOS trong web viewer

  1. Mở Disk Utility → chọn ổ lớn nhất dạng Apple Inc. VirtIO Block Media.

    macos-on-docker
  2. Chọn Erase → format APFS (đặt tên tùy ý).

    macos-on-docker
  3. Đóng Disk Utility → chọn Reinstall macOS.

    macos-on-docker
  4. Chọn đúng disk vừa tạo để cài đặt.

    197f694d-b345-4976-b99e-8f62435ef525
  5. Nhấn các bước tiếp tục sẽ thấy màn hình thiết lập đang được khởi chạy

    macos-on-docker
  6. Giao diện MacOS quen thuộc đã hiện lên

    macos-on-docker
  7. Tiến hành setup những bước đầu tiên

    macos-on-docker
  8. Tới màn Migration Assistant chọn Not now.

    macos-on-docker
  9. Apple ID chọn Set Up LaterSkip.

    macos-on-docker
    macos-on-docker
    macos-on-docker
  10. Tạo user/password cho máy và thực hiện các bước thiết lập thiết bị.

    macos-on-docker
  11. Khởi chạy thành công

    b89192ce-c440-4a0b-a456-90bcd00e81e3

Step 5: Các tùy chỉnh cấu hình và mở rộng

Chọn phiên bản macOS

Mặc định cài macOS 14, bạn có thể đổi bằng biến môi trường VERSION:

Giá trị Phiên bản macOS Dung lượng bộ cài xấp xỉ Ghi chú
15 macOS Sequoia ~14 GB Apple Account sign-in còn hạn chế
14 macOS Sonoma ~14 GB
13 macOS Ventura ~12 GB
12 macOS Monterey ~12 GB
11 macOS Big Sur ~12+ GB

Lưu ý: Dung lượng bộ cài có thể thay đổi theo bản cập nhật và cách Apple phân phối, nên hãy coi đây là số liệu tham khảo.

Tăng dung lượng đĩa

Mặc định 64GB, đổi bằng DISK_SIZE (ví dụ 256G):

environment:
  DISK_SIZE: "256G"

Tăng RAM/CPU

Dùng RAM_SIZECPU_CORES:

environment:
  RAM_SIZE: "8G"
  CPU_CORES: "4"

Lưu ý với AMD: nếu bạn dùng CPU AMD, repo có khuyến nghị nên để 1 core trong lúc cài; sau khi cài xong và chạy ổn rồi hãy tăng cores để tránh lỗi khó debug.

(Tuỳ chọn) Troubleshooting nhanh

  • Treo ở boot / đứng màn hình đen / log dừng ở “HANDOFF TO XNU”: kiểm tra lại nested VT-x/EPT đã bật, host có hỗ trợ ảo hóa, và đảm bảo container được gắn /dev/kvm.
  • BdsDxe: failed to load Boot… / Not Found: thử dừng container, xoá thư mục ./macos (storage cũ) rồi chạy lại để tạo disk mới sạch.
  • Không vào được web viewer: kiểm tra firewall/port mapping, đảm bảo 8006 được mở và truy cập đúng IP_SERVER.
  • Không có Internet trong macOS: kiểm tra network của host/VM, kiểm tra container có --cap-add NET_ADMIN và gắn /dev/net/tun.
  • Thiếu dung lượng khi cài: tăng DISK_SIZE và chạy lại từ đầu.

Với Docker, việc triển khai macOS không còn là một quá trình phức tạp và tốn thời gian nữa. Chỉ với vài lệnh, bạn có thể dựng nhanh một môi trường macOS phục vụ test/demo/lab nội bộ, truy cập tiện lợi qua web viewer, và tuỳ chỉnh tài nguyên theo nhu cầu. Đây không chỉ là cách dựng macOS nhanh hơn, mà còn là một bước giúp bạn làm việc hiệu quả và chủ động hơn trong nhiều tình huống thực tế.

Thông tin nổi bật

Sự kiện phát trực tiếp​

Event Thumbnail

Báo cáo quan trọng

Article Thumbnail
Article Thumbnail

Sự kiện đang hiện hành

Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Tiêu điểm chuyên gia