Simple Docker Knowledge Base

🐳 Docker Knowledge Base

1) ภาพรวม & คำสำคัญ

  • Docker: แพลตฟอร์มสำหรับ Build → Ship → Run แอปในรูปแบบ Container
  • Image: สารต้นต้นี่มีสถานะเป็น read-only สำหรับสร้าง container
  • Container: โปรเซสที่รันจาก image (มี filesystem/namespace/cgroup แยก)
  • Registry: ที่เก็บ image (Docker Hub, GHCR, Harbor, ECR, GCR)

2) Docker Lifecycle

  1. Build image: docker build -t app:1.0 .
  2. Tag/Push ขึ้น registry: docker tag app:1.0 org/app:1.0docker push org/app:1.0
  3. Pull ลงเครื่องปลายทาง: docker pull org/app:1.0
  4. Run เป็น container: docker run -d --name app -p 8080:80 org/app:1.0
  5. Operate: logs / exec / restart
  6. Cleanup: stop/rm container, prune images

3) คำสั่งพื้นฐาน (Cheat Sheet)

3.1 Images

Command Description
docker build -t <image:tag> . สร้าง image จาก Dockerfile
docker image ls ดูรายการ image
docker image inspect <image> ดู metadata, layers
docker image tag <src> <target> เปลี่ยนชื่อ/แท็ก image
docker push <image> อัปโหลด image ไป registry
docker pull <image> ดึง image จาก registry
docker image rm <image> ลบ image
docker image prune ลบ image ที่ไม่ใช้งาน

3.2 Containers

Command Description
docker run -d --name <name> <image> รัน container แบบ background
docker ps / docker ps -a ดู container ที่รันอยู่ / ทั้งหมด
docker logs -f <name> ดู log ต่อเนื่องจาก stdout/stderr
docker exec -it <name> sh เข้า shell ใน container
docker stop <name> หยุด container
docker rm <name> ลบ container
docker container prune ลบ container ที่หยุดแล้วทั้งหมด

3.3 Volumes (พื้นที่เก็บข้อมูลถาวร)

Command Description
docker volume create <vol> สร้าง volume
docker volume ls ดูรายการ volume
docker volume inspect <vol> ดูข้อมูล volume
docker volume rm <vol> ลบ volume
docker volume prune ลบ volume ที่ไม่ถูกใช้งาน

Mount ตัวอย่าง

# named volume
$ docker run -d --name db -v db_data:/var/lib/mysql mysql:8.0

# bind mount โฟลเดอร์บนโฮสต์
$ docker run -d --name web -v $(pwd)/html:/usr/share/nginx/html -p 8080:80 nginx:alpine

🌐 Docker Networking

1) Network Drivers

Docker network driver หลัก ๆ ที่ใช้กันบ่อย:

Driver Description Use Case
bridge (default) NAT ออก internet ผ่าน host ใช้บนเครื่อง local, container สื่อสารกันภายใน bridge
host ใช้ network stack ของ host ตรง ๆ performance สูง, ใช้กับ service ที่ต้องการ port จริงของ host
none ไม่มี network เลย ใช้กับ job ที่ไม่ต้องการ network
overlay เชื่อมหลาย host ผ่าน VXLAN (Docker Swarm/K8s) ใช้ใน multi-host cluster
macvlan ให้ container มี MAC/IP ของตัวเอง ใช้เมื่อ container ต้องอยู่ใน LAN จริง

2) พื้นฐาน Bridge Network

  • ค่าเริ่มต้นของ container ถ้าไม่ระบุ network คือ bridge
  • container ใน network เดียวกัน → ping หากันได้ด้วยชื่อ service
  • ออก internet ผ่าน host NAT

ตรวจสอบ Network

docker network ls                 # ดู network ที่มีอยู่
docker network inspect bridge     # ดูรายละเอียด network

3) การสร้าง Custom Bridge

สร้าง network bridge แบบ custom เพื่อกำหนด subnet เอง:

docker network create   --driver bridge   --subnet 172.18.0.0/16   mynet

เชื่อม container เข้ากับ network นี้:

docker run -d --name web --network mynet nginx:alpine
docker run -it --rm --network mynet alpine ping web

4) External Network + Docker Compose

สามารถสร้าง network ภายนอกก่อน แล้วให้ docker-compose.yml ใช้ได้เลย:

networks:
  mynet:
    external: true

สร้าง network ก่อน:

docker network create mynet

5) การจัดการ Network

Command Description
docker network create <net> สร้าง network ใหม่
docker network ls ดู network ที่มีอยู่
docker network inspect <net> ดูรายละเอียด network
docker network rm <net> ลบ network
docker network prune ลบ network ที่ไม่ได้ใช้งาน

Was this article helpful? Votes: 0
Article details:
Published date: 05/09/2025 7:32AM
Last updated: 15/09/2025 10:42AM (game - phornlert@metrabyte.cloud)
Share article: 
Author: game (phornlert@metrabyte.cloud)
Permalink: https://knuckles.mcloud.co.th/kb/simple-docker-kb
Developper | Devops | Docker |