วิธีใช้ Docker บน Ubuntu: คู่มือครบถ้วนสำหรับการติดตั้ง, ภาพ Docker, Dockerfile, และการปรับประสิทธิภาพ

.

目次

1. บทนำ

Docker คืออะไร?

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

ประโยชน์ของการใช้ Docker บน Ubuntu

Ubuntu เป็นหนึ่งในดิสทริบิวชันของ Linux ที่เข้ากันได้ดีกับ Docker เหตุผลสำคัญได้แก่:

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

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

คู่มือนี้อธิบายหัวข้อต่อไปนี้ทีละขั้นตอน:

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

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

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

การติดตั้ง Docker ด้วยรีโพซิทอรีอย่างเป็นทางการ

บน Ubuntu คุณสามารถติดตั้ง Docker ได้อย่างง่ายดายโดยใช้รีโพซิทอรีอย่างเป็นทางการ ทำตามขั้นตอนด้านล่างเพื่อเตรียมสภาพแวดล้อมของคุณ

1. ลบแพ็กเกจ Docker ที่มีอยู่แล้ว

Ubuntu อาจมีแพ็กเกจชื่อ docker.io ซึ่งอาจเป็นเวอร์ชันเก่า ให้ลบออกก่อนติดตั้ง Docker เวอร์ชันล่าสุด

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

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

ติดตั้งแพ็กเกจที่เป็น dependencies ก่อนทำการติดตั้ง

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

3. เพิ่มรีโพซิทอรี Docker อย่างเป็นทางการ

เพิ่มคีย์ GPG ของ 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

หลังจากเพิ่มรีโพซิทอรีแล้ว ให้ติดตั้ง Docker

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

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

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

docker --version

การตั้งค่าเริ่มต้นหลังการติดตั้ง

1. เริ่มและเปิดใช้งานบริการ Docker

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

sudo systemctl start docker
sudo systemctl enable docker

2. อนุญาตให้ผู้ใช้ที่ไม่ใช่ root รัน Docker

โดยค่าเริ่มต้นเฉพาะ root เท่านั้นที่สามารถรัน Docker ได้ ให้ผู้ใช้ทั่วไปสามารถเรียกใช้คำสั่ง Docker ได้

sudo usermod -aG docker $USER

ออกจากระบบและเข้าสู่ระบบใหม่เพื่อให้การเปลี่ยนแปลงมีผล

3. ทดสอบการทำงานของ Docker

รันคอนเทนเนอร์ hello-world ด้วยบัญชีผู้ใช้ทั่วไป

docker run hello-world

หากผลลัพธ์แสดงข้อความ “Hello from Docker!” การติดตั้งสำเร็จแล้ว

3. การดำเนินการพื้นฐานของอิมเมจ Docker

Docker Image คืออะไร?

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

ดึงอิมเมจ Ubuntu จาก Docker Hub

Docker Hub มีอิมเมจ Docker อย่างเป็นทางการจำนวนมาก เพื่อดาวน์โหลดอิมเมจ Ubuntu ให้รันคำสั่งต่อไปนี้:

docker pull ubuntu

เริ่มและหยุดคอนเทนเนอร์

ใช้ Ubuntu Image ที่ดาวน์โหลดมาเพื่อเริ่มคอนเทนเนอร์:

docker run -it ubuntu bash

This opens a shell inside the Ubuntu container, allowing you to operate within it.

รายการคอนเทนเนอร์

Display running containers:

docker ps

Display all containers, including stopped ones:

docker ps -a

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

Stop a running container:

docker stop [container ID or name]

Remove an unnecessary container:

docker rm [container ID or name]

การจัดการภาพ Docker

List downloaded Docker images:

docker images

Remove an image:

docker rmi [image ID]

4. การสร้างภาพแบบกำหนดเองด้วย Dockerfile

Dockerfile คืออะไร?

Dockerfile คือไฟล์กำหนดค่าที่ใช้ในการสร้างภาพ Docker โดยอิงจากคำสั่งที่เขียนใน Dockerfile คุณสามารถสร้างภาพ Docker ที่กำหนดเองได้ ซึ่งช่วยให้คุณรวมสภาพแวดล้อมการพัฒนา หรือสร้างภาพที่รวมแพคเกจที่ต้องการ

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

Dockerfile โดยทั่วไปจะรวมคำสั่งต่อไปนี้:

CommandDescription
FROMSpecifies the base image
RUNExecutes commands to build the image
COPYCopies files into the container
WORKDIRSets the working directory
CMDDefault command executed when the container starts
ENTRYPOINTDefines the entry point of the container

การสร้างภาพ Ubuntu แบบกำหนดเอง

ทำตามขั้นตอนด้านล่างเพื่อสร้างภาพ Docker ที่อิง Ubuntu แบบกำหนดเอง.

1. สร้างไดเรกทอรีทำงาน

First, create a new project directory and move into it.

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

2. สร้าง Dockerfile

Create a Dockerfile inside the directory and write the following content:

# Base Ubuntu official image
FROM ubuntu:latest

# Maintainer information (optional)
LABEL maintainer="your-email@example.com"

# Update package list and install basic tools
RUN apt update && apt install -y curl vim git

# Set working directory
WORKDIR /workspace

# Default command when the container starts
CMD ["bash"]

3. สร้างภาพ Docker

Build a custom image from your Dockerfile:

docker build -t my-ubuntu-image .

The -t option assigns a name to the image.

4. ตรวจสอบภาพ

Check your newly built image:

docker images

5. เรียกใช้คอนเทนเนอร์

Start a container from the custom image:

docker run -it my-ubuntu-image

This image includes tools such as curl and vim.

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

The default Ubuntu image uses an English environment. To use Japanese, additional configuration is required.

การตั้งค่า Locale ภาษาญี่ปุ่น

To enable Japanese display and input in an Ubuntu container, install the Japanese locale.

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

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

2. กำหนดค่า Locale

Generate and apply the locale:

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

3. ใช้การตั้งค่า

export LANG=ja_JP.UTF-8

การตั้งค่าการป้อนภาษาญี่ปุ่น

To input Japanese characters in the terminal, install ibus-mozc:

apt install -y ibus-mozc

If using GUI applications, add the following environment variables:

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

การใช้แอปพลิเคชัน GUI

To run GUI applications inside a Docker container, use an X server on the host machine.

Run the container with X11 enabled:

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

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

Docker images can be optimized to improve container startup speed and reduce storage usage. Here are several techniques for creating lightweight images.

วิธีสร้างภาพ Ubuntu แบบน้ำหนักเบา

The default ubuntu:latest image is relatively large. Using a more lightweight option like ubuntu:minimal helps reduce container size.

FROM ubuntu:minimal

Another option is to use Alpine Linux, which is significantly smaller than Ubuntu.

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

Using Alpine can reduce image size by several hundred megabytes.

การลดขนาดภาพโดยการลบไฟล์ที่ไม่จำเป็น

คุณสามารถลดขนาดอิมเมจได้โดยการลบไฟล์แคชที่ไม่จำเป็นที่สร้างโดย apt-get.

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

โดยเฉพาะคำสั่ง rm -rf /var/lib/apt/lists/* จะลบรายการแพคเกจและข้อมูลที่ไม่ได้ใช้ออก

การใช้ Multi-Stage Builds

Multi-stage builds ช่วยให้คุณใช้เครื่องมือได้เฉพาะระหว่างกระบวนการสร้างเท่านั้น ในขณะที่ทำให้อิมเมจสุดท้ายมีขนาดเบา

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

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

ด้วยวิธีนี้ คุณจะหลีกเลี่ยงการรวมเครื่องมือพัฒนาในอิมเมจสุดท้าย ทำให้มีขนาดรอยเท้าน้อยลงอย่างมาก

7. ตัวอย่างเชิงปฏิบัติ: การพัฒนาแอปพลิเคชันในคอนเทนเนอร์ Ubuntu

ส่วนนี้จะแนะนำวิธีตั้งค่าสภาพแวดล้อมการพัฒนาในคอนเทนเนอร์ Ubuntu

การตั้งค่าสภาพแวดล้อมการพัฒนา 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

เพื่อตั้งค่าสภาพแวดล้อมการพัฒนา Node.js ให้ใช้ Dockerfile ด้านล่างนี้:

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

สร้างและรันคอนเทนเนอร์:

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

สภาพแวดล้อมนี้ทำให้สามารถรัน JavaScript และพัฒนาแอปพลิเคชันด้วยคำสั่ง node ได้

8. คำถามที่พบบ่อย & การแก้ไขปัญหา

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

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

  • Docker : ใช้เคอร์เนลของระบบปฏิบัติการโฮสต์ร่วมกัน ทำให้มีน้ำหนักเบาและเริ่มคอนเทนเนอร์ได้เร็ว
  • Virtual Machines (VMs) : แต่ละ VM มีระบบปฏิบัติการของตนเอง ทำให้ใช้ทรัพยากรมากกว่าและเริ่มต้นช้ากว่า

Docker มีความโดดเด่นในการเพิ่มประสิทธิภาพการใช้ทรัพยากรและเหมาะกับสภาพแวดล้อมการพัฒนาและการปรับใช้อัตโนมัติ

การคงข้อมูลในคอนเทนเนอร์ Ubuntu

เพื่อคงข้อมูลแม้หลังจากคอนเทนเนอร์หยุดทำงาน ให้ใช้ volume mounts:

docker run -v my_data:/data ubuntu

แม้ว่าคอนเทนเนอร์จะถูกลบ ข้อมูลที่เก็บไว้ในโวลุ่ม my_data ก็ยังสามารถนำกลับมาใช้ใหม่ได้

ข้อผิดพลาดทั่วไปและวิธีแก้ไข

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

หากคุณพบข้อความ permission denied ขณะพยายามรัน Docker ผู้ใช้ของคุณอาจไม่ได้เป็นสมาชิกของกลุ่ม docker

เพิ่มผู้ใช้เข้าสู่กลุ่ม Docker:

sudo usermod -aG docker $USER

ออกจากระบบและเข้าสู่ระบบใหม่เพื่อให้การเปลี่ยนแปลงมีผล

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

หากอิมเมจถูกลบจาก Docker Hub ให้ระบุแท็กใหม่เมื่อทำการดึง:

docker pull ubuntu:22.04

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