Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

Build Docker Image จาก Dockerfile

บทความนี้อธิบายวิธีการสร้าง Docker Image จาก Dockerfile โดยใช้คำสั่ง `docker build` พร้อมทั้งแนะนำวิธีการตั้งชื่อ Image ด้วย tag และการนำ Image ขึ้น Docker Hub...

Build Docker Image จาก Dockerfile

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

คำสั่ง docker build คืออะไร?

คำสั่ง docker build เป็นคำสั่งหลักที่เราใช้ในการสร้าง Docker Image จาก Dockerfile ครับ มันจะอ่านคำสั่งต่างๆ ที่อยู่ใน Dockerfile แล้ว execute ทีละบรรทัด เพื่อสร้างเป็น Layer ของ Image ขึ้นมา

รูปแบบคำสั่งพื้นฐานคือ:

docker build [OPTIONS] PATH | URL | -

โดยที่:

  • OPTIONS: เป็นตัวเลือกต่างๆ ที่เราสามารถใส่เพิ่มได้ เช่น ชื่อ Image, Tag, หรือไฟล์ Dockerfile ที่ต้องการใช้
  • PATH: คือ Path ไปยัง directory ที่มี Dockerfile อยู่ ถ้าไม่ได้ระบุไฟล์ Dockerfile ด้วย option -f Docker จะหาไฟล์ชื่อ Dockerfile ใน directory นี้โดยอัตโนมัติ
  • URL: คือ URL ไปยัง Git Repository ที่มี Dockerfile อยู่ (ไม่ค่อยได้ใช้ในกรณีทั่วไป)
  • -: อ่าน Dockerfile จาก standard input (ไม่ค่อยได้ใช้ในกรณีทั่วไป)

ตัวอย่าง: การ Build Docker Image อย่างง่าย

สมมติว่าเรามี Dockerfile ชื่อ Dockerfile อยู่ใน directory ชื่อ my-php-app (ซึ่งสร้างไว้ตั้งแต่บทที่แล้ว) เราสามารถ Build Image ได้ด้วยคำสั่งนี้:

docker build my-php-app

เมื่อรันคำสั่งนี้ Docker จะเริ่มอ่าน Dockerfile ทีละบรรทัด และแสดงผลลัพธ์ออกมา เราจะเห็น process การ Build ที่ Docker ทำ เช่น การ download base image, การ execute คำสั่งต่างๆ, และการสร้าง Layer ใหม่

ข้อสังเกต: Docker จะใช้ current directory เป็น build context โดยอัตโนมัติ นั่นหมายความว่าไฟล์ทุกไฟล์ใน directory นั้นจะถูกส่งไปยัง Docker Daemon เพื่อใช้ในการ Build ดังนั้นควรระวังอย่าให้มีไฟล์ที่ไม่จำเป็นอยู่ใน directory นั้น เพราะจะทำให้การ Build ช้าลง

Tagging Image: การตั้งชื่อ Image

หลังจาก Build Image เสร็จแล้ว เราควรตั้งชื่อ (tag) ให้กับ Image เพื่อให้ง่ายต่อการใช้งานและการจัดการ เราสามารถทำได้โดยใช้ option -t ในคำสั่ง docker build

รูปแบบการตั้งชื่อ (tagging) คือ:

docker build -t image-name:tag my-php-app

โดยที่:

  • image-name: คือชื่อ Image ที่เราต้องการตั้ง เช่น my-php-app
  • tag: คือ tag ที่ใช้ระบุ version หรือ label ของ Image เช่น latest, 1.0, dev

ตัวอย่าง:

docker build -t my-php-app:latest my-php-app

คำสั่งนี้จะ Build Image จาก Dockerfile ใน directory my-php-app และตั้งชื่อ Image ว่า my-php-app พร้อม tag latest

ข้อควรจำ: ควรตั้งชื่อ Image ให้สื่อความหมายและสอดคล้องกับ application ของเรา และควรใช้ tag เพื่อระบุ version หรือ environment ของ Image อย่างชัดเจน

Docker Hub: ที่เก็บ Image สาธารณะ

Docker Hub เป็น registry สาธารณะ (public registry) ที่เราสามารถ upload และ download Docker Image ได้ฟรี เปรียบเสมือน GitHub สำหรับ Docker Image นั่นเอง

การใช้งาน Docker Hub มีประโยชน์หลายอย่าง เช่น:

  • Shared Resources: สามารถใช้ Image ที่คนอื่นสร้างไว้แล้วได้
  • Collaboration: สามารถแชร์ Image ของเราให้คนอื่นใช้ได้
  • Centralized Storage: เป็นที่เก็บ Image ที่ปลอดภัยและเข้าถึงได้จากทุกที่

ข้อควรระวัง: Image ที่ upload ขึ้น Docker Hub จะเป็น public โดย default ดังนั้นควรตรวจสอบให้แน่ใจว่าไม่มีข้อมูล sensitive อยู่ใน Image ก่อนที่จะ upload ขึ้นไป

การ Push Image ขึ้น Docker Hub

ก่อนที่จะ push Image ขึ้น Docker Hub ได้ เราต้อง:

  1. สร้าง Account: สร้าง account บน Docker Hub ก่อน
  2. Login: Login เข้า Docker Hub ผ่าน command line โดยใช้คำสั่ง docker login
  3. Tag Image: Tag Image ของเราให้มี format เป็น username/image-name:tag โดยที่ username คือ username ของ Docker Hub
  4. Push: Push Image ขึ้น Docker Hub โดยใช้คำสั่ง docker push username/image-name:tag

ตัวอย่าง:

# Login เข้า Docker Hub
docker login

# Tag Image (สมมติว่า username คือ myusername และ image name คือ my-php-app)
docker tag my-php-app:latest myusername/my-php-app:latest

# Push Image ขึ้น Docker Hub
docker push myusername/my-php-app:latest

หลังจาก push สำเร็จ เราจะเห็น Image ของเราบน Docker Hub และคนอื่นๆ ก็สามารถ download Image ของเราไปใช้ได้

กรณีใช้งานจริงและข้อผิดพลาดที่พบบ่อย

กรณีใช้งานจริง: สมมติว่าเราต้องการสร้าง Image สำหรับ application PHP ที่ใช้ Composer ในการจัดการ dependencies เราสามารถใช้ Dockerfile ประมาณนี้:

FROM php:7.4-apache

WORKDIR /var/www/html

COPY . /var/www/html

RUN apt-get update && apt-get install -y \
    zip \
    unzip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN composer install --no-dev --optimize-autoloader

EXPOSE 80

จากนั้น Build Image โดยใช้คำสั่ง:

docker build -t my-php-app:latest .

ข้อผิดพลาดที่พบบ่อย:

  • Permission denied: หากพบข้อผิดพลาดเกี่ยวกับ permission ในระหว่างการ Build ให้ลองเพิ่ม USER root ที่ Dockerfile เพื่อให้ command ต่างๆ ถูก execute ด้วย root user
  • Cache invalidation: Docker จะใช้ cache ในการ Build เพื่อให้รวดเร็วขึ้น หากมีการแก้ไขไฟล์ที่ใช้ใน Dockerfile Docker อาจจะไม่ re-build layer นั้น ให้ลองใช้ option --no-cache ในคำสั่ง docker build เพื่อ force re-build
  • Context path incorrect: ตรวจสอบให้แน่ใจว่า path ที่ระบุในคำสั่ง docker build ถูกต้อง และมี Dockerfile อยู่ใน directory นั้น
  • Image size too large: พยายามลดขนาด Image โดยการใช้ multi-stage build หรือ clean up ไฟล์ที่ไม่จำเป็นหลังจากการ Build

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการ Build Docker Image จาก Dockerfile, การตั้งชื่อ Image, และการ Push Image ขึ้น Docker Hub หวังว่าคุณจะสามารถนำความรู้เหล่านี้ไปประยุกต์ใช้ในการพัฒนา application PHP ของคุณได้นะครับ ในบทต่อไป เราจะมาเรียนรู้วิธีการ Run Docker Container จาก Image ที่เราสร้างขึ้นครับ

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service