arrow_backกลับไปที่บันทึกภาคสนาม
DEVOPS เผยแพร่แล้ว 9 Aug 2026

Docker คืออะไร และทำไมนักพัฒนาจึงควรเรียนรู้

การแจกแจงที่เป็นประโยชน์เกี่ยวกับ Docker สำหรับนักพัฒนา: containers กับ VMs, คำสั่งหลัก, Dockerfiles, และวิธีเริ่มใช้งานในโปรเจกต์จริง

Docker ปรากฏขึ้นอย่างต่อเนื่องในประกาศสมัครงานและคู่มือการตั้งค่า และถ้าคุณไม่เคยใช้ containers มาก่อน มันอาจรู้สึกเหมือนกำแพงที่คุณต้องปีนขึ้นไปก่อนจึงได้เขียนโค้ดจริงๆ ไม่ยากนักหลังจากที่คุณเข้าใจศัพท์บัญญัติแล้ว

Container คืออะไรจริงๆ

Container บรรจุแอปพลิเคชันของคุณพร้อมกับทุกอย่างที่ต้องใช้ในการรัน: โค้ด, runtime, ไลบรารีระบบ, และไฟล์กำหนดค่า ไม่ใช่เครื่องเสมือน VM ทำให้เสมือนระบบปฏิบัติการทั้งหมด รวมถึง kernel ซึ่งหมายความว่าการบูตสามารถใช้เวลาหนึ่งนาทีและใช้ RAM สองสามกิกะไบต์ Container ใช้ kernel ของเครื่องโฮสต์ร่วมกันและแยกกระบวนการเท่านั้น ดังนั้นจึงเริ่มต้นในเวลาน้อยกว่าหนึ่งวินาทีและปกติใช้สิบกว่ามegabytes แทนที่จะเป็นกิกะไบต์

ความแตกต่างนี้คือเหตุผลที่ Docker ยึดครองการพัฒนาเฉพาะที่และ CI pipelines เร็วขึ้น คุณสามารถเริ่มต้นฐานข้อมูล Postgres, Redis cache, และเซิร์ฟเวอร์แอปบนแล็ปท็อปเครื่องเดียวโดยไม่ต้องติดตั้งอย่างใดอย่างหนึ่งโดยตรงบน OS ของคุณ

ชิ้นส่วนหลักที่คุณต้องรู้

มีสี่คำศัพท์ที่ครอบคลุมส่วนใหญ่ของสิ่งที่คุณจะจัดการในแต่ละวัน:

  • Image: template แบบอ่านอย่างเดียวที่สร้างจาก Dockerfile ลองนึกว่ามันเป็น snapshot ของ filesystem บวกกับข้อมูลเมตาเกี่ยวกับวิธีการรันมัน
  • Container: instance ที่ทำงานของ image คุณสามารถเริ่มต้น, หยุด, และลบ containers โดยไม่ต้องแตะ image ที่มาจาก
  • Dockerfile: ไฟล์ข้อความที่มีคำสั่งสำหรับการสร้าง image, บรรทัดต่อบรรทัด
  • Registry: ที่เก็บ images ดึง images จากที่นี่ ส่วนใหญ่มักจะเป็น Docker Hub

Minimal Dockerfile สำหรับแอป Node.js ดูเหมือนนี้:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

สร้างมันด้วย docker build -t my-app . และรันมันด้วย docker run -p 3000:3000 my-app ธง -p จับคู่พอร์ตบนเครื่องของคุณกับพอร์ตภายใน container ซึ่งเป็นวิธีที่คุณเข้าถึงแอปจากเบราว์เซอร์ของคุณจริงๆ

คำสั่งที่คุณจะใช้ตลอดเวลา

คำสั่งจำนวนหนึ่งครอบคลุมงานส่วนใหญ่ในแต่ละวัน:

  • docker ps — แสดงรายชื่อ containers ที่ทำงานอยู่
  • docker ps -a — แสดงรายชื่อ containers ทั้งหมด รวมถึงที่หยุดไว้
  • docker images — แสดงรายชื่อ images บนเครื่องของคุณ
  • docker logs <container> — ตรวจสอบผลลัพธ์จาก container ที่ทำงานหรือขัดข้อง
  • docker exec -it <container> sh — เปิด shell ภายใน container ที่ทำงาน
  • docker rm / docker rmi — ทำความสะอาด containers และ images ที่คุณไม่ต้องการแล้ว

คู่สุดท้ายนั้นมีความสำคัญมากกว่าที่คนคาดหวัง Docker จะยินดีให้พื้นที่ดิสก์หายไปในรูปของ images เก่าและ containers ที่หยุด การรัน docker system prune บ่อยครั้งคืนพื้นที่ที่น่าประหลาดใจ

ทำไม docker-compose จึงเปลี่ยนขั้นตอนการทำงาน

โปรเจกต์จริงส่วนใหญ่ต้องการมากกว่า container หนึ่งตัว: เซิร์ฟเวอร์แอป, ฐานข้อมูล, บางทีแคช การเขียนคำสั่ง docker run สำหรับแต่ละคำสั่งเก่าอย่างรวดเร็ว docker-compose.yml ให้คุณกำหนดสแต็กทั้งหมดในไฟล์เดียว:

services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: devpassword
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

รัน docker compose up และบริการทั้งสองเริ่มต้นพร้อมกัน, เชื่อมต่อเครือข่ายดังนั้น web สามารถเข้าถึง db โดยชื่อบริการ นี่คือการตั้งค่าที่คุณจะเห็นใน README ของเกือบทุกที่เก็บ open-source และการเข้าใจมันหมายความว่าคุณสามารถ clone โปรเจกต์และมีการรันในเวลาไม่กี่นาทีแทนที่จะติดตั้ง Postgres, Redis, และสิ่งอื่นๆ ที่แอปต้องการด้วยตนเอง

ที่ที่คนติดขัดในช่วงแรก

Volumes ทำให้เกือบทุกคนสับสนในตอนแรก หากไม่มี volume, สิ่งใดที่เขียนภายใน container จะหายไปเมื่อ container ถูกลบออก ซึ่งเป็นปัญหาสำหรับฐานข้อมูล ส่วน volumes ในไฟล์ compose ด้านบนจับคู่ volume ที่ตั้งชื่อไว้กับพาธภายใน container ดังนั้นข้อมูลจึงอยู่รอดหลังจากการรีสตาร์ต

ความผิดพลาดทั่วไปอีกอย่างหนึ่งคือการคัดลอก node_modules หรือ .git ไปยัง image เนื่องจากไม่มีไฟล์ .dockerignore เพิ่มหนึ่งเช่นเดียวกับ .gitignore:

node_modules
.git
.env

นี่ช่วยให้การสร้างเร็วขึ้นและ images เล็กลง ซึ่งสำคัญเมื่อคุณกำลังพุช images ไปยัง registry หรือปรับใช้ไปยัง Kubernetes

ที่ไปหลังจากพื้นฐาน

เมื่อการสร้างและการรัน containers รู้สึกปกติแล้ว ทักษะที่มีประโยชน์ถัดไปคือ multi-stage builds สำหรับ production images ที่เล็กกว่า, การทำความเข้าใจ Docker networking modes, และการอ่าน docker inspect output เมื่อบางสิ่งบางอย่างไม่ได้เชื่อมต่อที่ถูกต้อง ไม่มีสิ่งใดที่ยากนัก, มันแค่ไม่คุ้นเคยในครั้งแรก

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการ containerize แอปพลิเคชันจริงและเชื่อมต่อกับ cloud deployment pipelines, โปรดดู DevOps และ Cloud segments บน Korra Studio

เขียนด้วยความช่วยเหลือของ AI ตรวจสอบและเผยแพร่โดย Michal Pilch (CISSP), Korra Studio

พร้อมที่จะไปต่อหรือไม่

นี่คือบันทึกหนึ่งจากฐานความรู้ของ Korra Studio — แพลตฟอร์มจับคู่หัวข้อแต่ละหัวข้อกับการฝึกสอนแบบ 1-to-1

เริ่มใช้งานฟรีarrow_forward