メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

สร้าง Docker Image ของตัวเอง: Dockerfile เบื้องต้น

บทความนี้อธิบายถึงวิธีการสร้าง Docker Image ของตัวเองโดยใช้ Dockerfile ซึ่งเป็นไฟล์ที่กำหนดขั้นตอนการสร้าง Image ตั้งแต่การเลือก base image, ติดตั้งโปรแกรม, คัด...

สร้าง Docker Image ของตัวเอง: Dockerfile เบื้องต้น

ในบทที่แล้ว เราได้เรียนรู้วิธีการจัดการ Docker Container ต่างๆ ไม่ว่าจะเป็นการเริ่มต้น, หยุด, รีสตาร์ท, หรือลบ Container ไปแล้ว ในบทนี้ เราจะก้าวไปอีกขั้นด้วยการสร้าง Docker Image ของตัวเอง ซึ่งเป็นเหมือนพิมพ์เขียวสำหรับการสร้าง Container ที่เราต้องการ

การสร้าง Docker Image เองนั้นมีความสำคัญอย่างมาก เพราะมันช่วยให้เราสามารถกำหนดสภาพแวดล้อมที่ Container ของเราทำงานได้อย่างแม่นยำ และสามารถทำซ้ำ (reproducible) ได้อย่างง่ายดาย ไม่ว่าจะเป็นบนเครื่องของเราเอง, บนเซิร์ฟเวอร์, หรือในสภาพแวดล้อมการพัฒนาอื่นๆ

Dockerfile คืออะไร?

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

ข้อดีของการใช้ Dockerfile คือมันช่วยให้กระบวนการสร้าง Image เป็นไปอย่างอัตโนมัติ, สามารถทำซ้ำได้, และสามารถควบคุมเวอร์ชันได้ (เช่นเดียวกับโค้ดอื่นๆ) ซึ่งเป็นหัวใจสำคัญของ DevOps และ Continuous Integration/Continuous Deployment (CI/CD).

คำสั่งพื้นฐานใน Dockerfile

Dockerfile ประกอบด้วยคำสั่ง (instruction) หลายประเภท แต่ในบทนี้เราจะเน้นที่คำสั่งพื้นฐานที่ใช้บ่อยที่สุด:

  • FROM: กำหนด Image พื้นฐาน (base image) ที่ Image ของเราจะสร้างขึ้นต่อยอดจาก Image นั้น ตัวอย่างเช่น FROM ubuntu:latest หมายถึงเราจะใช้ Image ของ Ubuntu เวอร์ชันล่าสุดเป็นฐาน
  • RUN: ใช้สำหรับรันคำสั่งต่างๆ ภายใน Container ระหว่างการสร้าง Image ตัวอย่างเช่น RUN apt-get update && apt-get install -y nginx จะทำการอัพเดท package list และติดตั้ง Nginx
  • COPY: ใช้สำหรับคัดลอกไฟล์หรือโฟลเดอร์จากเครื่อง host ไปยัง Container ตัวอย่างเช่น COPY ./app /app จะคัดลอกโฟลเดอร์ app ใน directory ปัจจุบันไปยัง /app ใน Container
  • CMD: กำหนดคำสั่งที่จะรันเมื่อ Container เริ่มทำงาน มีได้เพียงคำสั่งเดียวเท่านั้นใน Dockerfile หากมีหลายคำสั่ง Docker จะใช้คำสั่งสุดท้ายเท่านั้น ตัวอย่างเช่น CMD ["nginx", "-g", "daemon off;"] จะสั่งให้ Nginx เริ่มทำงาน

ข้อควรจำ: คำสั่ง RUN จะถูก execute ในระหว่างการสร้าง Image ในขณะที่ CMD จะถูก execute เมื่อ Container ถูกสร้างขึ้นจาก Image นั้น

สร้าง Dockerfile อย่างง่าย

มาลองสร้าง Dockerfile อย่างง่ายเพื่อสร้าง Image ที่รัน Nginx Web Server กัน:

  1. สร้างโฟลเดอร์ใหม่สำหรับโปรเจ็กต์ของเรา (เช่น nginx-docker)
  2. สร้างไฟล์ชื่อ Dockerfile (ไม่มีนามสกุล) ภายในโฟลเดอร์นั้น
  3. ใส่เนื้อหาต่อไปนี้ลงในไฟล์ Dockerfile:
FROM ubuntu:latest

RUN apt-get update && apt-get install -y nginx

COPY ./index.html /var/www/html/index.html

CMD ["nginx", "-g", "daemon off;"]

คำอธิบาย:

  • FROM ubuntu:latest: ใช้ Ubuntu เวอร์ชันล่าสุดเป็น Image พื้นฐาน
  • RUN apt-get update && apt-get install -y nginx: อัพเดท package list และติดตั้ง Nginx
  • COPY ./index.html /var/www/html/index.html: คัดลอกไฟล์ index.html (ที่เราจะสร้างในขั้นตอนถัดไป) ไปยัง directory /var/www/html/ ใน Container ซึ่งเป็น directory ที่ Nginx ใช้สำหรับ serving static files
  • CMD ["nginx", "-g", "daemon off;"]: สั่งให้ Nginx เริ่มทำงานเมื่อ Container เริ่มทำงาน daemon off; เป็น flag ที่บอก Nginx ให้ทำงานใน foreground ซึ่งจำเป็นสำหรับการทำงานใน Container

ต่อมา สร้างไฟล์ index.html ในโฟลเดอร์ nginx-docker (ข้างๆ Dockerfile) โดยมีเนื้อหาดังนี้ (หรือเนื้อหา HTML ใดๆ ที่คุณต้องการ):

<!DOCTYPE html>
<html>
<head>
  <title>Hello from Docker!</title>
</head>
<body>
  <h1>Hello from Docker!</h1>
  <p>This is a simple HTML page served by Nginx running in a Docker container.</p>
</body>
</html>

สร้าง Image ด้วยคำสั่ง 'docker build'

เมื่อเรามี Dockerfile และไฟล์ index.html แล้ว เราก็พร้อมที่จะสร้าง Image ของเราแล้ว เปิด Terminal หรือ Command Prompt แล้วเข้าไปยังโฟลเดอร์ nginx-docker จากนั้นรันคำสั่ง:

docker build -t my-nginx-image .

คำอธิบาย:

  • docker build: คำสั่งสำหรับสร้าง Docker Image
  • -t my-nginx-image: Tag Image ที่สร้างด้วยชื่อ my-nginx-image การ tag image ช่วยให้เราอ้างอิง Image ได้ง่ายขึ้นในภายหลัง
  • .: ระบุ context สำหรับการ build ซึ่งในกรณีนี้คือ directory ปัจจุบัน (.) Docker จะมองหา Dockerfile ใน directory นี้และใช้ไฟล์ทั้งหมดใน directory นี้เป็นส่วนหนึ่งของการ build context

เมื่อรันคำสั่งนี้ Docker จะเริ่มกระบวนการสร้าง Image โดยอ่าน Dockerfile ทีละบรรทัดและ execute คำสั่งตามที่ระบุไว้ คุณจะเห็น output ใน Terminal ที่แสดงให้เห็นว่า Docker กำลังทำอะไรอยู่

ข้อควรจำ: การเลือก build context ที่เหมาะสมเป็นสิ่งสำคัญ หาก context ใหญ่เกินไป จะทำให้การ build ช้าลงโดยไม่จำเป็น ควรเลือก context ที่มีเฉพาะไฟล์ที่จำเป็นสำหรับการสร้าง Image เท่านั้น

รัน Container จาก Image ที่เราสร้าง

เมื่อการ build เสร็จสิ้น เราก็สามารถรัน Container จาก Image ที่เราสร้างได้ โดยใช้คำสั่ง:

docker run -d -p 80:80 my-nginx-image

คำอธิบาย:

  • docker run: คำสั่งสำหรับรัน Container
  • -d: รัน Container ใน detached mode (background)
  • -p 80:80: map port 80 บนเครื่อง host ไปยัง port 80 ใน Container ทำให้เราสามารถเข้าถึง Nginx ผ่าน browser โดยใช้ IP address ของเครื่อง host
  • my-nginx-image: ระบุ Image ที่จะใช้ในการสร้าง Container

เปิด browser แล้วไปยัง http://localhost (หรือ IP address ของเครื่อง host) คุณควรจะเห็นหน้าเว็บ "Hello from Docker!" ที่เราสร้างไว้ใน index.html

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการสร้าง Docker Image ของตัวเองโดยใช้ Dockerfile เราได้รู้จักคำสั่งพื้นฐานใน Dockerfile (FROM, RUN, COPY, CMD) และได้ลองสร้าง Image ที่รัน Nginx Web Server อย่างง่าย การสร้าง Docker Image เองเป็นทักษะที่สำคัญสำหรับนักพัฒนาและ DevOps เพราะมันช่วยให้เราสามารถกำหนดสภาพแวดล้อมที่ Container ของเราทำงานได้อย่างแม่นยำและสามารถทำซ้ำได้

ในบทถัดไป เราจะเรียนรู้วิธีการแชร์ Docker Image ของเราบน Docker Hub เพื่อให้คนอื่นๆ สามารถนำ Image ของเราไปใช้งานได้

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る