ดีพลอยแอปจาก Dockerfile
ดีพลอยบริการที่ทำงานต่อเนื่อง เช่น webhook, API หรือเครื่องมือสำหรับเอเจนต์ จากซอร์สโค้ดที่มี Dockerfile
ก่อนเริ่มต้น#
- โปรแกรมที่ตอบคำขอ HTTP
Dockerfileที่ชั้นบนสุดของโปรเจกต์
1. เขียน Dockerfile#
ตัวอย่าง Node.js นี้ให้เซิร์ฟเวอร์รอรับที่ $PORT อิมเมจ EXPOSE พอร์ตเดียว และรันด้วยผู้ใช้ที่ไม่ใช่ root
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
EXPOSE 8080
CMD ["node", "server.js"]import { createServer } from "node:http";
const port = Number(process.env.PORT ?? 8080);
createServer((req, res) => {
res.writeHead(200, { "content-type": "application/json" });
res.end(JSON.stringify({ ok: true, path: req.url }));
}).listen(port);อิมเมจต้องเป็นไปตามข้อกำหนดเหล่านี้ ดูกฎทั้งหมดได้ที่ข้อกำหนดการรันคอนเทนเนอร์
- มี
CMDหรือENTRYPOINTที่เริ่มเซิร์ฟเวอร์ - ให้บริการ HTTP ที่
$PORT - บิลด์สำหรับ
linux/amd64 - ระบบไฟล์เป็นแบบอ่านอย่างเดียว ยกเว้น
/tmp
2. อัปโหลดซอร์สโค้ด#
ในแท็บ ดีพลอย ของแอป ลากโฟลเดอร์ซอร์สโค้ดหรือไฟล์ .zip มาวางในพื้นที่อัปโหลด แล้วเลือก อัปโหลดและบิลด์ โดย Dockerfile ต้องอยู่ชั้นบนสุด ถ้าบีบอัด zip เอง อย่าใส่ node_modules, .git และ .env
zip -r ../app.zip . -x 'node_modules/*' '.git/*' '.env*'แพลตฟอร์มจะบิลด์อิมเมจ สแกนหาช่องโหว่และความลับ และตรวจว่าตรงตามข้อกำหนดการรันหรือไม่ สิ่งที่แพลตฟอร์มปรับให้จะแสดงเป็นประกาศในหน้าเวอร์ชัน เช่น "อิมเมจรันด้วย root จึงเปลี่ยนไปรันด้วย uid 10001"
มีอิมเมจอยู่แล้ว?
พุชอิมเมจไปที่รีจิสทรีอิมเมจขององค์กร แล้วเลือกอิมเมจใน ดีพลอยเวอร์ชันใหม่จาก เพื่อสร้างเวอร์ชันจากอิมเมจนั้น
3. เผยแพร่และตรวจสถานะการทำงาน#
เวอร์ชันแรกของแอปจะเผยแพร่เองเมื่อบิลด์สำเร็จ เวอร์ชันถัดไปให้เลือก เผยแพร่ ในแท็บ ดีพลอย
แท็บ การทำงาน แสดงเวอร์ชันที่ให้บริการอยู่และจำนวนอินสแตนซ์ที่พร้อม
เวอร์ชันไม่พร้อมเสียที
สาเหตุที่พบบ่อยคือพอร์ต เซิร์ฟเวอร์ไม่ได้รอรับที่พอร์ตที่แพลตฟอร์มกำหนด ดูวิธีแก้ที่การแก้ปัญหาการดีพลอย
4. เพิ่มความลับ#
ป้อน API key และค่าลับอื่น ๆ ใน ตั้งค่า ของแอป แล้วให้โค้ดอ่านจากตัวแปรสภาพแวดล้อม การตั้งค่าที่บันทึกจะมีผลเมื่อรีสตาร์ตบริการ และอินสแตนซ์เดิมจะให้บริการต่อจนกว่าอินสแตนซ์ใหม่จะพร้อม ดูการตั้งค่าแอป
อย่าใส่ความลับไว้ในซอร์สโค้ด
ถ้าการสแกนพบคีย์ในอิมเมจ ให้เอาออกจากซอร์สโค้ด ตั้งเป็นความลับของแอปแทน และเปลี่ยนคีย์ใหม่