目次

1. แนะนำเบื้องต้น

Docker คืออะไร?

Docker เป็นแพลตฟอร์มที่ใช้เทคโนโลยีการจำลองแบบคอนเทนเนอร์ เพื่อช่วยให้นักพัฒนา สามารถสร้าง แจกจ่าย และรันแอปพลิเคชันได้อย่างมีประสิทธิภาพ แตกต่างจากเครื่องเสมือน (VM) ตรงที่คอนเทนเนอร์จะแชร์เคอร์เนลของระบบปฏิบัติการโฮสต์ ทำให้เริ่มต้นได้รวดเร็วและใช้ทรัพยากรน้อยกว่า

ข้อดีของการใช้ Docker บน Ubuntu

Ubuntu เป็นหนึ่งในลินุกซ์ดิสโทรที่เหมาะสมกับ Docker เป็นอย่างมาก โดยมีจุดเด่นดังนี้

  • การรองรับอย่างเป็นทางการ: Docker รองรับ Ubuntu อย่างเป็นทางการ สามารถติดตั้งได้ง่ายผ่าน repository ของทางการ
  • ระบบจัดการแพ็กเกจที่เสถียร: สามารถใช้ตัวจัดการแพ็กเกจ APT ของ Ubuntu เพื่อจัดการเวอร์ชันของ Docker ได้ง่าย
  • ชุมชนขนาดใหญ่: Ubuntu มีผู้ใช้งานทั่วโลก ทำให้ค้นหาวิธีแก้ปัญหาและข้อมูลได้ง่ายเมื่อเจอปัญหา

สิ่งที่คุณจะได้เรียนรู้จากบทความนี้

บทความนี้จะอธิบายเนื้อหาต่อไปนี้อย่างเป็นลำดับ

  1. วิธีติดตั้ง Docker บน Ubuntu
  2. การใช้งาน Docker image เบื้องต้น
  3. สร้าง custom image ด้วย Dockerfile
  4. การตั้งค่าสภาพแวดล้อมภาษาญี่ปุ่นบน Ubuntu container
  5. เทคนิคการเพิ่มประสิทธิภาพและลดขนาด Docker image
  6. พัฒนาแอปพลิเคชันใน Ubuntu container
  7. ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

เนื้อหานี้เหมาะสำหรับทั้งมือใหม่และผู้มีประสบการณ์ สามารถนำไปประยุกต์ใช้ได้จริง

年収訴求

2. ติดตั้ง Docker บน Ubuntu

ติดตั้ง Docker ด้วย Official Repository

บน Ubuntu สามารถติดตั้ง Docker ได้อย่างง่ายดายด้วยการใช้ official repository เพียงทำตามขั้นตอนด้านล่างนี้

1. ลบแพ็กเกจ Docker เดิม (ถ้ามี)

Ubuntu มีแพ็กเกจ docker.io อยู่ใน repository โดยอาจเป็นเวอร์ชันเก่า แนะนำให้ลบออกก่อน

sudo apt remove docker docker-engine docker.io containerd runc

2. ติดตั้งแพ็กเกจที่จำเป็น

ติดตั้งแพ็กเกจที่จำเป็นสำหรับการติดตั้ง Docker

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

3. เพิ่ม Official Docker Repository

เพิ่ม GPG key และตั้งค่า repository สำหรับ Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. ติดตั้ง Docker

หลังจากเพิ่ม repository แล้ว ให้ติดตั้ง Docker

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

5. ตรวจสอบการติดตั้ง

ตรวจสอบว่า Docker ติดตั้งถูกต้องหรือไม่โดยดูเวอร์ชัน

docker --version

ตั้งค่าหลังการติดตั้ง Docker

1. สตาร์ทและตั้งค่า Docker ให้เริ่มอัตโนมัติ

เริ่มต้นบริการ Docker และตั้งค่าให้รันอัตโนมัติเมื่อเปิดเครื่อง

sudo systemctl start docker
sudo systemctl enable docker

2. ให้ผู้ใช้ที่ไม่ใช่ root ใช้งาน Docker ได้

โดยปกติ Docker จะรันได้เฉพาะ root ให้เพิ่มผู้ใช้ปกติลงในกลุ่ม docker

sudo usermod -aG docker $USER

หลังตั้งค่าแล้วให้ออกจากระบบและเข้าสู่ระบบใหม่อีกครั้งเพื่อให้มีผล

3. ตรวจสอบการทำงาน

ทดสอบรันคอนเทนเนอร์ hello-world เพื่อตรวจสอบว่าการติดตั้งสำเร็จหรือไม่

docker run hello-world

หากปรากฏข้อความ “Hello from Docker!” แสดงว่าติดตั้งสำเร็จ

3. การใช้งาน Docker Image เบื้องต้น

Docker Image คืออะไร?

Docker image คือเทมเพลตสำหรับสร้างคอนเทนเนอร์ เช่น ใช้ image ที่เป็น Ubuntu ก็จะสามารถเริ่มต้นสภาพแวดล้อม Ubuntu ได้ทันที

ดึง Ubuntu image จาก Docker Hub

Docker Hub มี image ทางการจำนวนมาก หากต้องการดึง Ubuntu image ให้ใช้คำสั่งด้านล่าง

docker pull ubuntu

การสตาร์ทและหยุดคอนเทนเนอร์

ใช้ Ubuntu image ที่ดึงมาเพื่อสตาร์ทคอนเทนเนอร์ใหม่

docker run -it ubuntu bash

คำสั่งนี้จะเปิด shell ของ Ubuntu container ให้ใช้งานได้ทันที

แสดงรายการคอนเทนเนอร์

ใช้คำสั่งนี้เพื่อแสดงคอนเทนเนอร์ที่กำลังรันอยู่

docker ps

หากต้องการดูคอนเทนเนอร์ทั้งหมด (รวมที่หยุดแล้ว) ให้เพิ่มออปชัน -a

docker ps -a

หยุดและลบคอนเทนเนอร์

หยุดคอนเทนเนอร์ที่กำลังรันด้วยคำสั่งนี้

docker stop [container ID หรือชื่อ]

หากต้องการลบคอนเทนเนอร์ที่ไม่ใช้แล้ว ให้ใช้คำสั่งนี้

docker rm [container ID หรือชื่อ]

การจัดการ Docker Image

แสดงรายการ image ที่มีในเครื่อง

docker images

หากต้องการลบ image ที่ไม่ใช้แล้ว ให้ใช้คำสั่งนี้

docker rmi [image ID]

4. สร้าง Custom Image ด้วย Dockerfile

Dockerfile คืออะไร?

Dockerfile คือไฟล์ที่ใช้กำหนดขั้นตอนการสร้าง Docker image สามารถตั้งค่าระบบหรือติดตั้งแพ็กเกจต่างๆ ได้ ทำให้สร้างสภาพแวดล้อมที่เหมือนกันสำหรับทุกเครื่อง

ไวยากรณ์พื้นฐานของ Dockerfile

Dockerfile ประกอบด้วยคำสั่งหลักๆ ดังนี้

คำสั่งคำอธิบาย
FROMระบุ image หลักที่ต้องการใช้
RUNรันคำสั่งเพื่อสร้าง image
COPYคัดลอกไฟล์เข้าไปในคอนเทนเนอร์
WORKDIRตั้งค่าดิเรกทอรีการทำงาน
CMDคำสั่งที่จะถูกรันเมื่อ container start
ENTRYPOINTกำหนด entrypoint ตอน container รัน

สร้าง Custom Image จาก Ubuntu

ทำตามขั้นตอนด้านล่างนี้เพื่อสร้าง custom Docker image ที่ใช้ Ubuntu เป็น base

1. สร้างโฟลเดอร์โปรเจกต์

สร้างไดเรกทอรีใหม่และเปลี่ยนเข้าไปในไดเรกทอรีนั้น

mkdir my-ubuntu-image
cd my-ubuntu-image

2. สร้าง Dockerfile

สร้างไฟล์ชื่อ Dockerfile ในโฟลเดอร์ แล้วเขียนเนื้อหาต่อไปนี้

# ใช้ Ubuntu image ล่าสุด
FROM ubuntu:latest

# ข้อมูลผู้ดูแล (ใส่หรือไม่ก็ได้)
LABEL maintainer="your-email@example.com"

# อัปเดตแพ็กเกจและติดตั้งเครื่องมือพื้นฐาน
RUN apt update && apt install -y curl vim git

# ตั้งค่า workdir
WORKDIR /workspace

# รัน bash เมื่อ container start
CMD ["bash"]

3. สร้าง image จาก Dockerfile

ใช้ Dockerfile ที่สร้างไว้ในการ build image ใหม่

docker build -t my-ubuntu-image .

ใช้ -t เพื่อกำหนดชื่อ image

4. ตรวจสอบ image

ดูรายชื่อ image ที่สร้างแล้ว

docker images

5. รันคอนเทนเนอร์จาก custom image

สร้าง container จาก image ที่เพิ่งสร้างขึ้น

docker run -it my-ubuntu-image

container นี้จะมีเครื่องมือ curl, vim เป็นต้นที่ติดตั้งไว้แล้ว

5. ตั้งค่าสภาพแวดล้อมภาษาญี่ปุ่นใน Ubuntu Container

โดยปกติ image ของ Ubuntu จะเป็นภาษาอังกฤษ หากต้องการใช้งานภาษาญี่ปุ่น ต้องตั้งค่าเพิ่มเติม

ตั้งค่า Japanese Locale

ติดตั้ง locale ภาษาญี่ปุ่นเพื่อใช้งานแสดงผลและป้อนข้อความภาษาญี่ปุ่นใน Ubuntu container

1. ติดตั้งแพ็กเกจที่จำเป็น

apt update
apt install -y language-pack-ja locales

2. ตั้งค่า locale

กำหนด locale และนำไปใช้งาน

locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8

3. นำค่าที่ตั้งไว้มาใช้

export LANG=ja_JP.UTF-8

ติดตั้งระบบป้อนภาษาญี่ปุ่น (Japanese Input)

หากต้องการพิมพ์ภาษาญี่ปุ่นในเทอร์มินัล ให้ติดตั้ง ibus-mozc

apt install -y ibus-mozc

หากใช้ GUI ให้ตั้งค่าตัวแปร environment เหล่านี้ด้วย

export GTK_IM_MODULE=ibus
export XMODIFIERS=@im=ibus
export QT_IM_MODULE=ibus

ใช้งาน GUI Application ใน Docker Container

การใช้งาน GUI app ใน Docker container สามารถทำได้ผ่าน X server ของโฮสต์

ติดตั้ง X server ฝั่งโฮสต์และรัน container ด้วยคำสั่งนี้

docker run -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix my-ubuntu-image

6. เทคนิคเพิ่มประสิทธิภาพและลดขนาด Docker Image

การปรับแต่งให้ Docker image มีขนาดเล็กและทำงานเร็วขึ้นจะช่วยลดเวลา boot และประหยัดพื้นที่จัดเก็บ

วิธีสร้าง image ขนาดเล็กจาก Ubuntu

ubuntu:latest มีขนาดค่อนข้างใหญ่ ถ้าต้องการขนาดเล็กให้ใช้ ubuntu:minimal

FROM ubuntu:minimal

หรือจะใช้ Alpine Linux ซึ่งขนาดเล็กมากก็ได้

FROM alpine:latest
RUN apk add --no-cache bash curl

จะช่วยลดขนาด image ได้หลายร้อย MB

ลบไฟล์ที่ไม่จำเป็นเพื่อลดขนาด image

หลังติดตั้งแพ็กเกจ สามารถลบแคชและไฟล์ชั่วคราวเพื่อให้ image เล็กลง

RUN apt update && apt install -y curl vim     && apt clean     && rm -rf /var/lib/apt/lists/*

โดย rm -rf /var/lib/apt/lists/* จะลบ list ของแพ็กเกจออก

การใช้ Multi-stage Build

ตัวอย่างเช่น ใช้คอมไพเลอร์แค่ตอน build และไม่ต้องใส่ไว้ใน image สุดท้าย

FROM ubuntu as builder
RUN apt update && apt install -y gcc

FROM ubuntu:minimal
COPY --from=builder /usr/bin/gcc /usr/bin/gcc

ช่วยลดขนาด image โดยไม่ต้องติดตั้งเครื่องมือพัฒนาไว้ใน image สุดท้าย

7. ตัวอย่างจริง: สร้างสภาพแวดล้อมพัฒนาแอปด้วย Ubuntu Container

ตัวอย่างนี้จะแนะนำวิธีตั้งค่าสภาพแวดล้อมพัฒนาด้วย Ubuntu container

ตั้งค่าสภาพแวดล้อมสำหรับ Python

สร้าง Dockerfile ดังนี้สำหรับพัฒนา Python บน Ubuntu

FROM ubuntu:latest
RUN apt update && apt install -y python3 python3-pip
CMD ["python3"]

บิลด์และรันคอนเทนเนอร์ด้วย

docker build -t python-dev .
docker run -it python-dev

สภาพแวดล้อมนี้สามารถรัน python3 และพัฒนา/ทดสอบสคริปต์ได้

ตั้งค่าสภาพแวดล้อมสำหรับ Node.js

สร้าง Dockerfile สำหรับ Node.js development environment

FROM ubuntu:latest
RUN apt update && apt install -y nodejs npm
CMD ["node"]

บิลด์และรันได้เหมือนตัวอย่างก่อนหน้า

docker build -t node-dev .
docker run -it node-dev

สามารถรัน node และพัฒนา JavaScript ได้ทันที

8. FAQ & การแก้ปัญหา

การใช้งาน Docker อาจพบปัญหาต่างๆ ได้ ต่อไปนี้เป็นคำถามที่พบบ่อยพร้อมวิธีแก้ไข

ความแตกต่างระหว่าง Docker กับ Virtual Machine

  • Docker: แชร์เคอร์เนลกับ OS หลัก ทำงานได้รวดเร็วและเบา
  • Virtual Machine (VM): มี OS แยกเป็นของตัวเอง ใช้ทรัพยากรมากและบูตช้า

Docker เหมาะสำหรับการสร้างสภาพแวดล้อมพัฒนาและการ deploy อัตโนมัติ

การจัดเก็บข้อมูลถาวรใน Ubuntu Container

เพื่อเก็บข้อมูลไว้แม้ container จะถูกลบ ให้ใช้ volume mount

docker run -v my_data:/data ubuntu

แม้จะลบ container ข้อมูลใน my_data ก็ยังอยู่

ข้อผิดพลาดที่พบบ่อยและวิธีแก้

1. ข้อผิดพลาด permission denied

ถ้าเจอ permission denied ตอนใช้งาน Docker ผู้ใช้อาจยังไม่ได้อยู่ในกลุ่ม docker

เพิ่มผู้ใช้เข้ากลุ่มด้วยคำสั่งนี้

sudo usermod -aG docker $USER

หลังจากนั้นให้ออกจากระบบและเข้าสู่ระบบใหม่อีกครั้ง

2. ข้อผิดพลาด image not found

ถ้า image ถูกลบออกจาก Docker Hub ให้ระบุ tag ที่ต้องการดึง

docker pull ubuntu:22.04

กำหนดเวอร์ชันโดยตรงเพื่อให้แน่ใจว่าดึง image ที่ถูกต้อง