Docker คือเครื่องมือ package แอปพร้อม environment ให้อยู่ในรูป Container ทำให้รันได้สม่ำเสมอบนเครื่องนักพัฒนา server หรือ CI/CD
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart LR
subgraph Era1["ยุค Works on My Machine"]
A["ติดตั้ง dependency เอง
environment ไม่ตรงกัน"]
end
subgraph Era2["ยุค Container"]
B["Image
blueprint"]
C["Container
instance ที่รันจริง"]
end
subgraph Era3["ยุค Compose / Multi-service"]
D["docker-compose
frontend backend db"]
E["Volume + Network
เชื่อมบริการ"]
end
A --> B --> C --> D --> E
docker build -t my-app . ใช้ build imagedocker run -p 80:80 my-app ใช้ run container| คำ | ความหมาย | ตัวอย่าง |
|---|---|---|
| Image | แบบสำหรับรัน | my-app:latest |
| Container | process ที่รันจาก image | docker run |
| Dockerfile | recipe สร้าง image | multi-stage build |
| Compose | รันหลาย service | frontend + api + db |
| Volume | แชร์ไฟล์/ข้อมูล | database data |
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart TD
A["Source Code
โค้ดโปรเจกต์"] --> B["Dockerfile
ขั้นตอน build"]
B --> C["docker build
สร้าง image"]
C --> D["Image
blueprint"]
D --> E["docker run
รัน container"]
E --> F["Container
แอปทำงาน"]
# Dockerfile
# Build Angular แล้วเสิร์ฟด้วย Nginx
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build -- --configuration production
FROM nginx:alpine
COPY --from=build /app/dist/my-app/browser /usr/share/nginx/html
EXPOSE 80
# ตัวอย่างการใช้งาน:
# docker build -t my-app .
# docker run -p 80:80 my-app
# docker-compose.yml
# รัน frontend, backend และ database พร้อมกัน
services:
frontend:
build: ./frontend
ports:
- "8080:80"
backend:
build: ./backend
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://postgres:postgres@db:5432/app
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: app
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
# .dockerignore
node_modules
dist
.git
.env
.dockerignore