M1N

สื่อนำเสนอ: Docker สำหรับ Mendix

กำลังโหลดเนื้อหา

Updates & Additions (1)

22/07/2026 11:11
# สื่อนำเสนอ: Docker สำหรับ Mendix ![ChatGPT_Image_Jul_22__2026__10_00_07_AM.png](https://hel1.your-objectstorage.com/m1n/upload/png/20260722_100503_6ba0c64a-393e-4bc3-9e66-901195f5f8e6.png) ## 1) สคริปต์คำพูดตอนสอน (พูดตามได้เลย ~3–4 นาทีต่อภาพ) **เปิดหัวข้อ — ปัญหาที่ Docker มาแก้:** "ปกติการเอา Mendix app ไปรันบนเครื่อง server ต้องลงทุกอย่างเองทีละอย่าง เวอร์ชันไม่ตรงกันก็พังได้ง่าย วันนี้เราจะใช้ Docker ห่อแอปพร้อมทุกอย่างที่มันต้องใช้ไว้ในกล่องเดียว ย้ายไปรันที่ไหนก็เหมือนกันหมด" **ไล่ตามภาพ 5 ขั้น (ชี้ทีละบล็อกซ้ายไปขวา):** 1. "เริ่มจากไฟล์ `.mda` — นี่คือไฟล์ที่ export ออกมาจาก Mendix Studio Pro เป็นตัวแอปของเราทั้งก้อน" 2. "เอา `.mda` มาเข้ากระบวนการ `docker build` โดยใช้ตัวช่วยที่ Mendix เตรียมไว้ให้ชื่อ buildpack — มันจะจัดการ runtime, Java, ทุกอย่างให้อัตโนมัติ" 3. "ผลลัพธ์ที่ได้คือ Docker image ชื่อ `myapp:1.0` — เปรียบเหมือนแม่พิมพ์ที่พร้อมปั๊มออกมารันกี่ตัวก็ได้ เหมือนกันทุกตัว" 4. "พอสั่ง `docker compose up` มันจะยกขึ้นมา 2 container พร้อมกัน: ตัวแอป Mendix เปิดที่ port 8080 กับ PostgreSQL เป็นฐานข้อมูล — สองตัวนี้คุยกันผ่าน network ภายในด้วยค่า `DATABASE_ENDPOINT` ส่วน volume ข้างล่างคือที่เก็บข้อมูลถาวร ต่อให้ปิด container ข้อมูลก็ไม่หาย" 5. "สุดท้ายเราเปิดเบราว์เซอร์เข้า `http://host:8080` ก็เจอแอปรันจริง ล็อกอินด้วย admin password ที่เราตั้งไว้" **ปิดท้าย — ประเด็นสำคัญที่อยากให้จำ:** - "compose แยกแอปกับฐานข้อมูลเป็นคนละ container แต่ผูกกันด้วย network — เปลี่ยน/อัปเกรดทีละตัวได้" - "`depends_on: service_healthy` ทำให้แอปรอจนฐานข้อมูลพร้อมก่อน ไม่ใช่แค่ 'เริ่มแล้ว' — กัน error ตอน start" - "จุดที่พลาดกันบ่อยสุด: `docker compose down` เฉยๆ ข้อมูลอยู่ครบ แต่ถ้าเติม `-v` ข้อมูลหายหมดกู้ไม่ได้ — จำให้แม่น" --- ## 2) สรุปคำสั่งที่ต้องใช้ใน Lab (cheat sheet แจกผู้เรียนได้) **ขั้น 1 — เช็คเครื่องพร้อม** ```bash docker version # ต้อง >= 17.05 unzip -v && git --version docker pull postgres:17-alpine ``` **ขั้น 2 — Clone buildpack + สร้าง rootfs (ครั้งเดียว/เครื่อง) + แตก .mda + Build image** *(buildpack v5)* ```bash git clone --branch latest --config core.autocrlf=false \ https://github.com/mendix/docker-mend cd docker-mendix-buildpack # (ทำครั้งเดียวต่อเครื่อง) สร้าง rootfs 2 ตัว — CF_BUILDPACK ถูก pin ตรงนี้ที่เดียว docker build -f rootfs-builder.dockerfile --build-arg CF_BUILDPACK=v5.0.31 --tag mendix-rootfs:builder . docker build -f rootfs-app.dockerfile --t # แตก .mda (มันคือ zip) ให้ครบทุกโฟลเดอร์ mkdir -p project unzip /path/to/YourApp.mda -d project # build image ของแอป — ใส่แค่ BUILD_PATH (v docker build --build-arg BUILD_PATH=project --tag myapp:1.0 . docker images | grep myapp # ยืนยัน build สำเร็จ ``` > ⚠️ `--config core.autocrlf=false` สำคัญมาก (โดยเฉพาะเครื่อง Windows) ถ้า build fail แบบ "command not found" แปลกๆ ให้เช็คบรรทัดนี้ก่อน > ℹ️ **v5 ต่างจาก v4:** `CF_BUILDPACK` (ใช้ **v5.0.31** บนเครื่อง lab) ถูก pin ตอนสร้าง `mendix-rootfs:builder` → ตอน build แอปใส่แค่ `BUILD_PATH` ตัวเดียว · บนเครื่ว เหลือแค่บรรทัด `docker build --build-argBUILD_PATH=project ...` บรรทัดเดียว **ขั้น 3 — เขียน `compose.yaml` แล้วรันจริง** ```yaml services: myapp: image: myapp:1.0 ports: ["8080:8080"] environment: ADMIN_PASSWORD: Str0ng!Passw0rd DATABASE_ENDPOINT: postgres://mxuser:mxpass@db:5432/mendix volumes: - mendix_files:/opt/mendix/build/data/files depends_on: db: condition: service_healthy mem_limit: 1g db: image: postgres:17-alpine environment: POSTGRES_USER: mxuser POSTGRES_PASSWORD: mxpass POSTGRES_DB: mendix volumes: ["pgdata:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U interval: 10s retries: 5 volumes: mendix_files: pgdata: ``` ```bash docker compose up -d docker compose ps # myapp รอ db healthy ก่อน docker compose logs -f myapp # ดู model ``` เปิดเบราว์เซอร์ → `http://<host>:8080` → ล็อก **ขั้น 4 — พิสูจน์ว่าข้อมูลรอด** ```bash docker compose down # ไม่ใส่ -v docker compose up -d # เข้าเว็บอีกครั้ง ข้อมูลครบเหมือนเดิม ``` > ❗ `docker compose down -v` = ลบ volume ทิ้ง → ข้อมูล + ไฟล์อัปโหลดหายหมด กู้ไม่ได้ ใช้เฉพาะตอนตั้งใจล้างข้อมูลเท่านั้น **สำหรับใช้พร้อมกันหลายคนบนเครื่องเดียว (กันชนกัน):** เปลี่ยน port/ชื่อ container/volume ให้มีชื่อ user นำหน้า เช่น `-p 8089:8080`, `--name $(whoami)-app`, `$(whoami)-db`, v08-lab-machine-setup-for-ai-agent.md` ข้อ7)

CONFIRM_DELETE

Are you sure you want to delete this article?
"สื่อนำเสนอ: Docker สำหรับ Mendix"
This action cannot be undone.