Internal Training

Docker พื้นฐาน

Day 1 of 2 — พื้นฐาน Docker & Docker Compose ที่เอาไปใช้กับเคสลูกค้าได้จริง

Docker & Kubernetes Internal TrainingDay 1

ทำไมเราต้องรู้เรื่องนี้

📞

สิ่งที่เจอทุกวัน

  • "ระบบเข้าไม่ได้"
  • "หลัง deploy แล้วพัง"
  • "service ล่มเป็นช่วงๆ"
🎯

สิ่งที่อยากให้ทำได้หลังคอร์ส

  • เปิดดู log เองได้ ไม่ต้องรอ dev
  • บอกได้ว่าปัญหาอยู่ตรงไหน
  • ส่งเคสต่อพร้อมข้อมูลครบ
💡
เป้าหมายไม่ใช่ให้เป็น DevOps — แต่ให้ ไล่ปัญหาเบื้องต้นได้เอง และ escalate ได้อย่างมีข้อมูล

Agenda — Day 1

1
Docker คืออะไร — container vs VM, ศัพท์ที่ต้องรู้
2
คำสั่งพื้นฐานที่ใช้จริง — ps, logs, exec, stats, inspect
3
Image & Registry — tag, pull, อ่าน Dockerfile ให้เป็น
4
Docker Compose — อ่านไฟล์เป็น, คำสั่งที่ใช้บ่อย
5
เคสจริงที่เจอบ่อย — checklist การไล่ปัญหา
⏱️
มี Lab ให้ลองทำเอง 3 ช่วง · พักเบรกทุกๆ ~90 นาที
Part 1

Docker คืออะไร

และทำไมระบบของเราถึงรันอยู่บนมัน

ปัญหาคลาสสิก: "บนเครื่องผมมันรันได้นะ"

สาเหตุ

  • เวอร์ชัน Node/Python/Java ไม่ตรงกัน
  • ไลบรารีในเครื่องมี แต่บน server ไม่มี
  • ค่า config / env ต่างกัน
  • OS คนละแบบ

ทางแก้แบบ Docker

แพ็ก แอป + ไลบรารี + ค่า config ทั้งหมดไว้ในกล่องเดียว แล้วส่งกล่องนั้นไปรันที่ไหนก็ได้

📦
กล่องนั้นเรียกว่า Container

Docker คืออะไร

📘
Docker คือเครื่องมือสำหรับแพ็กแอปพร้อมทุกอย่างที่มันต้องใช้ ให้กลายเป็น "กล่อง" ที่ยกไปรันที่เครื่องไหนก็ได้ แล้วได้ผลเหมือนกันทุกที่

ที่มาสั้นๆ

เทคโนโลยีแยกแอปออกจากกันแบบนี้มีอยู่ใน Linux มานานแล้ว แต่ใช้ยากมาก · Docker เปิดตัวปี 2013 แล้วทำให้มันเหลือแค่คำสั่งไม่กี่คำ จนกลายเป็นมาตรฐานที่ทุกที่ใช้กันทุกวันนี้

Docker ประกอบด้วยอะไร

  • Engine — ตัวที่รัน container จริง
  • CLI — คำสั่ง docker ที่เราพิมพ์
  • Image — รูปแบบมาตรฐานของการแพ็ก
  • Registry — คลังเก็บและแจกจ่าย image
🚫
สิ่งที่ Docker ไม่ใช่: ไม่ใช่ VM · ไม่ใช่ภาษาโปรแกรม · ไม่ได้เขียนหรือแก้แอปให้ — มันเป็นแค่ "วิธีแพ็ก" กับ "วิธีรัน" เท่านั้น

Containerization คืออะไร

📘
Containerization คือการแพ็กแอปพร้อมของที่มันต้องใช้ทั้งหมดไว้ด้วยกัน แล้วให้มันรันแบบแยกขาดจากแอปอื่นบนเครื่องเดียวกัน

แบบเดิม (ติดตั้งลงเครื่องตรงๆ)

  • ลง runtime เช่น Java/Node ลงเครื่องแม่
  • ลง library ที่แอปต้องใช้
  • ทุกแอปบนเครื่องใช้ของกองเดียวกัน
  • อัปเดตให้แอปหนึ่ง อีกแอปพังตาม

แบบ container

  • แต่ละแอปมี runtime + library ของตัวเองในกล่อง
  • แอป 2 ตัวใช้ Java คนละเวอร์ชันบนเครื่องเดียวกันได้
  • เลิกใช้ก็ลบกล่องทิ้ง ไม่มีของค้างในเครื่อง
  • ย้ายไปเครื่องอื่นได้โดยไม่ต้องลงอะไรใหม่
🔧
เบื้องหลังคือความสามารถของ Linux ที่ชื่อ namespace (แยกให้แต่ละกล่องมองไม่เห็นกัน) และ cgroups (จำกัด CPU/RAM ของแต่ละกล่อง) — ไม่ต้องจำชื่อ แค่รู้ว่าการแยกกันนี้เป็นของจริง ไม่ใช่แค่แยกโฟลเดอร์

Containerization = ทำแอปให้เป็น “ฟู้ดทรัค”

เปรียบเทียบร้านอาหารแบบติดตั้งอยู่กับที่ กับฟู้ดทรัคที่มีครัวและอุปกรณ์พร้อมใช้งานในตัว
🏪 แอปแบบติดตั้งตรงบนเครื่องต้องเตรียม runtime, library และ config ที่ปลายทางให้ครบ
🚚 Containerพกแอป + runtime + library ที่ต้องใช้มาด้วย
🔌
ขับไปจอด → เสียบปลั๊ก → เปิดขาย — ย้ายไปเครื่องไหนก็เริ่มทำงานได้แบบเดิม
ครัวบนรถ = runtime + libraries•ไฟ/น้ำ = CPU, RAM, network, storage•Docker = เครื่องมือที่แพ็กและรัน container

Container ต่างจาก VM ยังไง

🖥️

Virtual Machine

  • มี OS เต็มตัวของตัวเอง
  • หนัก — หลาย GB
  • บูตเป็นนาที
  • 1 เครื่องรันได้ไม่กี่ตัว
📦

Container

  • ใช้ kernel ของเครื่องแม่ร่วมกัน
  • เบา — หลัก MB
  • สตาร์ทเป็นวินาที
  • 1 เครื่องรันได้เป็นสิบเป็นร้อยตัว
💡
เทียบง่ายๆ: VM = บ้านทั้งหลัง · Container = ห้องในคอนโด ที่ใช้โครงสร้างอาคารร่วมกัน

Image → Container

📄 Dockerfile
→
💿 Image
→
📦 Container

Dockerfile

สูตรอาหาร — บอกว่าจะประกอบ image ยังไง

Image

อาหารแช่แข็ง — พร้อมใช้ แก้ไม่ได้ (read-only)

Container

อาหารที่อุ่นแล้วบนจาน — คือ image ที่กำลังรันอยู่

⚠️
1 image สร้างได้หลาย container — เหมือนอุ่นอาหารแช่แข็งกล่องเดียวกันหลายจาน

ศัพท์ที่ต้องรู้จัก

ศัพท์คืออะไรเจอตอนไหน
Imageแพ็กเกจแอปที่พร้อมรันตอน deploy / pull ไม่ผ่าน
Containerimage ที่กำลังรันอยู่ตอนดูสถานะ/log
Volumeที่เก็บข้อมูลถาวร นอก containerตอนข้อมูลหายหลัง restart
Networkช่องทางให้ container คุยกันตอน service เชื่อมกันไม่ได้
Registryคลังเก็บ image (Docker Hub, Harbor, ECR)ตอน ImagePull ไม่ผ่าน
Port mappingเปิดประตูจากเครื่องแม่เข้า containerตอนเข้าเว็บไม่ได้

ภาพรวมการทำงาน

💻 Docker CLI
คำสั่งที่เราพิมพ์
→
⚙️ Docker Daemon
คนลงมือทำจริง
→
📦 Containers
แอปที่รันอยู่
↕
☁️ Registry
คลัง image
Part 2

คำสั่งพื้นฐานที่ใช้จริง

5 คำสั่งนี้ครอบคลุมงานที่เราต้องใช้ 80%

5 คำสั่งที่ใช้บ่อยที่สุด

คำสั่งใช้ตอน
docker psดูว่ามีอะไรรันอยู่บ้าง สถานะเป็นยังไง
docker logsดู error ที่แอปพ่นออกมา — ใช้บ่อยที่สุด
docker execเข้าไปข้างใน container เพื่อเช็คของ
docker restartลองรีสตาร์ทดูก่อน
docker inspectดู config, env, network, mount ของ container
💡
จำ pattern ไว้: docker <คำกริยา> <ชื่อ container> — โครงสร้างเหมือนกันหมด

docker ps — ดูว่าอะไรรันอยู่

# ดูเฉพาะที่กำลังรัน
docker ps

# ดูทั้งหมด รวมตัวที่ตายไปแล้ว ← สำคัญมากตอนไล่ปัญหา
docker ps -a

# ดูเฉพาะบางคอลัมน์ ให้อ่านง่าย
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
⚠️
ลูกค้าบอก "service หาย" แล้ว docker ps ไม่เจอ → ต้องใช้ -a เสมอ เพราะ container ที่ตายแล้วจะไม่โผล่ในลิสต์ปกติ

อ่านคอลัมน์ STATUS ให้เป็น

STATUSแปลว่า
Up 3 hoursปกติ รันมา 3 ชั่วโมงแล้ว
Up 2 min (healthy)ปกติ และผ่าน health check ด้วย
Exited (0)จบการทำงานปกติ — มักเป็น job ที่รันเสร็จแล้ว
Exited (1)แอปพังเอง → ไปดู docker logs ต่อ
Exited (137)โดนฆ่าเพราะใช้ RAM เกิน (OOM) → เพิ่ม memory limit
Restarting (1)ตายแล้วเกิดใหม่วนไปเรื่อยๆ → แอปพังตั้งแต่ตอนเริ่ม
💡
Exit code 0 = ปกติ · อื่นๆ = มีปัญหา · 137 = OOM · 143 = โดนสั่งหยุด

docker logs — คำสั่งที่จะใช้บ่อยที่สุด

# ดู log ล่าสุด 100 บรรทัด พร้อมเวลา
docker logs --tail 100 -t my-app

# ตามดูแบบ real-time (Ctrl+C เพื่อออก)
docker logs -f my-app

# ดูเฉพาะ 30 นาทีล่าสุด
docker logs --since 30m my-app

# กรองเฉพาะบรรทัดที่มีคำว่า error
docker logs my-app 2>&1 | grep -i error
✅
เวลาส่งเคสต่อให้ dev แนบ docker logs --tail 200 -t ไปด้วยเสมอ จะช่วยได้เยอะมาก

docker exec — เข้าไปดูข้างใน

# เข้า shell ข้างใน container
docker exec -it my-app sh        # ลอง sh ก่อน (มีเกือบทุก image)
docker exec -it my-app bash      # ถ้า image มี bash

# สั่งทีละคำสั่งโดยไม่ต้องเข้าไป
docker exec my-app env           # ดู environment variables
docker exec my-app ls /app       # ดูไฟล์ข้างใน
docker exec my-app cat /app/config.json
💡
-it = interactive + terminal ต้องใส่คู่กันเสมอเวลาเข้า shell
🚫
อย่าแก้ไฟล์ข้างใน container — พอ restart แล้วหายหมด

สั่ง start / stop / restart

docker restart my-app     # รีสตาร์ท — ทางแก้เบื้องต้นอันดับแรก
docker stop my-app        # หยุดแบบสุภาพ (รอ 10 วิ)
docker start my-app       # เปิดกลับ
docker kill my-app        # ฆ่าทันที — ใช้เมื่อ stop ไม่ยอมหยุด
docker rm my-app          # ลบ container (ต้อง stop ก่อน)
⚠️
ก่อนกด restart ให้เก็บ log ไว้ก่อน — restart แล้วอาการหาย แต่หลักฐานก็หายไปด้วย ทำให้หาสาเหตุจริงไม่ได้

docker stats & inspect

ดูการใช้ทรัพยากร

docker stats
docker stats my-app --no-stream

ใช้ตอนลูกค้าบอก "ระบบช้า" — ดูว่า CPU/MEM ตันหรือเปล่า

ดู config ของ container

docker inspect my-app
docker inspect my-app | grep -A5 Env
docker port my-app

ใช้ตอนสงสัยว่า env / port / mount ตั้งค่ามาถูกหรือเปล่า

💡
ใน docker stats ถ้า MEM % แตะ 100% บ่อยๆ → เตรียมเจอ Exit 137 (OOM)

Cheat Sheet — Docker

ดูสถานะ

docker ps -a
docker stats
docker inspect <name>
docker port <name>

ดู log

docker logs --tail 100 -t <name>
docker logs -f <name>
docker logs --since 30m <name>

ควบคุม

docker restart <name>
docker stop / start <name>
docker exec -it <name> sh

จัดการพื้นที่

docker system df
docker image ls
docker system prune
🧪 Lab 1 · 20 นาที

ลองไล่ปัญหาด้วยตัวเอง

1
รัน docker run -d --name web -p 8080:80 nginx แล้วเปิด localhost:8080
2
ดูสถานะด้วย docker ps — ลองอ่านคอลัมน์ STATUS และ PORTS
3
เปิด docker logs -f web ไว้ แล้วรีเฟรชหน้าเว็บ ดูว่า log ขึ้นอะไร
4
docker exec -it web sh แล้วลอง ls /usr/share/nginx/html
5
docker stop web → docker ps (หายไป) → docker ps -a (ยังอยู่ สถานะ Exited)
🎯
เป้าหมาย: คุ้นมือกับ 4 คำสั่งหลัก และเห็นความต่างของ ps กับ ps -a
Part 3

Image & Registry

เท่าที่ต้องรู้ ไม่ต้องเขียนเป็น

Image และ Tag

registry.company.com/team/my-app:1.4.2
└─── registry ───┘ └─ ชื่อ ─┘ └tag┘
⚠️
latest ไม่ได้แปลว่าใหม่ล่าสุดเสมอ — มันคือแค่ชื่อ tag หนึ่ง ใครจะตั้งก็ได้ เวลาถามลูกค้าให้ถาม tag ที่แน่ชัด

คำสั่งเกี่ยวกับ Image

docker images                    # ดู image ที่มีในเครื่อง
docker pull nginx:1.25           # ดึง image จาก registry
docker rmi nginx:1.25            # ลบ image

# login เข้า private registry ของบริษัท
docker login registry.company.com

# ดูว่า image กินพื้นที่ไปเท่าไหร่
docker system df
🔴
เจอ pull access denied หรือ unauthorized → ส่วนใหญ่คือ ยังไม่ได้ login หรือ ชื่อ image/tag พิมพ์ผิด

อ่าน Dockerfile ให้พอเข้าใจ

FROM node:20-alpine          # ใช้ base image อะไร
WORKDIR /app                  # โฟลเดอร์ทำงานข้างใน
COPY package*.json ./         # ก๊อปไฟล์เข้า image
RUN npm install               # สั่งรันตอน build
COPY . .
ENV NODE_ENV=production       # ตั้งค่า env
EXPOSE 3000                   # แอปฟังพอร์ตไหน
CMD ["node", "server.js"]     # คำสั่งที่รันตอน start ← ดูบรรทัดนี้บ่อย
💡
ในทางปฏิบัติ ดูแค่ FROM (base อะไร), EXPOSE (พอร์ตไหน), CMD (รันอะไร) ก็พอแล้ว

Registry — image มาจากไหน

🌐

Public

Docker Hub — nginx, redis, postgres ดึงได้เลย

🔒

Private

Harbor / GitLab / ECR ของบริษัท — ต้อง login ก่อน

💻

Local

build เองในเครื่อง — ไม่มีใน registry

Error ที่เจอสาเหตุที่พบบ่อย
manifest unknowntag ที่ระบุไม่มีอยู่จริง
unauthorizedยังไม่ได้ login / token หมดอายุ
connection timeoutเน็ต/VPN/firewall เข้า registry ไม่ได้
Part 4

Docker Compose

ตัวที่ทีมเราใช้จริงในงานประจำวัน

Docker Compose คืออะไร

📘
Docker Compose คือเครื่องมือสำหรับสั่งรัน container หลายตัวพร้อมกัน โดยเขียนไว้ในไฟล์เดียวชื่อ docker-compose.yml
คำสั่งที่เห็นแปลว่า
docker compose (ไม่มีขีด)รุ่นใหม่ (v2) ที่ใช้กันปัจจุบัน
docker-compose (มีขีด)รุ่นเก่า (v1) — ถ้าลูกค้าใช้คำสั่งนี้ แปลว่าเครื่องยังเป็นของเก่า
⚠️
Compose เหมาะกับการรันบนเครื่องเดียว — ถ้าต้องรันหลายเครื่องหรืออยากให้มันฟื้นเองเวลาพัง ต้องใช้ Kubernetes (พรุ่งนี้)

ทำไมต้องมี Compose

ถ้าไม่มี Compose

docker run -d --name db \
  -e POSTGRES_PASSWORD=... \
  -v pgdata:/var/lib/... postgres

docker run -d --name api \
  -p 3000:3000 --link db ...

docker run -d --name web ...

ยาว จำไม่ได้ พิมพ์ผิดง่าย

ถ้ามี Compose

docker compose up -d

เขียนทุกอย่างไว้ในไฟล์ docker-compose.yml ครั้งเดียว แล้วสั่งทีเดียวจบ

✅
ไฟล์เดียว = เอกสารที่บอกว่าระบบมี service อะไรบ้าง

อ่าน docker-compose.yml

services:
  api:
    image: registry.company.com/api:1.4.2
    ports: ["8080:3000"]        # เครื่องแม่ 8080 → ข้างใน 3000
    environment:
      DB_HOST: db                     # เรียก service อื่นด้วย "ชื่อ service"
    depends_on: [db]
    restart: unless-stopped

  db:
    image: postgres:15
    volumes: ["pgdata:/var/lib/postgresql/data"]   # เก็บข้อมูลถาวร

volumes:
  pgdata:

4 จุดที่ต้องดูเป็นในไฟล์ Compose

คีย์อ่านว่ายังไง
imageservice นี้ใช้ image อะไร tag ไหน — ตรงกับที่ลูกค้าบอกหรือเปล่า
ports"ข้างนอก:ข้างใน" — เข้าเว็บไม่ได้ให้ดูตรงนี้ก่อน
environmentค่า config เช่น host ของ DB, API key — ผิดบ่อยที่สุด
volumes"ในเครื่อง:ใน container" — ข้อมูลหายหลัง restart ให้ดูตรงนี้
💡
ทั้ง ports และ volumes อ่านจาก ซ้าย = ฝั่งเครื่องแม่, ขวา = ฝั่งใน container เสมอ

คำสั่ง Compose ที่ใช้บ่อย

docker compose up -d              # สร้างและรันทั้งหมด (เบื้องหลัง)
docker compose ps                 # ดูสถานะทุก service
docker compose logs -f api        # ดู log เฉพาะ service ← ใช้บ่อยสุด
docker compose logs --tail 100    # ดู log ทุก service
docker compose restart api        # รีสตาร์ทเฉพาะตัวเดียว
docker compose exec api sh        # เข้าไปข้างใน
docker compose down               # หยุดและลบทั้งหมด
docker compose pull && docker compose up -d   # อัปเดตเป็น image ใหม่
🚫
docker compose down -v จะลบ volume ทิ้งด้วย = ข้อมูลหายถาวร — อย่าใช้บนเครื่องลูกค้าเด็ดขาด

เรื่องที่พลาดกันบ่อยใน Compose

🔌 Service คุยกันไม่ได้

ใน compose ให้เรียกกันด้วย ชื่อ service (db) ไม่ใช่ localhost — เพราะแต่ละ container มี localhost ของตัวเอง

🚪 Port ต้องดูฝั่งซ้าย

"8080:3000" เข้าเว็บที่ 8080 ไม่ใช่ 3000 · แก้ไฟล์แล้วต้อง up -d ใหม่ถึงจะมีผล

🔁 restart: always

ทำให้ container ที่พังกลับมาเองเรื่อยๆ อาจเห็น "Up" ทั้งที่จริงมันวน restart อยู่ — ดู log ให้ชัวร์

📝 แก้ไฟล์แล้วไม่มีผล

แก้ yml เสร็จต้อง docker compose up -d ซ้ำ · restart เฉยๆ ไม่โหลด config ใหม่

🧪 Lab 2 · 25 นาที

Compose: รันสแตกเล็กๆ แล้วทำให้มันพัง

1
เปิดไฟล์ lab/docker-compose.yml ที่แจกให้ อ่านว่ามี service อะไรบ้าง
2
docker compose up -d แล้ว docker compose ps — ครบทุกตัวไหม
3
เข้าเว็บตาม port ที่เห็นในไฟล์ · ลองเดาก่อนว่าต้องเข้าพอร์ตอะไร
4
แก้ DB_HOST ให้ผิด → up -d ใหม่ → ดู compose logs api ว่าฟ้องว่าอะไร
5
แก้กลับให้ถูก แล้วยืนยันว่ากลับมาปกติ
🎯
เป้าหมาย: เห็นว่า "config ผิด" หน้าตาใน log เป็นยังไง — เคสนี้เจอบ่อยที่สุดในงานจริง
Part 5

เคสจริงที่เจอบ่อย

อาการ → สาเหตุที่เป็นไปได้ → สิ่งที่ต้องเช็ค

เคส 1 — "เข้าเว็บไม่ได้เลย"

1
docker compose ps — container ยังรันอยู่ไหม (Up หรือ Exited)
2
ถ้า Exited → docker compose logs --tail 100 <service> ดูว่าตายเพราะอะไร
3
ถ้า Up → เช็ค port mapping: docker port <name> ตรงกับที่ลูกค้าเข้าไหม
4
ลองยิงจากในเครื่อง server เอง: curl localhost:8080
5
ถ้าในเครื่องได้ แต่ข้างนอกไม่ได้ → ปัญหาอยู่ที่ firewall / LB / DNS ไม่ใช่ container
✅
ข้อ 4–5 สำคัญมาก เพราะแยกได้ว่าเป็นปัญหาของ แอป หรือ เน็ตเวิร์ก

เคส 2 — "หลัง deploy แล้วพัง"

เช็คตามลำดับ

  • image tag เปลี่ยนไปเป็นอะไร
  • logs --since 30m ดู error ช่วงหลัง deploy
  • เทียบ env ระหว่างของเดิมกับของใหม่
  • ถามว่า deploy เวลาไหน แล้วพังตอนไหน

อาการที่บอกสาเหตุ

Exited (1) ทันทีconfig/env หาย
ImagePull errortag ผิด/registry
Restarting วนแอป crash ตอน start
Up แต่ 502แอปยังไม่พร้อม/พอร์ตผิด
⚠️
คำถามแรกที่ควรถามเสมอ: "เปลี่ยนอะไรไปก่อนหน้านี้ไหม" — 80% ของเคสมีการเปลี่ยนแปลงนำมาก่อน

เคส 3 — "ระบบช้า / ค้างเป็นช่วงๆ"

docker stats                     # CPU / MEM ตันหรือเปล่า
df -h                            # ดิสก์เต็มไหม ← สาเหตุที่ถูกมองข้ามบ่อย
docker system df                 # docker กินพื้นที่ไปเท่าไหร่
docker ps -a | grep -i restart   # มีตัวไหน restart วนอยู่ไหม
🔴
MEM ใกล้ 100% → เตรียมเจอ Exit 137 (OOM)
🟠
ดิสก์เต็ม → container เขียน log ไม่ได้ → พังแบบไม่มีเหตุผล
🧹
ล้างของไม่ใช้: docker system prune · ระวัง -a --volumes ลบ volume ด้วย

เคส 4 — "ข้อมูลหายหลัง restart"

🚫
ถ้ามีคนเคยรัน docker compose down -v หรือ docker volume rm → ข้อมูลหายถาวร กู้ไม่ได้ ต้องไปดู backup
💡
เคสแบบนี้ให้ escalate ทันที พร้อมข้อมูลว่ามีใครรันคำสั่งอะไรไปบ้าง

Checklist — ไล่ปัญหาใน 5 ขั้น

1
มันรันอยู่ไหม — docker compose ps / docker ps -a
2
มันบ่นว่าอะไร — logs --tail 200 -t อ่านจากบรรทัดล่างขึ้นบน
3
config ถูกไหม — exec <name> env / เทียบกับไฟล์ compose
4
ทรัพยากรพอไหม — docker stats, df -h
5
เน็ตเวิร์กถึงกันไหม — curl localhost:<port> จากในเครื่อง
✅
ทำครบ 5 ข้อนี้ก่อน escalate — จะบอก dev ได้เลยว่าปัญหาอยู่โซนไหน

เมื่อไหร่ควร Escalate — และต้องแนบอะไร

ควรส่งต่อเมื่อ

  • ต้องแก้โค้ด หรือแก้ config ระดับ production
  • เกี่ยวกับข้อมูลสูญหาย / ต้องกู้ backup
  • ทำครบ checklist แล้วยังไม่รู้สาเหตุ
  • ต้องรันคำสั่งที่มีผลถาวร เช่น ลบ volume

แนบไปด้วยเสมอ

  • ชื่อ service / container และ image tag
  • docker ps -a (ผลลัพธ์)
  • logs --tail 200 -t
  • เวลาที่เริ่มมีอาการ + สิ่งที่เปลี่ยนก่อนหน้า
  • สิ่งที่ลองแก้ไปแล้ว

สรุป Day 1

➡️
พรุ่งนี้: ถ้ามี container เยอะๆ หลายเครื่อง จะจัดการยังไง — Kubernetes & Rancher

Q&A

มีเคสจริงที่เคยเจอแล้วอยากถาม เอามาคุยกันได้เลย

← → เปลี่ยนสไลด์ · F จอเต็ม · P พิมพ์ PDF