---
title: ดีพลอยแอปจาก Dockerfile
description: ดีพลอยบริการที่ทำงานต่อเนื่อง เช่น webhook, API หรือเครื่องมือสำหรับเอเจนต์ จากซอร์สโค้ดที่มี Dockerfile
url: https://agentlab.cresclab.com/docs/th/deploy/container-app
language: th
updated: 2026-10-06
---

# ดีพลอยแอปจาก Dockerfile

ดีพลอยบริการที่ทำงานต่อเนื่อง เช่น webhook, API หรือเครื่องมือสำหรับเอเจนต์ จากซอร์สโค้ดที่มี Dockerfile

## ก่อนเริ่มต้น

- โปรแกรมที่ตอบคำขอ HTTP
- `Dockerfile` ที่ชั้นบนสุดของโปรเจกต์

## 1. เขียน Dockerfile

ตัวอย่าง Node.js นี้ให้เซิร์ฟเวอร์รอรับที่ `$PORT` อิมเมจ `EXPOSE` พอร์ตเดียว และรันด้วยผู้ใช้ที่ไม่ใช่ root

```dockerfile Dockerfile
FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
EXPOSE 8080
CMD ["node", "server.js"]
```

```js 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);
```

อิมเมจต้องเป็นไปตามข้อกำหนดเหล่านี้ ดูกฎทั้งหมดได้ที่[ข้อกำหนดการรันคอนเทนเนอร์](https://agentlab.cresclab.com/docs/th/deploy/runtime-contract.md)

- มี `CMD` หรือ `ENTRYPOINT` ที่เริ่มเซิร์ฟเวอร์
- ให้บริการ HTTP ที่ `$PORT`
- บิลด์สำหรับ `linux/amd64`
- ระบบไฟล์เป็นแบบอ่านอย่างเดียว ยกเว้น `/tmp`

## 2. อัปโหลดซอร์สโค้ด

ในแท็บ **ดีพลอย** ของแอป ลากโฟลเดอร์ซอร์สโค้ดหรือไฟล์ `.zip` มาวางในพื้นที่อัปโหลด แล้วเลือก **อัปโหลดและบิลด์** โดย `Dockerfile` ต้องอยู่ชั้นบนสุด ถ้าบีบอัด zip เอง อย่าใส่ `node_modules`, `.git` และ `.env`

```bash
zip -r ../app.zip . -x 'node_modules/*' '.git/*' '.env*'
```

แพลตฟอร์มจะบิลด์อิมเมจ สแกนหาช่องโหว่และความลับ และตรวจว่าตรงตามข้อกำหนดการรันหรือไม่ สิ่งที่แพลตฟอร์มปรับให้จะแสดงเป็นประกาศในหน้าเวอร์ชัน เช่น "อิมเมจรันด้วย root จึงเปลี่ยนไปรันด้วย uid 10001"

> [!NOTE] มีอิมเมจอยู่แล้ว?
> พุชอิมเมจไปที่รีจิสทรีอิมเมจขององค์กร แล้วเลือกอิมเมจใน **ดีพลอยเวอร์ชันใหม่จาก** เพื่อสร้างเวอร์ชันจากอิมเมจนั้น

## 3. เผยแพร่และตรวจสถานะการทำงาน

เวอร์ชันแรกของแอปจะเผยแพร่เองเมื่อบิลด์สำเร็จ เวอร์ชันถัดไปให้เลือก **เผยแพร่** ในแท็บ **ดีพลอย**

แท็บ **การทำงาน** แสดงเวอร์ชันที่ให้บริการอยู่และจำนวนอินสแตนซ์ที่พร้อม

> [!WARNING] เวอร์ชันไม่พร้อมเสียที
> สาเหตุที่พบบ่อยคือพอร์ต เซิร์ฟเวอร์ไม่ได้รอรับที่พอร์ตที่แพลตฟอร์มกำหนด ดูวิธีแก้ที่[การแก้ปัญหาการดีพลอย](https://agentlab.cresclab.com/docs/th/deploy/troubleshooting.md#not-ready)

## 4. เพิ่มความลับ

ป้อน API key และค่าลับอื่น ๆ ใน **ตั้งค่า** ของแอป แล้วให้โค้ดอ่านจากตัวแปรสภาพแวดล้อม การตั้งค่าที่บันทึกจะมีผลเมื่อรีสตาร์ตบริการ และอินสแตนซ์เดิมจะให้บริการต่อจนกว่าอินสแตนซ์ใหม่จะพร้อม ดู[การตั้งค่าแอป](https://agentlab.cresclab.com/docs/th/deploy/app-settings.md#secrets)

> [!WARNING] อย่าใส่ความลับไว้ในซอร์สโค้ด
> ถ้าการสแกนพบคีย์ในอิมเมจ ให้เอาออกจากซอร์สโค้ด ตั้งเป็นความลับของแอปแทน และเปลี่ยนคีย์ใหม่
