สรุปการสร้าง Dockerfile - taritinth/sw-dev-tools-and-environments-project GitHub Wiki

สรุปการสร้าง Dockerfile

Frontend

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

Backend

  1. กำหนด Base Image ที่จะใช้ภายใน Container
FROM node:16.13.2-alpine
  1. กำหนด Working Directory เพื่อใช้เป็น Default Location ที่จะใช้คำสั่งต่าง ๆ ภายใน Dockerfile
WORKDIR /app
  1. คัดลอกไฟล์ package.json และ package-lock.json เข้าไปยัง Working Directory ที่กำหนดไว้
COPY package*.json ./
  1. หลังจากคัดลอกไฟล์ package.json และ package-lock.json เข้าไปยัง Working Directory แล้ว จะทำการรันคำสั่ง npm install --production เพื่อติดตั้ง Dependencies สำหรับ Production เท่านั้น (ไม่ติดตั้ง Dev Dependencies)
RUN npm install --production
  1. หลังจากทำการติดตั้ง Dependencies ต่าง ๆ เรียบร้อยแล้ว จะทำการคัดลอก Source code ทั้งหมดเข้าไปยัง Container Image
COPY . .
  1. กำหนด Environment Variable ชื่อ NODE_ENV เพื่อระบุว่าเป็น Production Environment
ENV NODE_ENV=production
  1. ระบุ Port ภายใน Container ว่าจะให้ทำงานที่ Port ใด
EXPOSE 8080
  1. กำหนดคำสั่งสำหรับรัน Container Image
CMD [ "npm", "start" ]