Lập trình Mojo
figonkingx  

Hướng dẫn cài đặt Mojo🔥 bằng Docker Compose trên Windows (2026)

Mojo — ngôn ngữ lập trình “siêu tốc” của Modular, kết hợp sức mạnh của Python với hiệu năng ngang C++. Tuy nhiên, Mojo hiện chỉ hỗ trợ chính thức trên Linux và macOS. Vậy làm sao để lập trình Mojo trên Windows?

Câu trả lời: Docker Compose. Bài viết này hướng dẫn bạn từng bước cài đặt môi trường phát triển Mojo hoàn chỉnh trên Windows — không cần WSL phức tạp, không cần dual-boot Linux.

👉 Nếu bạn chưa biết Mojo là gì, hãy đọc bài Ngôn ngữ lập trình Mojo🔥: Python++ nhanh hơn Python đến 68.000 lần trước nhé!

Nội dung chính

Tại sao dùng Docker cho Mojo trên Windows?

Mojo SDK yêu cầu hệ điều hành Linux (Ubuntu 22.04+). Trên Windows, bạn có 3 lựa chọn:

  1. WSL2 — Cài Windows Subsystem for Linux, rồi cài Mojo trong đó
  2. Virtual Machine — Chạy Linux trong VMware/VirtualBox
  3. DockerLựa chọn tốt nhất

Docker vượt trội ở các điểm:

  • Nhẹ hơn VM nhiều lần — khởi động chỉ vài giây
  • Dễ chia sẻ, tái tạo môi trường — đồng nghiệp chỉ cần docker compose up
  • Quản lý bằng file docker-compose.yml — version control được
  • Không “ô nhiễm” máy host
  • Hỗ trợ tích hợp VS Code qua Dev Containers

Yêu cầu hệ thống

  • Windows 10/11 (64-bit, bản Pro/Enterprise/Education hoặc Home có WSL2 backend)
  • Docker Desktop for Windows (phiên bản mới nhất)
  • RAM: tối thiểu 8GB (khuyến nghị 16GB)
  • Ổ cứng: tối thiểu 10GB trống
  • CPU: hỗ trợ virtualization (VT-x/AMD-V)

Bước 1: Cài đặt Docker Desktop

Truy cập docker.com/products/docker-desktop và tải Docker Desktop for Windows. Khi cài, chọn Use WSL 2 instead of Hyper-V (khuyến nghị). Sau khi cài xong, khởi động lại máy.

Kiểm tra Docker trong PowerShell:

docker --version
docker compose version

Kết quả mong đợi:

Docker version 27.x.x, build xxxxxxx
Docker Compose version v2.x.x

Bước 2: Tạo cấu trúc dự án

Tạo thư mục dự án trên Windows:

mkdir C:\Projects\mojo-dev
cd C:\Projects\mojo-dev

Dockerfile

Tạo file Dockerfile:

# Mojo Development Environment
FROM ubuntu:22.04

# Tránh interactive prompts khi cài packages
ENV DEBIAN_FRONTEND=noninteractive

# Cài đặt dependencies cơ bản
RUN apt-get update && apt-get install -y \
    curl git python3 python3-pip python3-venv wget nano \
    && rm -rf /var/lib/apt/lists/*

# Cài pixi (package manager cho Mojo)
RUN curl -fsSL https://pixi.sh/install.sh | bash
ENV PATH="/root/.pixi/bin:${PATH}"

# Tạo thư mục workspace
WORKDIR /workspace

# Tạo Mojo project với pixi
RUN pixi init mojo-project \
    -c https://conda.modular.com/max-nightly/ \
    -c conda-forge \
    && cd mojo-project \
    && pixi add mojo

# Set working directory vào project
WORKDIR /workspace/mojo-project

# Giữ container chạy
CMD ["bash"]

docker-compose.yml

services:
  mojo:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: mojo-dev
    volumes:
      # Mount thư mục code từ Windows vào container
      - ./code:/workspace/mojo-project/code
    stdin_open: true   # Giữ stdin mở (tương đương -i)
    tty: true          # Cấp pseudo-TTY (tương đương -t)
    working_dir: /workspace/mojo-project
    deploy:
      resources:
        limits:
          memory: 4G

Tạo thư mục chứa code:

mkdir code

Cấu trúc dự án cuối cùng:

C:\Projects\mojo-dev\
├── Dockerfile
├── docker-compose.yml
└── code\           ← Thư mục chứa code Mojo của bạn

Bước 3: Build và khởi động container

# Build image (lần đầu mất khoảng 5-10 phút)
docker compose build

# Khởi động container ở background
docker compose up -d

# Kiểm tra container đang chạy
docker compose ps

Bước 4: Kiểm tra Mojo đã hoạt động

Vào container:

docker compose exec mojo bash

Kiểm tra phiên bản:

pixi run mojo --version
# Output: mojo 2026.1.x (xxxxxxxx)

Thử Mojo REPL:

pixi run mojo

# Trong REPL:
1> print("Hello from Mojo on Windows! 🔥")
Hello from Mojo on Windows! 🔥

Bước 5: Viết chương trình Mojo đầu tiên

5.1 Hello World

Tạo file code/hello.mojo trên Windows (dùng VS Code hoặc bất kỳ editor nào):

# hello.mojo - Chương trình Mojo đầu tiên trên Windows!

def main():
    print("🔥 Xin chào từ Mojo trên Docker!")
    print("Mojo chạy thành công trên Windows!")
    
    # Kiểm tra kiểu dữ liệu cơ bản
    var name: String = "Mojo Developer"
    var version: Int = 2026
    print("Xin chào, " + name + "! Chào mừng đến với Mojo " + str(version))

Chạy trong container:

pixi run mojo run code/hello.mojo

Kết quả:

🔥 Xin chào từ Mojo trên Docker!
Mojo chạy thành công trên Windows!
Xin chào, Mojo Developer! Chào mừng đến với Mojo 2026

5.2 Benchmark — So sánh tốc độ Mojo

Tạo file code/benchmark.mojo để kiểm tra hiệu năng:

# benchmark.mojo - So sánh tốc độ tính toán
from time import now

def fibonacci_mojo(n: Int) -> Int:
    if n <= 1:
        return n
    var a: Int = 0
    var b: Int = 1
    for _ in range(2, n + 1):
        var temp = a + b
        a = b
        b = temp
    return b

def main():
    print("=" * 50)
    print("🔥 MOJO BENCHMARK trên Docker/Windows")
    print("=" * 50)
    
    var iterations = 1_000_000
    
    var start = now()
    var total: Int = 0
    for i in range(iterations):
        total += fibonacci_mojo(100)
    var elapsed_ms = (now() - start) / 1_000_000
    
    print("\n📊 Kết quả:")
    print("  Fibonacci(100) x " + str(iterations) + " lần")
    print("  Thời gian: " + str(elapsed_ms) + " ms")
    
    print("\n✅ Mojo hoạt động hoàn hảo trên Docker/Windows!")
pixi run mojo run code/benchmark.mojo

5.3 Kiểm tra tích hợp Python

Một trong những điểm mạnh nhất của Mojo là gọi được thư viện Python trực tiếp. Tạo file code/python_interop.mojo:

# python_interop.mojo - Gọi Python từ Mojo
from python import Python

def main():
    print("🐍 Kiểm tra tích hợp Python từ Mojo\n")
    
    # Import thư viện Python chuẩn
    var sys = Python.import_module("sys")
    print("Python version: " + str(sys.version))
    
    # Dùng math module
    var math = Python.import_module("math")
    print("Pi = " + str(math.pi))
    print("sqrt(144) = " + str(math.sqrt(144)))
    
    # Dùng datetime
    var datetime = Python.import_module("datetime")
    var now_time = datetime.datetime.now()
    print("Thời gian hiện tại: " + str(now_time))
    
    # Tạo và xử lý JSON
    var json_mod = Python.import_module("json")
    var data = Python.dict()
    data["language"] = "Mojo"
    data["platform"] = "Docker on Windows"
    data["status"] = "Working!"
    print("\nJSON output: " + str(json_mod.dumps(data, indent=2)))
    
    print("\n✅ Python interop hoạt động tốt!")

Nếu thấy output Python version, Pi, thời gian, và JSON — môi trường Mojo của bạn đã hoàn chỉnh! 🎉

Các lệnh Docker Compose thường dùng

LệnhMô tả
docker compose up -dKhởi động container (chạy nền)
docker compose exec mojo bashVào terminal container
docker compose stopDừng container (giữ data)
docker compose downXóa container (giữ image)
docker compose down -vXóa container + volumes
docker compose build --no-cacheBuild lại image từ đầu
docker compose logsXem logs

Kết nối VS Code với container

Để có trải nghiệm lập trình tốt nhất, kết nối VS Code trực tiếp vào container:

  1. Cài extension Dev Containers (ms-vscode-remote.remote-containers) và Mojo (modular-mojotools.vscode-mojo)
  2. Nhấn F1 → gõ Dev Containers: Attach to Running Container
  3. Chọn container mojo-dev
  4. VS Code sẽ mở cửa sổ mới kết nối vào container
  5. Mở thư mục /workspace/mojo-project/code

Giờ bạn có thể viết code Mojo trên Windows với syntax highlighting, autocompletion, và chạy trực tiếp trong container! 🔥

Xử lý lỗi thường gặp

Docker build bị timeout

$env:DOCKER_CLIENT_TIMEOUT=300
$env:COMPOSE_HTTP_TIMEOUT=300
docker compose build

Container bị "Exited"

# Kiểm tra logs
docker compose logs mojo

# Khởi động lại
docker compose restart

Lỗi "permission denied" với file mount

Mở Docker Desktop → SettingsResourcesFile Sharing, thêm đường dẫn C:\Projects\mojo-dev.

Thiếu RAM khi build

Mở Docker Desktop → SettingsResources → tăng Memory lên 4-6GB.

Fullstack Station Tips 💡

  1. Mount thư mục code, không mount cả project: Chỉ mount thư mục code/ vào container. Pixi project files nên ở trong container để tránh xung đột path Linux/Windows.
  2. Dùng .dockerignore: Tạo file .dockerignore để loại bỏ node_modules, .git, etc. khỏi build context.
  3. Pin version Mojo: Trong Dockerfile, thay pixi add mojo bằng pixi add 'mojo>=2026.1,<2027' để tránh breaking changes.
  4. Tự động khởi động REPL: Thêm command: pixi run mojo vào docker-compose.yml — container sẽ vào REPL ngay khi khởi động.
  5. Multi-stage build cho production: Dùng 2 stage — stage 1 build binary, stage 2 chỉ chứa runtime. Image nhẹ hơn nhiều lần.

Bài viết liên quan về Mojo

Bài viết được tổng hợp bởi Fullstack Station. Nguồn tham khảo: Modular Docs, Modular Blog.

Comments

Leave A Comment