Dockerfile ဖြင့် ကိုယ်ပိုင် Docker Image တည်ဆောက်ခြင်း
Dockerfile ဆိုတာ ဘာလဲ?
Section titled “Dockerfile ဆိုတာ ဘာလဲ?”Dockerfile ဆိုသည်မှာ Docker Image တည်ဆောက်ရာတွင် အဆင့်ဆင့် လုပ်ဆောင်ရမည့် ညွှန်ကြားချက်များ (Instructions) ပါဝင်သည့် ရိုးရိုး Text File ဖြစ်ပါတယ်။
1. Node.js Express App အတွက် ဥပမာ Dockerfile
Section titled “1. Node.js Express App အတွက် ဥပမာ Dockerfile”# 1. Base Image ရွေးချယ်ခြင်းFROM node:20-alpine
# 2. Container တွင်း Working Directory သတ်မှတ်ခြင်းWORKDIR /app
# 3. Dependency File များကို အရင် ကူးယူခြင်း (Layer Caching အတွက်)COPY package*.json ./
# 4. Dependencies များ Install လုပ်ခြင်းRUN npm install
# 5. ကျန်ရှိသော Source Code များကို ကူးယူခြင်းCOPY . .
# 6. Container ၏ Port ကို သတ်မှတ်ခြင်းEXPOSE 3000
# 7. Container စတင်ချိန်တွင် Run မည့် CommandCMD ["node", "server.js"]2. Dockerfile Instructions များ၏ တာဝန်
Section titled “2. Dockerfile Instructions များ၏ တာဝန်”FROM: Image ၏ အခြေခံ (Base Image) ကို သတ်မှတ်ခြင်း (ဥပမာ -node:20-alpine,python:3.11-slim)။WORKDIR: Container အတွင်း အလုပ်လုပ်မည့် Folder လမ်းကြောင်း သတ်မှတ်ခြင်း။COPY: Host စက်ထဲမှ ဖိုင်များကို Container အတွင်းသို့ ကူးယူခြင်း။RUN: Image တည်ဆောက်စဉ် (Build Time) တွင် Command များ run ခြင်း (ဥပမာ -npm install)။CMD: Container တကယ် စတင် run ချိန် (Runtime) တွင် Executable Command ကို ရန်းခြင်း။
3. Docker Build Command
Section titled “3. Docker Build Command”Dockerfile မှတစ်ဆင့် Image တည်ဆောက်ရန်:
# Docker Image ကို Build လုပ်ပြီး tag (နာမည်) ပေးခြင်းdocker build -t my-node-app:1.0 .
# တည်ဆောက်ပြီးသော Image ကို Run ခြင်းdocker run -d -p 3000:3000 --name my-app-instance my-node-app:1.04. Multi-Stage Builds ( Image Size သေးငယ်အောင် ပြုလုပ်ခြင်း)
Section titled “4. Multi-Stage Builds ( Image Size သေးငယ်အောင် ပြုလုပ်ခြင်း)”Next.js သို့မဟုတ် Go App များကို Build လုပ်ရာတွင် Image Size သေးငယ်ပြီး လုံခြုံစေရန် Stage မတူဘဲ ခွဲခြား တည်ဆောက်နည်း:
# Stage 1: Build StageFROM node:20-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .RUN npm run build
# Stage 2: Production Stage (ပေါ့ပါးသော Output ဖြင့်သာ Run မည်)FROM node:20-alpine AS runnerWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/package*.json ./RUN npm install --only=production
CMD ["node", "dist/index.js"]