ข้ามไปยังเนื้อหาหลัก
คู่มือระบบ เนื้อหาผ่านการตรวจสอบแล้ว

คำศัพท์ Docker ที่ควรรู้จัก

บทความนี้แนะนำคำศัพท์พื้นฐานใน Docker ที่ควรรู้ ได้แก่ Image (แม่แบบสำหรับ Container), Container (instance ที่ทำงานอยู่ของ Image), Dockerfile (ไฟล์คำสั่งสร้าง I...

คำศัพท์ Docker ที่ควรรู้จัก

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

Image (อิมเมจ)

Image คือแม่แบบ (template) ที่ใช้สร้าง Container ครับ ลองนึกภาพว่า Image คือไฟล์ .ISO ที่ใช้ติดตั้งระบบปฏิบัติการ หรือพิมพ์เขียวที่ใช้สร้างบ้าน Image ประกอบไปด้วยทุกสิ่งที่แอปพลิเคชันต้องการเพื่อทำงาน เช่น โค้ด ไลบรารี runtime environment ตัวแปร environment และไฟล์ configuration ต่างๆ

Image เป็นแบบอ่านอย่างเดียว (read-only) นั่นหมายความว่าเมื่อสร้าง Container จาก Image แล้ว Container จะไม่สามารถเปลี่ยนแปลง Image ได้โดยตรง การเปลี่ยนแปลงใดๆ จะเกิดขึ้นใน Container เท่านั้น

ตัวอย่าง:

สมมติว่าคุณต้องการรันแอปพลิเคชัน Node.js บน Docker คุณจะต้องมี Image ที่มี Node.js ติดตั้งอยู่แล้ว ซึ่งอาจจะเป็น Image ที่สร้างโดย Node.js เอง หรือ Image ที่สร้างโดยผู้ใช้คนอื่น

Container (คอนเทนเนอร์)

Container คือ instance ที่ทำงานอยู่ (running instance) ของ Image ครับ ถ้า Image คือพิมพ์เขียว Container ก็คือบ้านที่สร้างจากพิมพ์เขียว Container คือสภาพแวดล้อมที่ถูกแยกส่วน (isolated environment) ที่แอปพลิเคชันของคุณทำงานอยู่

Container มีระบบไฟล์, กระบวนการ (processes), เครือข่าย (network) และทรัพยากรอื่นๆ ที่เป็นของตัวเอง ซึ่งแยกจาก Container อื่นๆ และจากระบบปฏิบัติการของเครื่องโฮสต์ (host machine) การแยกส่วนนี้ทำให้แอปพลิเคชันมีความปลอดภัยและสามารถทำงานได้อย่างสม่ำเสมอในสภาพแวดล้อมที่แตกต่างกัน

ตัวอย่าง:

เมื่อคุณรัน Image Node.js คุณจะได้ Container ที่มี Node.js ทำงานอยู่ คุณสามารถเข้าถึง Container ผ่านทาง command line และรันแอปพลิเคชัน Node.js ของคุณได้

ความแตกต่างระหว่าง Image และ Container:

  • Image: แม่แบบ, แบบอ่านอย่างเดียว, ไม่มีการเปลี่ยนแปลง
  • Container: Instance ที่ทำงานอยู่, สามารถเปลี่ยนแปลงได้, สร้างจาก Image

Dockerfile (ด็อกเกอร์ไฟล์)

Dockerfile คือไฟล์ข้อความ (text file) ที่มีชุดคำสั่ง (instructions) ที่ใช้สร้าง Image ครับ Dockerfile เปรียบเสมือนสูตรอาหารที่บอก Docker ว่าจะต้องทำอะไรบ้างเพื่อสร้าง Image ที่ต้องการ

Dockerfile ประกอบไปด้วยคำสั่งต่างๆ เช่น FROM (ระบุ Image พื้นฐาน), RUN (รันคำสั่งใน Image), COPY (คัดลอกไฟล์จากเครื่องโฮสต์ไปยัง Image), EXPOSE (เปิดพอร์ต), และ CMD (รันคำสั่งเมื่อ Container เริ่มทำงาน)

ตัวอย่าง:

# ใช้ Node.js เวอร์ชั่น 16 เป็น Image พื้นฐาน
FROM node:16

# สร้าง directory สำหรับเก็บโค้ดแอปพลิเคชัน
WORKDIR /app

# คัดลอก package.json และ package-lock.json ไปยัง Container
COPY package*.json ./

# ติดตั้ง dependencies
RUN npm install

# คัดลอกโค้ดแอปพลิเคชันไปยัง Container
COPY . .

# เปิดพอร์ต 3000
EXPOSE 3000

# รันแอปพลิเคชันเมื่อ Container เริ่มทำงาน
CMD ["npm", "start"]

Dockerfile นี้จะสร้าง Image ที่มี Node.js เวอร์ชั่น 16, dependencies ที่จำเป็น และโค้ดแอปพลิเคชันของคุณ เมื่อ Container ถูกสร้างจาก Image นี้ แอปพลิเคชันของคุณจะเริ่มทำงานบนพอร์ต 3000

Docker Hub (ด็อกเกอร์ ฮับ)

Docker Hub คือ registry สาธารณะ (public registry) ที่ใช้เก็บและแชร์ Docker Images ครับ คุณสามารถคิดว่า Docker Hub เป็นเหมือน GitHub สำหรับ Docker Images

Docker Hub มี Images ให้เลือกใช้มากมาย ทั้ง Images ที่สร้างโดย Docker เอง, Images ที่สร้างโดยบริษัทต่างๆ, และ Images ที่สร้างโดยผู้ใช้ทั่วไป คุณสามารถดาวน์โหลด Images จาก Docker Hub มาใช้ได้ฟรี หรืออัปโหลด Images ของคุณเองไปยัง Docker Hub เพื่อแชร์ให้กับคนอื่นๆ

ตัวอย่าง:

หากคุณต้องการใช้ Image Node.js คุณสามารถค้นหาบน Docker Hub และดาวน์โหลด Image นั้นมาใช้ได้โดยใช้คำสั่ง:

docker pull node:latest

คำสั่งนี้จะดาวน์โหลด Image Node.js เวอร์ชั่นล่าสุดจาก Docker Hub มายังเครื่องของคุณ

Docker Compose (ด็อกเกอร์ คอมโพส)

Docker Compose คือเครื่องมือที่ใช้สำหรับ define และ run multi-container Docker applications ครับ Docker Compose ช่วยให้คุณสามารถจัดการแอปพลิเคชันที่ประกอบไปด้วยหลาย Container ได้อย่างง่ายดาย

คุณสามารถ define dependencies ระหว่าง Containers, กำหนดค่าเครือข่าย, และกำหนดค่า volumes ได้ในไฟล์ docker-compose.yml ไฟล์เดียว จากนั้นคุณสามารถใช้คำสั่ง docker-compose up เพื่อสร้างและรัน Containers ทั้งหมดได้ในครั้งเดียว

ตัวอย่าง:

สมมติว่าคุณมีแอปพลิเคชันที่ประกอบไปด้วย web server, database, และ cache คุณสามารถใช้ Docker Compose เพื่อ define dependencies ระหว่าง Containers เหล่านี้ และรัน Containers ทั้งหมดได้ด้วยคำสั่งเดียว

ไฟล์ docker-compose.yml:

version: "3.9"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app

  app:
    build: ./app
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:password@db:5432/database
    depends_on:
      - db

  db:
    image: postgres:13
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=database

volumes:
  db_data:

ไฟล์นี้ define สาม services: web (nginx web server), app (แอปพลิเคชันของคุณ), และ db (PostgreSQL database) แต่ละ service มีการกำหนดค่า Image, ports, volumes, และ dependencies ของตัวเอง

คุณสามารถรันแอปพลิเคชันนี้ได้โดยใช้คำสั่ง:

docker-compose up -d

คำสั่งนี้จะสร้างและรัน Containers ทั้งหมดที่ define ไว้ในไฟล์ docker-compose.yml ใน background (-d flag)

สรุป

ในบทนี้ เราได้เรียนรู้คำศัพท์พื้นฐานที่ใช้กันบ่อยๆ ในโลกของ Docker ได้แก่ Image, Container, Dockerfile, Docker Hub, และ Docker Compose การเข้าใจคำศัพท์เหล่านี้จะช่วยให้คุณสามารถเรียนรู้และใช้งาน Docker ได้อย่างมีประสิทธิภาพมากขึ้น ในบทถัดไป เราจะมาเรียนรู้วิธีการติดตั้ง Docker บนเครื่องของคุณกันครับ

Office.in.th Custom Service

ต้องการพัฒนาระบบหรือปรับแต่งจากโครงสร้างนี้?

Office.in.th รับพัฒนาและออกแบบ Enterprise Web Application, API Integration และระบบบริหารงานภาครัฐ/เอกชน พร้อมการสนับสนุนระยะยาว

ดูบริการรับพัฒนาซอฟต์แวร์