0Pricing
Go Academy · บทเรียน

Docker Compose สำหรับการพัฒนาในเครื่อง

เชื่อมบริการ Go กับ PostgreSQL และ Redis

Docker Compose สำหรับการพัฒนาในเครื่อง เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ Docker Compose

Docker Compose จัดการคอนเทนเนอร์หลายรายการ เช่น แอปพลิเคชัน ฐานข้อมูล แคช และตัวรับส่งข้อความ สำหรับการพัฒนาในเครื่อง โดยจำลองสภาพแวดล้อมที่ใกล้เคียงกับสภาพแวดล้อมจริงโดยไม่ต้องตั้งค่าบริการแต่ละรายการด้วยตนเอง

โครงสร้าง docker-compose.yml

กำหนดบริการ เครือข่าย และโวลุมไว้ในไฟล์ YAML:

services:
  app:
    build: .
    ports: ["8080:8080"]
    environment:
      - DATABASE_URL=postgres://app:pass@db/mydb
    depends_on: [db]
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: app
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

การโหลดใหม่ทันทีด้วย Air

ใช้ github.com/air-verse/air เพื่อโหลดโปรแกรมใหม่ทันทีระหว่างการพัฒนา เมานต์ซอร์สโค้ดเข้าไปในคอนเทนเนอร์ แล้วเรียกใช้ air แทนไบนารี:

app:
  volumes:
    - .:/app
  command: air

การตรวจสอบสถานะ

กำหนดการตรวจสอบสถานะ เพื่อให้ depends_on รอจนกว่า DB จะพร้อมใช้งานจริง ไม่ใช่เพียงเริ่มทำงานแล้ว:

db:
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U app"]
    interval: 5s
    timeout: 3s
    retries: 5
app:
  depends_on:
    db:
      condition: service_healthy

การแทนที่สำหรับสภาพแวดล้อม

ใช้ docker-compose.override.yml ซึ่งจะถูกรวมโดยอัตโนมัติ สำหรับการตั้งค่าที่ใช้เฉพาะในเครื่อง โดยรักษาไฟล์พื้นฐานให้สะอาดสำหรับ CI:

# docker-compose.override.yml
services:
  app:
    volumes: [".:/app"]  # source mount for live reload

เครือข่ายที่มีชื่อ

วางบริการไว้บนเครือข่ายแบบกำหนดเองร่วมกัน เพื่อให้ค้นหาบริการด้วย DNS โดยใช้ชื่อบริการ:

networks:
  backend:
    driver: bridge
services:
  app:
    networks: [backend]
  db:
    networks: [backend]

ไฟล์สภาพแวดล้อม

ใช้คีย์ env_file เพื่อโหลดไฟล์ .env เข้าไปในคอนเทนเนอร์ และเก็บข้อมูลลับไม่ให้ปรากฏใน YAML:

app:
  env_file: .env.local

การเรียกใช้คำสั่ง

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

docker compose up -d      # start in background
docker compose down -v    # stop and remove volumes
docker compose logs -f app # stream app logs
docker compose exec db psql -U app mydb # run in container

การเติมข้อมูลเริ่มต้นลงฐานข้อมูล

เมานต์ไฟล์ SQL สำหรับเติมข้อมูลเริ่มต้นเข้าไปในไดเรกทอรี /docker-entrypoint-initdb.d ของอิมเมจ postgres ไฟล์เหล่านี้จะทำงานเมื่อสร้างคอนเทนเนอร์เป็นครั้งแรก:

db:
  volumes:
    - ./migrations:/docker-entrypoint-initdb.d

โพรไฟล์

ใช้โพรไฟล์ของ Compose เพื่อเริ่มบริการเสริม เช่น ชุดเครื่องมือตรวจสอบสถานะ เฉพาะเมื่อจำเป็น:

services:
  grafana:
    profiles: ["monitoring"]

Compose ใน CI

เรียกใช้การทดสอบการทำงานร่วมกับบริการจริงใน CI ด้วย Compose GitHub Actions รองรับ Docker Compose โดยตรง ให้ใช้การตรวจสอบสถานะเพื่อรอจนกว่าบริการจะพร้อมใช้งาน

ตรวจสอบความเข้าใจ

คุณจะทำให้คอนเทนเนอร์ของแอปพลิเคชันรอจนกว่าฐานข้อมูลจะพร้อมใช้งานใน Docker Compose ได้อย่างไร

สรุป: Docker Compose

ประเด็นสำคัญ:

  • docker-compose.yml ใช้กำหนดบริการ เครือข่าย และโวลุมทั้งหมด
  • ใช้ depends_on ร่วมกับ healthcheck เพื่อให้บริการพร้อมใช้งาน
  • ใช้ไฟล์แทนที่สำหรับการตั้งค่าในการพัฒนาในเครื่อง และใช้ env_file สำหรับข้อมูลลับ
  • ใช้ Air เพื่อโหลดใหม่ทันที และเมานต์ซอร์สโค้ดเป็นโวลุม

คำถามที่พบบ่อย

บทเรียน “Docker Compose สำหรับการพัฒนาในเครื่อง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Docker Compose สำหรับการพัฒนาในเครื่อง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Docker Compose สำหรับการพัฒนาในเครื่อง”

เชื่อมบริการ Go กับ PostgreSQL และ Redis คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “Docker Compose สำหรับการพัฒนาในเครื่อง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้าง Docker หลายขั้นตอนสำหรับ Go
  2. การกำหนดค่าสภาพแวดล้อมและข้อมูลลับ
  3. Docker Compose สำหรับการพัฒนาในเครื่อง
  4. การตรวจสอบสถานะและการปรับแต่งสำหรับการใช้งานจริง
← กลับไปที่ Go Academy