ตัวสร้าง Dockerfile
Dockerfile เป็นไฟล์ที่ดูสั้นจนกว่าคุณจะนึกถึงรายละเอียด: ลำดับเลเยอร์สำคัญต่อแคช COPY package.json ต้องมาก่อน RUN npm install และภาษาที่คอมไพล์จะได้ประโยชน์จาก multi-stage build เครื่องมือนี้เขียน Dockerfile พร้อมใช้สำหรับเทคโนโลยีที่คุณเลือก พร้อมรูปแบบแคชที่ถูกต้องตั้งแต่แรก
วิธีสร้าง Dockerfile
-
1
เลือกเทคโนโลยี
Node.js, Python, PHP, Go หรือ Rust แต่ละเทมเพลตใช้ image พื้นฐานที่เหมาะสมกับภาษานั้นและคำสั่งติดตั้ง dependencies ที่ถูกต้อง
-
2
ตั้งค่าไดเรกทอรีทำงานและพอร์ต
เลือก WORKDIR และพอร์ตที่แอปของคุณรับฟัง ทั้งสองค่าจะถูกเขียนลงในไฟล์ที่สร้าง
-
3
ตรวจสอบ Dockerfile
ตรวจสอบว่าบรรทัด EXPOSE และคำสั่งเริ่มต้นตรงกับแอปของคุณ เทมเพลต Go และ Rust ใช้ multi-stage build
-
4
คัดลอก Dockerfile
คัดลอกผลลัพธ์วางลงในโฟลเดอร์รากของที่เก็บโค้ด แล้วจึง build image
ทำไมต้อง multi-stage build
Dockerfile แบบง่ายจะติดตั้งชุดเครื่องมือคอมไพเลอร์ทั้งหมดลงใน image สุดท้าย multi-stage build แบ่งเป็นขั้น “builder” ที่คอมไพล์และขั้นสุดท้ายที่เก็บเฉพาะผลลัพธ์ที่คอมไพล์แล้ว:
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 สุดท้ายจะไม่เหลือ dependencies สำหรับพัฒนา ไฟล์ต้นฉบับ และแคช build ซึ่งมักลดขนาด image ลง 60-80 เปอร์เซ็นต์
รูปแบบ image พื้นฐาน
เทมเพลตใช้ image แบบ slim หรือ alpine เท่าที่เป็นไปได้ หากคุณปรับ image พื้นฐานเอง ตัวเลือกทั่วไปคือ:
| รูปแบบ | ขนาดทั่วไป | ควรเลือกเมื่อ |
|---|---|---|
| full | 300-900 MB | image สำหรับพัฒนา, dependencies ระบบที่ผิดปกติ |
| slim | 80-200 MB | ค่าเริ่มต้นสำหรับโปรดักชันในภาษาส่วนใหญ่ |
| alpine | 30-100 MB | image เล็ก, ระวังปัญหา glibc กับ musl |
| distroless | 20-80 MB | ความปลอดภัยสูงสุด; ไม่มีเชลล์ ไม่มีตัวจัดการแพ็กเกจ |
กฎแคชของเลเยอร์
Docker แคชทุกบรรทัด เมื่อเลเยอร์หนึ่งเปลี่ยน ทุกอย่างที่อยู่ข้างใต้จะถูก build ใหม่ เรียงจากที่เปลี่ยนน้อยที่สุดไปมากที่สุด:
- image พื้นฐาน
FROM(แทบไม่เปลี่ยน) - แพ็กเกจระบบ (
apt-get install) เปลี่ยนน้อย - ไฟล์ manifest dependencies (
package.json,requirements.txt,composer.json) - ขั้นติดตั้ง dependencies รันเฉพาะเมื่อ manifest เปลี่ยน
- การคัดลอกโค้ดต้นฉบับ เลเยอร์ที่ยุ่งที่สุด ทุกอย่างหลังจากนี้ถูก build ใหม่ทุก commit
- การคอมไพล์และ
CMDสุดท้าย
การสลับลำดับนี้เป็นสาเหตุที่พบบ่อยที่สุดของ build CI ที่ช้า
รายการตรวจสอบความปลอดภัย
- รันแบบไม่ใช้ root ใส่
USER appuser(หรือUSER 1000) ใกล้ตอนท้าย - ระบุเวอร์ชันให้ชัด
python:3.12.7-slimดีกว่าpython:3.12ซึ่งดีกว่าpython:latest - กำหนด
WORKDIRอย่างชัดเจน แทนการพึ่งพา/ - ใช้
COPYไม่ใช่ADDสำหรับไฟล์ในเครื่อง เพราะADDมีผลข้างเคียงการแตกไฟล์อัตโนมัติ - เพิ่ม
HEALTHCHECKเพื่อให้ออร์เคสเตรเตอร์ตรวจจับกระบวนการที่ค้างได้ - ล้างแคชแพ็กเกจในบรรทัด
RUNเดียวกัน:apt-get install ... && rm -rf /var/lib/apt/lists/*
คำถามที่พบบ่อย
slim เป็นค่าเริ่มต้นที่ปลอดภัยกว่าเพราะยังใช้ glibc เช่นเดียวกับ wheel ที่คอมไพล์ไว้ล่วงหน้าส่วนใหญ่ของไลบรารี alpine ใช้ musl ซึ่งบางครั้งทำให้เกิดบั๊กตอนรันที่อธิบายยากใน Python (pandas, numpy) หรือ Node (โมดูลเนทีฟ node-gyp) เลือก alpine เมื่อขนาด image สำคัญมากและคุณทดสอบเทคโนโลยีแล้ว
ต้องมี โปรดเพิ่มลงในโปรเจกต์ หากไม่มี Docker จะส่งที่เก็บโค้ดทั้งหมดให้ daemon เป็น build context ได้แก่ ประวัติ git, node_modules, ไฟล์ .env ในเครื่อง และเทสต์ ซึ่งช้า เสียแคช และรั่วไหลข้อมูลลับ
ได้ ใช้ docker buildx กับตัวเลือก --platform เพื่อ build ทั้งสองสถาปัตยกรรมพร้อมกัน image พื้นฐานที่เทมเพลตใช้มีเวอร์ชัน arm64 เผยแพร่ด้วย
ไม่ เทคโนโลยี ไดเรกทอรีทำงาน และพอร์ตที่เลือกใช้เพื่อสร้าง Dockerfile ในหน้านี้เท่านั้น ไม่มีการบันทึกหรือแชร์ใดๆ
เครื่องมือที่เกี่ยวข้อง
ตารางอ้างอิง ASCII
ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL
อ้างอิงตัวอักษร HTML
รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ
ตารางอ้างอิงแป้นพิมพ์ลัด
ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux
เครื่องสร้างตัวอักษรสุ่ม
สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน
ตัวลดรูปพีชคณิตบูลีน
ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^
เครื่องมือตรวจสอบหมายเลขโทรศัพท์
ตรวจสอบโครงสร้างหมายเลขตามประเทศ พร้อมดูภูมิภาค ประเภท และรูปแบบ E.164 ระหว่างประเทศ ในประเทศ และ RFC 3966
เครื่องมือนี้มีให้บริการในภาษาอื่น
- Dockerfile-Generator [DE]
- Dockerfile Oluşturucu [TR]
- مولد ملفات Docker [AR]
- Dockerfile Generator [EN]
- Gerador de Dockerfile [PT]
- Dockerfile 生成器 [ZH]
- Dockerfile生成 [JA]
- Generator Dockerfile [PL]
- Dockerfile-generator [NL]
- Generador de Dockerfile [ES]
- Dockerfile 생성기 [KO]
- Trình tạo Dockerfile [VI]
- Dockerfile-generator [SV]
- Generator Dockerfile [ID]
- Générateur de Dockerfile [FR]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]