Trình tạo Dockerfile
Dockerfile là một trong những file trông có vẻ ngắn cho đến khi bạn nhớ ra các chi tiết: thứ tự layer quan trọng với cache, COPY package.json phải đặt trước RUN npm install, và ngôn ngữ biên dịch hưởng lợi từ build đa giai đoạn. Trình tạo này viết ra Dockerfile sẵn dùng cho công nghệ bạn chọn, với mô hình cache đã đúng ngay từ đầu.
Cách tạo Dockerfile
-
1
Chọn công nghệ
Node.js, Python, PHP, Go hoặc Rust. Mỗi mẫu dùng image gốc phù hợp với ngôn ngữ đó và lệnh cài dependency đúng.
-
2
Đặt thư mục làm việc và cổng
Chọn WORKDIR và cổng mà ứng dụng của bạn lắng nghe; cả hai được ghi vào file tạo ra.
-
3
Xem lại Dockerfile
Kiểm tra dòng EXPOSE và lệnh khởi động khớp với ứng dụng của bạn. Mẫu Go và Rust dùng build đa giai đoạn.
-
4
Sao chép Dockerfile
Sao chép kết quả dán vào thư mục gốc kho lưu trữ, sau đó build image.
Vì sao build đa giai đoạn
Một Dockerfile đơn giản cài toàn bộ bộ công cụ biên dịch vào image cuối. Build đa giai đoạn cho bạn một giai đoạn “builder” để biên dịch và một giai đoạn cuối chỉ chứa sản phẩm đã biên dịch:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
Image cuối loại bỏ mọi dependency phát triển, file mã nguồn và cache build, thường giúp giảm kích thước image 60-80 phần trăm.
Các biến thể image gốc
Các mẫu dùng image slim hoặc alpine khi có thể. Nếu bạn tự điều chỉnh image gốc, các lựa chọn tiêu biểu là:
| Biến thể | Kích thước thường | Khi nào chọn |
|---|---|---|
| full | 300-900 MB | Image phát triển, dependency hệ thống bất thường |
| slim | 80-200 MB | Tiêu chuẩn production cho hầu hết ngôn ngữ |
| alpine | 30-100 MB | Image nhỏ, lưu ý vấn đề glibc so với musl |
| distroless | 20-80 MB | Bảo mật tối đa; không shell, không trình quản lý gói |
Quy tắc cache layer
Docker cache từng dòng; khi một layer thay đổi, mọi thứ bên dưới được build lại. Thứ tự từ ít thay đổi đến nhiều thay đổi:
- Image gốc
FROM(hiếm khi đổi). - Gói hệ thống (
apt-get install), ít thay đổi. - Tệp manifest dependency (
package.json,requirements.txt,composer.json). - Bước cài dependency. Chỉ chạy khi manifest thay đổi.
- Sao chép mã nguồn. Layer bận nhất; mọi thứ sau nó được build lại ở mỗi commit.
- Biên dịch và
CMDcuối.
Phá vỡ thứ tự này là lý do phổ biến nhất khiến build CI chậm.
Danh sách kiểm tra bảo mật
- Chạy với quyền không phải root. Đặt
USER appuser(hoặcUSER 1000) gần cuối. - Ghim phiên bản.
python:3.12.7-slimhơnpython:3.12, và hơn cảpython:latest. - Đặt
WORKDIRtường minh thay vì dựa vào/. - Dùng
COPYchứ không dùngADDcho file cục bộ;ADDcó tác dụng phụ tự giải nén. - Thêm
HEALTHCHECKđể bộ điều phối phát hiện tiến trình bị kẹt. - Dọn cache gói trong cùng dòng
RUN:apt-get install ... && rm -rf /var/lib/apt/lists/*.
Câu hỏi thường gặp
Slim là lựa chọn mặc định an toàn hơn vì vẫn dựa trên glibc, giống hầu hết wheel biên dịch sẵn của các thư viện. Alpine dùng musl và đôi khi gây lỗi runtime khó hiểu trong Python (pandas, numpy) hoặc Node (module native node-gyp). Chọn alpine khi kích thước image là yếu tố quan trọng và bạn đã thử nghiệm công nghệ.
Có, hãy thêm một file vào dự án. Không có nó, Docker gửi toàn bộ kho lưu trữ của bạn đến daemon làm build context: lịch sử git, node_modules, file .env cục bộ, bài kiểm tra. Điều đó chậm, lãng phí cache và rò rỉ bí mật.
Có. Dùng docker buildx với tùy chọn --platform để build cho cả hai kiến trúc cùng lúc. Các image gốc mà mẫu sử dụng đều phát hành biến thể arm64.
Không. Công nghệ, thư mục làm việc và cổng đã chọn chỉ dùng để tạo Dockerfile trên trang này; không có gì được lưu trữ hay chia sẻ.
Công cụ liên quan
Bảng tham chiếu ASCII
Bảng ASCII đầy đủ từ 0 đến 127 với giá trị thập phân, thập lục phân, bát phân, nhị phân và ký hiệu tham chiếu ký tự số HTML, gồm NUL, LF và DEL.
Tham chiếu ký tự HTML
Danh sách có thể tìm kiếm các thực thể HTML, mã tên và mã số tương ứng của chúng, cùng chức năng sao chép chỉ với một cú nhấp cho các ký tự đặc biệt và biểu tượng.
Bảng tham khảo phím tắt
Tìm phím tắt mặc định theo tài liệu của VS Code, Chrome và Bash dùng GNU Readline trên macOS, Windows và Linux.
Bộ chuyển đổi Base64 sang Hex
Chuyển chuỗi Base64 chuẩn thành các byte nền tảng được viết dưới dạng hexadecimal liên tục in hoa. Giải mã nghiêm ngặt, lý tưởng cho token, khóa và chữ ký JWT.
Trình xem hex của tệp nhị phân
Chọn một tệp và kiểm tra phần dữ liệu giới hạn từ bất kỳ offset byte hợp lệ nào dưới dạng hex dump cục bộ với cột offset, hex và ASCII.
Công cụ xác thực số điện thoại
Kiểm tra cấu trúc số theo quốc gia và xem khu vực, loại số cùng các định dạng E.164, quốc tế, quốc gia và RFC 3966.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Generador de Dockerfile [ES]
- ตัวสร้าง Dockerfile [TH]
- Dockerfile-generator [NL]
- Dockerfile 生成器 [ZH]
- Dockerfile 생성기 [KO]
- Générateur de Dockerfile [FR]
- Dockerfile-generator [SV]
- Generator Dockerfile [ID]
- Gerador de Dockerfile [PT]
- Dockerfile-Generator [DE]
- Dockerfile Oluşturucu [TR]
- Generator Dockerfile [PL]
- Dockerfile Generator [EN]
- Dockerfile生成 [JA]
- مولد ملفات Docker [AR]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]