
เนื่องจาก Docker เป็นเครื่องมือที่ช่วยแก้ปัญหาการจัดการสภาพแวดล้อมการพัฒนาโปรเจกต์ที่ต้องการใช้ซอฟต์แวร์หรือเวอร์ชันที่แตกต่างกัน โดยเฉพาะเมื่อมีข้อจำกัดในการใช้งานซอฟต์แวร์หลายเวอร์ชันในเครื่องเดียว ตัวอย่างเช่น:
- ปัญหา: หากคุณมี 2 โปรเจกต์ที่ต้องใช้ Java เวอร์ชันต่างกัน (โปรเจกต์แรกใช้ Java 17 และโปรเจกต์ที่สองใช้ Java 10) การติดตั้งทั้งสองเวอร์ชันในเครื่องเดียวอาจทำให้เกิดความขัดแย้ง
- Solution เก่า: ใช้ Virtual Machine (VM) เพื่อจำลองคอมพิวเตอร์อีกตัวหนึ่งและติดตั้ง Java เวอร์ชันที่ต้องการในแต่ละ VM
ข้อเสียของ VM
- กินพื้นที่และทรัพยากรสูง
- VM ต้องติดตั้งระบบปฏิบัติการ (Guest OS) เพิ่มเติม ซึ่งทำงานควบคู่กับ Host OS (ระบบปฏิบัติการหลักของเครื่องเรา) ทำให้ใช้พื้นที่และทรัพยากรสูง เช่น RAM, CPU, และ Storage
- เสียเวลาในการตั้งค่า
- การติดตั้ง Guest OS ใน VM ต้องใช้เวลา รวมถึงการตั้งค่าต่างๆ เช่น การติดตั้งซอฟต์แวร์และไลบรารีใหม่ทุกครั้ง
ข้อดีของ Docker เมื่อเทียบกับ VM
Docker แก้ปัญหาดังกล่าวได้อย่างมีประสิทธิภาพด้วยการใช้
Containerization
ซึ่งมีคุณสมบัติดังนี้:
- ไม่ต้องติดตั้ง Guest OS
- Docker ใช้ Kernel ของ Host OS ร่วมกัน ทำให้ไม่ต้องจำลองระบบปฏิบัติการใหม่เหมือน VM จึงประหยัดพื้นที่และทรัพยากรมากกว่า
- เบาและเร็วกว่า
- Container ของ Docker มีขนาดเล็กและเปิดใช้งานได้รวดเร็ว เพราะไม่ต้องบูตระบบปฏิบัติการใหม่
- จัดการหลายเวอร์ชันได้ง่าย
- คุณสามารถสร้าง Container แยกสำหรับแต่ละโปรเจกต์ โดยใส่ Java เวอร์ชันที่ต้องการในแต่ละ Container ได้อย่างอิสระ โดยไม่กระทบกัน
- พกพาและใช้งานข้ามแพลตฟอร์ม
- Container สามารถนำไปใช้งานบนเครื่องอื่นๆ ได้ทันที โดยไม่ต้องปรับแต่งเพิ่มเติม
Compare Docker and VM

Installation
วิธีการติดตั้ง Docker บน Windows และ MacBook
การติดตั้ง Docker บน Windows
- ตรวจสอบความต้องการของระบบ
- Windows 10 หรือ Windows 11 (64-bit)
- เปิดใช้งาน WSL 2 (Windows Subsystem for Linux) หรือ Hyper-V
- RAM อย่างน้อย 4 GB
- ดาวน์โหลด Docker Desktop
- ไปที่เว็บไซต์ Docker docker.com
- ดาวน์โหลดไฟล์
Docker Desktop Installer.exe
- ติดตั้ง Docker Desktop
- เปิดไฟล์
Docker Desktop Installer.exe
- ในหน้าการตั้งค่า ให้เลือก Use WSL 2 instead of Hyper-V (ถ้าระบบรองรับ)
- ทำตามขั้นตอนในตัวช่วยติดตั้งจนเสร็จสิ้น
- เปิดไฟล์
- ตรวจสอบการติดตั้ง
- เป็น Command Prompt หรือ Power Shell
docker --version
การติดตั้ง Docker บน MacOS
- ตรวจสอบความต้องการของระบบ
- macOS เวอร์ชันล่าสุดหรือสองเวอร์ชันก่อนหน้า (Intel หรือ Apple Silicon เช่น M1, M2, M3)
- RAM อย่างน้อย 4 GB
- ดาวน์โหลด Docker Desktop
- ไปที่เว็บไซต์ Docker docker.com
- ดาวน์โหลดไฟล์
.dmg
ที่เหมาะกับสถาปัตยกรรมของ Mac (Intel หรือ Apple Silicon)
- ติดตั้ง Docker Desktop
- เปิดไฟล์
.dmg
แล้วลากไอคอน Docker ไปที่โฟลเดอร์ Applications - เปิดแอปพลิเคชัน Docker จากโฟลเดอร์ Applications
- เปิดไฟล์
- ตั้งค่าและยอมรับข้อตกลงการใช้งาน
- เมื่อเปิดครั้งแรก ระบบจะขอรหัสผ่าน macOS เพื่อปรับแต่งการตั้งค่าเครือข่ายและสิทธิ์พิเศษ
- ยอมรับข้อตกลงการใช้งาน
- ตรวจสอบการติดตั้ง
- เปิด Terminal แล้วพิมพ์:
docker --version
Overview Docker Flow

Make Container
การสร้าง App container ใน docker

การสร้างและใช้งานแอปพลิเคชันใน Docker มีขั้นตอนที่สำคัญดังนี้:
1. การเขียน Dockerfile
- Dockerfile คือไฟล์ที่ใช้กำหนดค่าหรือ setting สำหรับการสร้าง Docker Image ซึ่งระบุว่า Container ที่เราต้องการใช้งานจะมีอะไรบ้าง เช่น:
- ระบบปฏิบัติการพื้นฐาน (Base Image)
- ซอฟต์แวร์หรือไลบรารีที่ต้องติดตั้ง
- การตั้งค่าต่างๆ เช่น Port, Environment Variables
- ตัวอย่าง Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
2. การ Build Docker Image
หลังจากเขียน Dockerfile เสร็จแล้ว ให้ใช้คำสั่งเพื่อสร้าง Image:
docker build -t my-app .
3. การเริ่มใช้งาน Docker Image เพื่อใช้งาน container
- หลังจากได้ Image เเล้วเราจะสร้าง container เพื่อ ใช้งาน
docker run -d --name my-container -p 5000:5000 my-app
Basic command
docker run -it ubuntu /bin/bash
- it = iteractive terminal
/bin/bash บอกให้ run เสร็จแล้ว ให้ terminal access เข้าไปใน docker container ผ่าน shell
docker run -it -d --rm --name linux1 ubuntu /bin/bash
- -rm คือเมื่อ ปิด container แล้ว จะลบ container ออกจาก docker ให้เอง
- -name คือการตั้งชื่อให้กับ container
docker run --rm -v ${PWD}:/myvol ubuntu /bin/bash -c "ls -lha > /myvol/myfile.txt"
- v : volume mounting from host to container (เป็นการเชื่อมต่อ ข้อมูล จาก host ไปยัง container)
- c : comman เป็นการส่ง command เข้าไป ใน container
docker run --rm -v ${PWD}:/myvol -w /my vol ubuntu /bin/bash
-w : working directory คือ การเปลี่ยน directory ที่เราจะทำงานใน container
docker run -p 8080:80 -d nginx
-p: port mapping คือการเชื่อมต่อ port ของ host ไปยัง port ของ container
docker system prune
เป็นการลบ container ที่ไม่ได้ใช้งานออกจาก docker
docker ps
เป็นการ list container เฉพาะที่ใช้งานได้ และกำลัง run อยู่ทั้งหมดออกมา
docker ps -a
เป็นการ list container ทั้งหมด รวมทั้งที่ใช้ไม่ได้และใช้ได้ ออกมา
เมื่อเราสร้าง container ขึ้นมาแล้ว เวลาเราจะใช้งาน จะมี process ดังนี้

docker start <container-id> or <container-name>
เป็นการ start container ที่เราต้องการ โดยระบุเป็น id หรือ ชื่อของ container
docker stop <container-id> or <container-name>
เป็นการ stop container ที่เราต้องการ โดยระบุเป็น id หรือ ชื่อของ container
docker attach <container-id> or <container-name>
เป็นการ attach เข้าไปใน container ที่เราต้องการ โดยระบุเป็น id หรือ ชื่อของ container
docker restart <container-id> or <container-name>
เป็นการ restart container ที่เราต้องการ โดยระบุเป็น id หรือ ชื่อของ container
docker log <container-id> or <container-name>
เป็นการ log สิ่งที่เกิดขึ้นใน container ที่เราต้องการ โดยระบุเป็น id หรือ ชื่อของ container
Write Docker File
Dockerfile คือไฟล์ข้อความที่ใช้กำหนดขั้นตอนการสร้าง Docker Image โดยระบุสิ่งที่ต้องการให้ Docker ติดตั้งและตั้งค่าใน Container ซึ่งเป็นขั้นตอนสำคัญสำหรับการพัฒนาและรันแอปพลิเคชันใน Docker
องค์ประกอบสำคัญของ Dockerfile
- Base Image (FROM)
- ระบุ Base Image ที่ต้องการใช้ เช่น ระบบปฏิบัติการหรือซอฟต์แวร์พื้นฐาน
- ตัวอย่าง:
FROM python:3.9-slim
- คำสั่ง RUN
- ใช้รันคำสั่งต่างๆ ในระหว่างการสร้าง Image เช่น การติดตั้งไลบรารีหรือแพ็กเกจ
- ตัวอย่าง:
RUN pip install django
- การคัดลอกไฟล์ (COPY/ADD)
- คำสั่ง COPY ใช้คัดลอกไฟล์จากเครื่องเราไปยัง Container
- ตัวอย่าง:
COPY . /app
- Working Directory (WORKDIR)
- กำหนดโฟลเดอร์ทำงานใน Container
- ตัวอย่าง:
WORKDIR /app
- Environment Variables (ENV)
- ใช้กำหนดตัวแปรที่ส่งค่าเข้าไปใน Container เพื่อใช้ในการตั้งค่าหรือรันแอปพลิเคชัน
- ตัวอย่าง:
ENV APP_ENV=production
- Port (EXPOSE)
- ระบุ Port ที่ Container จะใช้เพื่อสื่อสารกับ Host หรือ Container อื่นๆ
- ตัวอย่าง:
EXPOSE 8080
- Start Command (CMD/ENTRYPOINT)
- CMD ใช้กำหนดคำสั่งเริ่มต้นเมื่อ Container ถูกสร้างขึ้น เช่น รันเซิร์ฟเวอร์หรือแอปพลิเคชัน
- ENTRYPOINT คล้าย CMD แต่มีความสำคัญสูงกว่า สามารถใช้ร่วมกับ CMD ได้เพื่อกำหนดค่าเริ่มต้นและพารามิเตอร์เพิ่มเติม
Example Dockerfile
FROM php:8.1.5-cli
EXPOSE 8000
RUN mkdir /myproject
COPY index.php /myproject
WORKDIR /myproject
CMD php index.php
FROM : คือการบอกว่า จะใช้ image อะไรในการ build
EXPOSE : คือการบอกว่า จะใช้ port อะไรในการ run
RUN : คือการรันคำสั่งใน container
COPY: คือการ copy file จาก host ไปยัง container
WORKDIR: คือการเปลี่ยน directory ที่เราจะทำงานใน container
CMD: คือการรันคำสั่งใน container ตอนที่เรา run container
การสร้าง image จาก dockerfile
docker build -t myapp .
- t : คือการตั้งชื่อ image ที่เราจะสร้าง
. : คือ path ของ dockerfile
docker images
เป็นการ list image ทั้งหมดที่เรามีอยู่

เมื่อเราสร้าง images เสร็จเราสามารถนำไปเก็บไว้ใน docker hub ได้
docker push <image-name>
การ push image ไป เราต้อง push ตัว image ที่ เป็น ชื่อ repo เราไป docker push (my repo / nameimage)
เมื่อเพื่อนต้องการนำมาใช้งาน เพื่อนสามารถ pull มาใช้ได้
docker pull <image-name>
Docker Compose
เป็น tool ที่ใช้ในการ จัดการ และ สร้าง container หลายๆ ตัว ในเวลาเดียวกัน โดย จะใช้ file ชื่อ docker-compose.yml ในการ กำหนด ว่าจะใช้ container อะไรบ้าง และ จะใช้ อะไรบ้าง ในการ สร้าง container นั้นๆ

Leave a Reply