Containerization đã revolution cách chúng ta deploy và manage applications. Trong thế giới Linux containers, hai công nghệ được nhắc đến nhiều nhất là LXC (Linux Containers) và Docker. Cả hai đều cung cấp process isolation nhưng có những khác biệt đáng kể về kiến trúc, use cases, và philosophy.
Bài viết này so sánh chi tiết LXC vs Docker, giúp bạn hiểu rõ khi nào nên dùng công nghệ nào.
Container là gì? Tại sao quan trọng?
Container là công nghệ ảo hóa cho phép đóng gói ứng dụng và các dependencies vào một đơn vị nhất quán có thể chạy trên bất kỳ môi trường nào – từ laptop developer đến production server, cloud instance. Container giải quyết bài toán “works on my machine” bằng cách đảm bảo consistent environment xuyên suốt vòng đời ứng dụng.
So với virtual machines, containers nhẹ hơn nhiều:
| Đặc điểm | Virtual Machine | Container |
|---|---|---|
| Kích thước | GBs (20GB+ typical) | MBs (100MB average) |
| Startup time | Minutes | Seconds (often < 1s) |
| Isolation | Full hardware virtualization | OS-level (processes) |
| Overhead | High (hypervisor, OS boot) | Minimal (shared kernel) |
| Density | 1-10 per host | 10-100+ per host |
LXC (Linux Containers) là gì?
LXC (Linux Containers) là công nghệ containerization cho phép multiple isolated Linux systems (containers) chạy trên một host Linux duy nhất. LXC cung cấp OS-level virtualization – mỗi container giống như một standalone Linux system với init system riêng, users, processes, và network stack.
LXC sử dụng kernel features như:
- cgroups (control groups) – Limit và monitor resource usage (CPU, memory, I/O)namespaces – Isolate processes, network, user IDs, filesystem viewsAppArmor/SELinux – Security policies cho containers
LXC Features chính
- Full init system – systemd, sysvinit chạy bên trong container như trên bare metalMultiple users – Container có user database riêng, không shared với hostNetwork stack riêng – IP address, routing table, firewall rules riêngFilesystem riêng – Full root filesystem với /etc, /var, /home riêngLoad balancing – Có thể run multiple services cùng lúc trong một container
Cài đặt và sử dụng LXC
# Cài đặt LXC trên Ubuntu 22.04 sudo apt update sudo apt install lxc lxcfs # Kiểm tra LXC version lxc-create --version # List available templates ls /usr/share/lxc/templates/ # Tạo container mới (Debian) sudo lxc-create -n mycontainer -t debian # Khởi động container sudo lxc-start -n mycontainer # Kết nối vào container sudo lxc-attach -n mycontainer # Container information sudo lxc-info -n mycontainer # Stop và destroy sudo lxc-stop -n mycontainer sudo lxc-destroy -n mycontainer
Docker là gì?
Docker là platform containerization phổ biến nhất, được thiết kế chủ yếu cho application containers – đóng gói single application và dependencies, không phải entire OS. Docker sử dụng client-server architecture với daemon (dockerd) và CLI client (docker).
Docker cách mạng hóa cách developer deploy applications bằng cách đơn giản hóa containerization và giới thiệu khái niệm Dockerfile và image layering.
Docker Architecture
- Docker Daemon (dockerd) – Background process quản lý images, containers, networks, volumesDocker Client – CLI tool (docker) giao tiếp với daemon qua REST APIDocker Registry – Nơi lưu trữ images (Docker Hub, private registries)Dockerfile – Script định nghĩa cách build imageDocker Compose – Tool định nghĩa và chạy multi-container applications
Cài đặt và sử dụng Docker
# Cài đặt Docker trên Ubuntu 22.04 sudo apt update sudo apt install docker.io docker-compose # Kiểm tra Docker version docker --version # Build image từ Dockerfile docker build -t myapp:latest . # Chạy container docker run -d --name myapp -p 8080:80 myapp:latest # Kiểm tra containers docker ps docker ps -a # Logs và exec docker logs -f myapp docker exec -it myapp /bin/bash # Stop và remove docker stop myapp docker rm myapp
So sánh chi tiết LXC vs Docker
| Tiêu chí | LXC | Docker |
|---|---|---|
| Loại container | System containers (full OS) | Application containers (single app) |
| Startup time | 1-5 seconds | < 1 second (often milliseconds) |
| Kích thước image | 100MB – several GB | KB to hundreds of MB (layered) |
| Init system | systemd, sysvinit, runit (full) | None (container runs as PID 1) |
| Portability | Linux hosts only, kernel version sensitive | Cross-platform (Linux, Windows, macOS via Docker Desktop) |
| Image format | Template-based (LXC template) | Layered images (UnionFS, overlay2) |
| Orchestration | Manual hoặc LXD cluster | Kubernetes, Docker Swarm, docker-compose |
| Ecosystem | Limited (Proxmox, LXD) | Massive (Docker Hub, K8s, cloud native) |
| Security | AppArmor profiles, unprivileged containers | Namespaces, seccomp, capability dropping |
| State management | Stateful by default, full filesystem | Stateless by design, volumes for persistence |
Use Cases – Khi nào nên dùng LXC?
LXC phù hợp cho những scenarios cần full Linux system hoặc running multiple services trong một container:
1. Legacy Applications
Ứng dụng cũ cần systemd, multiple daemons, hoặc specific system configuration. LXC giữ nguyên application behavior mà không cần modification.
2. Network Appliances
Firewalls (pfSense, OPNsense), routers, DNS servers, mail servers thường chạy tốt trong LXC vì chúng cần full system view và persistent network configuration.
3. Development Environments
Tạo development VMs với đầy đủ LAMP/LEMP stack, database, và multiple services. Developers có thể có identical environment như production mà không cần Docker complexity.
4. Database Servers
MySQL, PostgreSQL, MongoDB thường chạy tốt trong LXC vì chúng cần persistent storage, specific kernel settings, và không design cho container environment.
Use Cases – Khi nào nên dùng Docker?
1. Microservices Architecture
Docker là nền tảng chuẩn cho microservices. Mỗi service được đóng gói trong container riêng, có thể scale independently và deploy bất kỳ đâu.
2. CI/CD Pipelines
Build once, run anywhere. Docker images đảm bảo consistent build environment từ dev đến production. Integration với Jenkins, GitLab CI, GitHub Actions rất dễ dàng.
3. Cloud-Native Applications
Kubernetes và Docker là生态系统. Cloud providers (AWS, GCP, Azure) đều có managed Kubernetes services hỗ trợ Docker images natively.
4. Application Packaging
Đóng gói single application với dependencies. Dockerfile mô tả chính xác environment cần thiết, loại bỏ “works on my machine” problem.
Security Considerations
| Khía cạnh | LXC | Docker |
|---|---|---|
| Root access | Unprivileged containers với UID mapping | Rootless Docker mode (newer) |
| Capability dropping | Via AppArmor/SELinux profiles | docker run –cap-drop=ALL |
| Resource limits | cgroups v1/v2 | –memory, –cpu flags |
| Image signing | Not built-in | Docker Content Trust, Notary |
| Vulnerability scanning | Third-party tools | Trivy, Clair, Docker Scan |
Best practices cho security: luôn run containers với least privilege, scan images thường xuyên, và dùng read-only filesystem khi có thể.
Performance Comparison
Cả hai đều có overhead rất thấp so với VMs, nhưng có một số khác biệt:
- CPU performance – Gần như native, không có difference đáng kể giữa LXC và DockerMemory overhead – Docker nhỉnh hơn chút vì layer caching và storage driver overheadI/O performance – LXC có slight advantage cho sequential I/O, Docker overlay2 có thể chậm hơn cho heavy disk workloadsNetwork latency – Tương đương, đều dùng same kernel networking (veth pairs)
LXC vs Docker: Kết hợp cả hai?
Nhiều organizations sử dụng cả LXC và Docker cho các mục đích khác nhau:
| Công nghệ | Use case |
|---|---|
| LXC | Infrastructure services (databases, web servers, mail servers) |
| Docker | Application workloads (microservices, CI/CD, batch jobs) |
| Proxmox + Docker | LXC cho IaaS layer, Docker cho PaaS layer |
Ví dụ: Một web hosting environment có thể dùng LXC cho database servers và Apache/Nginx, trong khi dùng Docker cho Node.js/Python applications và CI/CD runners.
Migration và Interoperability
Nếu bạn muốn chuyển từ LXC sang Docker hoặc ngược lại:
- LXC to Docker – Create Dockerfile mô tả LXC container environment, install same packages, copy same configsDocker to LXC – LXC template có thể import Docker image filesystem bằng cách extract layersLXD (LXC daemon) – LXD provides REST API cho LXC, có thể run Docker inside LXD containers
Câu hỏi thường gặp (FAQ)
LXC và Docker có conflict không?
Không, cả hai có thể chạy trên cùng host. Docker và LXC có thể coexist – Docker containers có thể chạy inside LXC containers (nested), hoặc Docker và LXC có thể manage separate workloads trên cùng system.
Tôi có thể run Docker inside LXC không?
Có, Docker có thể run inside unprivileged LXC container. Cần enable nesting trong LXC config: lxc.include = /usr/share/lxc/config/nesting.conf. Docker-in-LXC useful cho testing hoặc development environments.
LXC có persistent storage dễ dàng không?
Có, LXC container có full filesystem nên persistence là default behavior. Database data, logs, configs đều tồn tại across restarts. Tuy nhiên, cần backup LXC containers properly vì state stored directly on filesystem.
Docker volumes vs LXC bind mounts?
Docker volumes tồn tại outside container filesystem và persist across container rebuilds. LXC bind mounts map host directories vào container – equally persistent nhưng less portable across different LXC hosts.
Nên dùng LXC hay Docker cho homelab?
Tùy use case: Nếu muốn simple, persistent VMs cho databases, web servers, media server – dùng LXC (qua Proxmox). Nếu muốn run microservices, development containers, Kubernetes testing – dùng Docker. Nhiều homelab users dùng cả hai trên Proxmox.
LXC container có thể migrate sang host khác không?
Có, với LXD (LXC daemon) hoặc Proxmox, có thể live migrate LXC containers giữa hosts không cần downtime. Docker containers cũng có thể migrate nhưng cần image registry để transfer state.
Kết luận
LXC và Docker phục vụ different purposes và không loại trừ nhau:
- Dùng LXC khi cần full Linux system, persistent infrastructure services, hoặc muốn simplicity cho VMs-like experienceDùng Docker khi cần application packaging, microservices, CI/CD, hoặc cloud-native deploymentsDùng cả hai để tận dụng ưu điểm của mỗi công nghệ cho use cases phù hợp
Để tìm hiểu thêm về Docker, hãy tham khảo hướng dẫn Docker toàn tập trên vnhte.com.