.dockerignore — Đừng Để node_modules Và Secret Lọt Vào Image
Hầu hết lập trình viên đều quen thuộc với .gitignore, nhưng lại bỏ quên hoặc coi thường file .dockerignore. Hậu quả là build context phình to hàng Gigabyte, thời gian build chậm như rùa và nguy hiểm nhất: lộ toàn bộ file bí mật chứa token API vào trong image phát hành ra công chúng!
1. Build Context là gì?
Khi bạn gõ lệnh:
docker build -t myapp .
Dấu chấm . đại diện cho thư mục hiện tại. Trước khi thực hiện bất kỳ lệnh nào trong Dockerfile, Docker CLI sẽ nén toàn bộ thư mục đó và gửi sang Docker Daemon qua socket.
Nếu thư mục của bạn có:
- Thư mục node_modules (500MB)
- Thư mục .git (lưu toàn bộ lịch sử commit, có thể nặng hàng GB)
- File .env chứa mật khẩu production database
Toàn bộ dữ liệu này sẽ bị gửi sang daemon một cách vô ích, làm tốn băng thông và tiềm ẩn nguy cơ bảo mật nghiêm trọng.
2. File .dockerignore chuẩn mẫu cho mọi dự án
Hãy tạo ngay file .dockerignore tại thư mục gốc của repository với nội dung sau:
# Git metadata
.git
.gitignore
.github
# Local dependencies & caches (Bắt buộc phải build lại trong container)
node_modules
npm-debug.log
vendor/
__pycache__/
*.pyc
.venv/
target/
# Sensitive & Secrets (Tuyệt đối không để lọt vào image)
.env
.env.*
*.pem
*.key
id_rsa
credentials.json
# Build artifacts & temp files
dist/
build/
coverage/
.idea/
.vscode/
*.swp
*.log
Dockerfile
.dockerignore
3. Lợi ích đo đếm được ngay lập tức
- Tốc độ build tăng gấp 5 lần: Lệnh
Sending build context to Docker daemongiảm từ 30 giây xuống còn 0.1 giây. - Layer Caching hoạt động chính xác: Tránh việc chỉnh sửa file README hay file
.gitlàm hỏng cache của lệnhCOPY . .. - An toàn bảo mật: Ngăn chặn tuyệt đối việc vô tình copy private key hoặc access token vào image đẩy lên Docker Hub / ECR.
