---
id: docker-lxc
title: "LXC"
shortTitle: "LXC"
track: docker
trackTitle: "Docker"
order: 11
level: normal
status: published
estimatedMinutes: 25
prerequisites:
  - docker-network
next: docker-yaml
reviewedAgainst: 2026-10-12
sources:
  - title: "LXC introduction"
    url: https://linuxcontainers.org/lxc/introduction/
  - title: "Linux containers"
    url: https://linuxcontainers.org/linux-containers/
---

# LXC

LXC chạy một hệ thống Linux trong container: có init, có nhiều process, gần một máy ảo nhẹ. Docker chạy một app. Đừng gọi hai thứ là một.

## Để làm gì

Nhìn một lệnh Docker và một lệnh LXC rồi nói cái nào là app container, cái nào là system container. Không cài LXC lên máy Windows.

## Gồm những gì

- System container và app container.
- `lxc-create`, `lxc-start`, `lxc-attach` ở mức đọc.
- Vì sao lab Docker Desktop không phải nơi thử LXC.

Không gồm LXD chi tiết hay cấu hình cgroup trên server.

## Dùng khi nào

Một runbook cũ ghi `lxc-attach -n web`. Bạn cần vào đúng máy đó, không phải `docker exec`. Hoặc một đội hạ tầng giao VM nhẹ bằng LXC thay vì một image Docker.

App mới của lộ trình này vẫn đóng bằng Dockerfile. Đừng chuyển sang LXC vì nghe nói nhẹ hơn VM. Bạn mất registry, Compose, và các bài Kubernetes phía sau.

## Kiến thức cốt lõi

LXC dùng namespace và cgroup của kernel, cùng họ cơ chế với container Linux. Khác ở mục đích. Một container LXC boot một distro: systemd bên trong, nhiều service. Bạn vào bằng `lxc-attach` như vào máy.

Container Docker có một process chính. Process đó chết thì container dừng. Không có systemd bên trong image `nginx:alpine` trừ khi ai đó cố nhét vào, và đó là việc nên tránh.

LXC cần kernel Linux và thường cần quyền root trên host. WSL2 và Docker Desktop không phải môi trường docs của LXC giả định. Đừng cài đè lên máy đang chạy Docker để “so sánh cho biết”.

Trang linuxcontainers.org tách LXC, LXD, và LXCFS. LXD là daemon quản lý LXC, không phải một bản Docker.

## Lệnh và code mẫu

Đọc, không chạy trên Windows:

```bash
lxc-create -n lab -t download -- -d alpine -r 3.20 -a amd64
lxc-start -n lab
lxc-attach -n lab -- cat /etc/os-release
lxc-stop -n lab
lxc-destroy -n lab
```

So với app container đã học:

```bash
docker run --rm alpine:3 cat /etc/os-release
```

Lệnh Docker kết thúc là container biến mất. LXC ở trên là một máy tên `lab` mà bạn start và stop.

## Thực hành

1. Viết một câu: Docker trong lộ trình này để chạy app, LXC để chạy một hệ thống.
2. Không cài `lxc` và không bật nested container.
3. Nếu một server lab Linux của bạn đã có `lxc-ls`, chạy `lxc-ls -f` và chỉ xem. Đừng `lxc-destroy` container không phải bạn tạo.

## Kết quả mong đợi

Bạn không cài thêm phần mềm. Bạn chỉ ra được lệnh nào thuộc LXC.

## Checklist

- [ ] Runbook ghi `lxc-attach` thì không thay bằng `docker exec`.
- [ ] App mới đóng bằng image Docker, không tạo system container cho mỗi service.
- [ ] Không cài LXC trong WSL chỉ để hoàn thành bài.

## Lỗi thường gặp

**Cài systemd trong Dockerfile để chạy nhiều service.** Một container nhiều app khó health check và khó log. Tách process, hoặc dùng một system container có chủ đích và công cụ quản lý của nó.

**Xóa container LXC tên giống lab.** `lxc-destroy` xóa rootfs của máy đó. Chỉ destroy tên bạn vừa `lxc-create`.

## Nguồn

1. [LXC introduction](https://linuxcontainers.org/lxc/introduction/) — system container.
2. [Linux containers](https://linuxcontainers.org/linux-containers/) — LXC khác các project cùng trang.

## Tiếp theo

[YAML](./11-yaml.md)
