ตัวสร้าง Dockerfile

Dockerfile
ผลลัพธ์

Dockerfile เป็นไฟล์ที่ดูสั้นจนกว่าคุณจะนึกถึงรายละเอียด: ลำดับเลเยอร์สำคัญต่อแคช COPY package.json ต้องมาก่อน RUN npm install และภาษาที่คอมไพล์จะได้ประโยชน์จาก multi-stage build เครื่องมือนี้เขียน Dockerfile พร้อมใช้สำหรับเทคโนโลยีที่คุณเลือก พร้อมรูปแบบแคชที่ถูกต้องตั้งแต่แรก

วิธีสร้าง Dockerfile

  1. 1

    เลือกเทคโนโลยี

    Node.js, Python, PHP, Go หรือ Rust แต่ละเทมเพลตใช้ image พื้นฐานที่เหมาะสมกับภาษานั้นและคำสั่งติดตั้ง dependencies ที่ถูกต้อง

  2. 2

    ตั้งค่าไดเรกทอรีทำงานและพอร์ต

    เลือก WORKDIR และพอร์ตที่แอปของคุณรับฟัง ทั้งสองค่าจะถูกเขียนลงในไฟล์ที่สร้าง

  3. 3

    ตรวจสอบ Dockerfile

    ตรวจสอบว่าบรรทัด EXPOSE และคำสั่งเริ่มต้นตรงกับแอปของคุณ เทมเพลต Go และ Rust ใช้ multi-stage build

  4. 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 ใหม่ เรียงจากที่เปลี่ยนน้อยที่สุดไปมากที่สุด:

  1. image พื้นฐาน FROM (แทบไม่เปลี่ยน)
  2. แพ็กเกจระบบ (apt-get install) เปลี่ยนน้อย
  3. ไฟล์ manifest dependencies (package.json, requirements.txt, composer.json)
  4. ขั้นติดตั้ง dependencies รันเฉพาะเมื่อ manifest เปลี่ยน
  5. การคัดลอกโค้ดต้นฉบับ เลเยอร์ที่ยุ่งที่สุด ทุกอย่างหลังจากนี้ถูก build ใหม่ทุก commit
  6. การคอมไพล์และ 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

เครื่องมือนี้มีให้บริการในภาษาอื่น