สรุปการสร้าง Dockerfile - taritinth/sw-dev-tools-and-environments-project GitHub Wiki
สรุปการสร้าง Dockerfile
Frontend
- กำหนด Base Image ที่จะใช้ภายใน Container โดยระบุเพิ่มเติมเป็น Builder Stage เพื่อให้นำ Source Code ใน Stage นี้ไปใช้ซ้ำภายใน Stage อื่น ๆ ได้
FROM node:16.13.2-alpine as builder
- กำหนด Working Directory เพื่อใช้เป็น Default Location ที่จะใช้คำสั่งต่าง ๆ ภายใน Dockerfile
WORKDIR /app
- คัดลอกไฟล์
package.json
และ package-lock.json
เข้าไปยัง Working Directory ที่กำหนดไว้
COPY package*.json ./
- หลังจากคัดลอกไฟล์
package.json
และ package-lock.json
เข้าไปยัง Working Directory แล้ว จะทำการรันคำสั่ง npm install --production เพื่อติดตั้ง Dependencies สำหรับ Production เท่านั้น (ไม่ติดตั้ง Dev Dependencies)
RUN npm install --production
- หลังจากทำการติดตั้ง Dependencies ต่าง ๆ เรียบร้อยแล้ว จะทำการคัดลอก Source code ทั้งหมดเข้าไปยัง Container Image
COPY . .
- Build โปรเจคเพื่อนำไฟล์ที่ได้ไป Deploy สำหรับ Production
RUN npm run build
- กำหนด Base Image ที่จะใช้ภายใน Container
FROM node:16.13.2-alpine
- กำหนด Working Directory เพื่อใช้เป็น Default Location ที่จะใช้คำสั่งต่าง ๆ ภายใน Dockerfile
WORKDIR /app
- ทำการคัดลอก Source code จาก Builder Stage เข้าไปยัง Container Image
COPY --from=builder /app .
- กำหนด Environment Variable ชื่อ
NODE_ENV
เพื่อระบุว่าเป็น Production Environment
ENV NODE_ENV=production
- กำหนด Environment Variable สำหรับ NUXT_HOST และ NUXT_PORT สำหรับ Nuxt.js
ENV NUXT_HOST=0.0.0.0
ENV NUXT_PORT=5000
- ระบุ Port ภายใน Container ว่าจะให้ทำงานที่ Port ใด
EXPOSE 5000
- กำหนดคำสั่งสำหรับรัน Container Image
CMD [ "npm", "start" ]
Backend
- กำหนด Base Image ที่จะใช้ภายใน Container
FROM node:16.13.2-alpine
- กำหนด Working Directory เพื่อใช้เป็น Default Location ที่จะใช้คำสั่งต่าง ๆ ภายใน Dockerfile
WORKDIR /app
- คัดลอกไฟล์
package.json
และ package-lock.json
เข้าไปยัง Working Directory ที่กำหนดไว้
COPY package*.json ./
- หลังจากคัดลอกไฟล์
package.json
และ package-lock.json
เข้าไปยัง Working Directory แล้ว จะทำการรันคำสั่ง npm install --production เพื่อติดตั้ง Dependencies สำหรับ Production เท่านั้น (ไม่ติดตั้ง Dev Dependencies)
RUN npm install --production
- หลังจากทำการติดตั้ง Dependencies ต่าง ๆ เรียบร้อยแล้ว จะทำการคัดลอก Source code ทั้งหมดเข้าไปยัง Container Image
COPY . .
- กำหนด Environment Variable ชื่อ
NODE_ENV
เพื่อระบุว่าเป็น Production Environment
ENV NODE_ENV=production
- ระบุ Port ภายใน Container ว่าจะให้ทำงานที่ Port ใด
EXPOSE 8080
- กำหนดคำสั่งสำหรับรัน Container Image
CMD [ "npm", "start" ]