Nghẽn I/O và rủi ro rò rỉ dữ liệu xuống ổ cứng
Nếu từng chạy các container xử lý file nặng—như convert video với ffmpeg, giải nén tarball vài GB hay chạy test suite song song—bạn sẽ thấy SSD máy chủ nhanh chóng nghẽn IOPS. Ghi liên tục hàng nghìn file tạm vòng đời chỉ vài giây vừa làm chậm service khác, vừa bào mòn TBW (chu kỳ ghi) của ổ cứng.
Vấn đề thứ hai là bảo mật. Khi app ghi session token, private key tạm thời hoặc file PDF vừa decrypt vào container layer, chúng nằm lại trên block disk của host. Ngay cả khi bạn chạy docker rm -f, dữ liệu thô vẫn còn đó. Ai có quyền root trên host hoàn toàn có thể khôi phục lại.
Đây là lúc Docker tmpfs mount phát huy tác dụng: đưa toàn bộ file tạm lên RAM.
Docker tmpfs mount hoạt động thế nào?
Docker hiện có 3 kiểu gắn dữ liệu:
- Volumes: Docker quản lý tại
/var/lib/docker/volumes/, dữ liệu còn nguyên khi container tắt. - Bind mounts: Gắn thẳng một thư mục từ host vào container, phụ thuộc vào cấu trúc thư mục máy chủ.
- tmpfs mount: Tạo filesystem ảo chạy thẳng trên RAM của Linux host. Dữ liệu không chạm xuống ổ cứng và tự hủy sạch sẽ ngay khi container stop.
So sánh nhanh tmpfs với Volume và Bind Mount
Vì nằm trực tiếp trên bộ nhớ vật lý, tmpfs đem lại lợi thế rõ rệt:
- Băng thông vượt trội: Tốc độ đọc ghi RAM DDR4/DDR5 có thể đạt 20–50 GB/s với độ trễ microsecond, nhanh gấp nhiều lần mức 3–7 GB/s của NVMe SSD Gen4.
- Tự hủy an toàn: Container tắt là RAM được giải phóng. Không sót lại dấu vết nào trên disk để forensic hay khôi phục.
- Giữ sạch container layer: Ghi hàng chục GB file tạm không làm phình rootfs, tránh tràn dung lượng phân vùng
/var/lib/docker.
Thực hành: Cấu hình và sử dụng Docker tmpfs mount
1. Chạy nhanh với cờ –tmpfs cơ bản
Cú pháp ngắn gọn nhất là dùng cờ --tmpfs:
docker run -d \
--name redis-test \
--tmpfs /tmp \
redis:7-alpine
Toàn bộ file sinh ra trong /tmp của container giờ nằm trên RAM. Tuy nhiên, cách này có một nhược điểm lớn: không giới hạn được dung lượng RAM tối đa.
2. Dùng cú pháp –mount để giới hạn dung lượng và set quyền
Nếu container bị lỗi vòng lặp ghi file, cờ --tmpfs mặc định có thể ngốn sạch RAM host và kích hoạt Linux OOM Killer hạ gục cả server. Để an toàn, hãy dùng cú pháp --mount:
docker run -d \
--name secure-app \
--mount type=tmpfs,destination=/app/cache,tmpfs-size=512m,tmpfs-mode=1770 \
nginx:alpine
Ý nghĩa từng tham số:
destination=/app/cache: Thư mục đích trong container được mount lên RAM.tmpfs-size=512m: Chặn trần ở mức 512MB (hỗ trợ đơn vị k, m, g). Nếu app ghi vượt ngưỡng, hệ thống trả về lỗi No space left on device thay vì làm sập host.tmpfs-mode=1770: Phân quyền Linux (octal permission). Ở đây1770tương đương cấp quyền đọc/ghi cho owner và group, kèm sticky bit.
3. Cấu hình trong Docker Compose
Trong thực tế, bạn sẽ khai báo qua docker-compose.yml. Bạn có thể dùng cú pháp mảng ngắn gọn:
version: '3.8'
services:
worker:
image: python:3.11-slim
command: python app.py
volumes:
- ./src:/app
tmpfs:
- /app/scratch:size=256m,mode=0755
- /tmp:size=128m
Hoặc dùng long-syntax dưới block volumes để cấu hình tường minh hơn:
services:
api:
image: node:20-alpine
volumes:
- type: tmpfs
target: /app/temp_tokens
tmpfs:
size: 64M
mode: 0700
4. Kiểm tra và debug
Muốn biết thư mục đã thực sự chạy trên RAM chưa, bạn chạy lệnh df -h bên trong container:
docker exec -it secure-app df -h /app/cache
Output sẽ hiển thị filesystem kiểu tmpfs với dung lượng 512M.
Khi cần soi chi tiết cấu hình mount của container từ phía host:
docker inspect secure-app --format '{{ json .Mounts }}'
Chuỗi JSON trả về từ inspect thường dài và khó nhìn. Nếu đang SSH trên server không tiện cài extension, bạn có thể dán vào toolcraft.app/vi/tools/developer/json-formatter để format nhanh.
Khi nào nên và không nên dùng?
RAM nhanh nhưng đắt và biến động, vì vậy cần chọn đúng use case:
- Nên dùng: Buffer render video/ảnh, session tạm, unzip file tải về, thư mục build code của runner CI/CD (như GitLab runner hay GitHub Actions runner), lưu private key giải mã tạm thời trong runtime.
- Không nên dùng: Database engine (PostgreSQL, MySQL, MongoDB) hay bất kỳ dữ liệu nào cần sống sót sau khi khởi động lại. Với dữ liệu bền vững, Docker Volume vẫn là lựa chọn bắt buộc.
- Lưu ý nền tảng: tmpfs mount chạy native trên Linux. Trên macOS hay Windows, container thực chất chạy trong một VM Linux ngầm định của Docker Desktop, nên I/O vẫn chịu giới hạn từ tài nguyên cấp cho VM đó.
Tổng kết
tmpfs mount là công cụ đơn giản nhưng giải quyết triệt để bài toán thắt nút cổ chai I/O cho dữ liệu tạm. Tách riêng file lâu dài vào Volume và đẩy file tạm lên RAM giúp ứng dụng chạy mượt hơn, giảm hao mòn ổ cứng và hạn chế rủi ro bảo mật khi scale container.

