Summary of Creating Dockerfile - Kanapakan/MoodMent-Project-SW-dev-tool GitHub Wiki
Frontend
FROM node:lts-alpine AS builder
WORKDIR /usr/src/front-end
COPY package.json .
RUN yarn install
COPY . .
RUN ["yarn", "build"]
FROM nginx:1.14.2-alpine AS production
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=0 /usr/src/front-end/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
มีการทำ Multi-stages builds โดยแบ่ง Dockerfile เป็น 2 ส่วน คือ ส่วนสำหรับ Build และ ส่วนที่คัดลอกไฟล์ที่ Build นั้นไปใช้งาน
ส่วนสำหรับ Build
FROM node:lts-alpine AS builder
- เป็นคำสั่งเพื่อเรียกใช้ Base Image สำหรับงานที่ทำงานด้วย NodeJS จาก DockerHub ที่รันด้วย Alpine Linux long term support version
WORKDIR /usr/src/front-end
- เป็นคำสั่งเพื่อกำหนด Work Directory เพื่อให้คำสั่งอื่น ๆ ที่จะทำการรันต่อจากนี้ถูกรันที่ Directory usr/src/front-end
COPY package.json .
- เป็นคำสั่งเพื่อคัดลอกทุกอย่างที่อยู่ในไฟล์ package.json ไปยัง Work Directory
RUN yarn install
- เป็นคำสั่งเพื่อให้รัน yarn install เพื่อติดตั้งสิ่งที่อยู่ในไฟล์ package.json ที่ถูกคัดลอกมาอยู่ใน Work Directory ที่ชื่อว่า front-end
COPY . .
- เป็นคำสั่งเพื่อคัดลอกทุกไฟล์ไปยัง image ที่อยู่ในโฟลเดอร์ usr/src/front-end
RUN ["yarn", "build"]
- เป็นคำสั่งเพื่อให้ build
ส่วนที่ใช้งาน
FROM nginx:1.14.2-alpine AS production
- เป็นคำสั่งเพื่อเรียกใช้ Base Image สำหรับงานที่ทำงานด้วย nginx จาก DockerHub ที่รันด้วย Alpine Linux version1.14.2
COPY nginx.conf /etc/nginx/conf.d/default.conf
- เป็นคำสั่งเพื่อคัดลอกไฟล์ nginx config ไปยัง Destination Folder
COPY --from=0 /usr/src/front-end/build /usr/share/nginx/html
- เป็นคำสั่งเพื่อคัดลอกไฟล์ที่เรา build ไว้แล้วมายัง image ที่สอง
CMD ["nginx", "-g", "daemon off;"]
- เป็น Execute Command เพื่อใช้ nginx ในการรันโดยไม่ให้รันที่ Background
Backend
FROM node:lts-alpine AS development
WORKDIR /usr/src/app
COPY package.json ./
RUN yarn add @nestjs/cli
RUN yarn install
COPY . .
RUN ["yarn", "run", "build"]
FROM node:lts-alpine AS production
WORKDIR /usr/src/app
COPY package.json ./
RUN yarn install --production
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/main"]
มีการทำ Multi-stages builds โดยแบ่ง Dockerfile เป็น 2 ส่วน คือ ส่วนสำหรับ Build และ ส่วนที่คัดลอกไฟล์ที่ Build นั้นไปใช้งาน
ส่วนสำหรับ Build
FROM node:lts-alpine AS builder
- เป็นคำสั่งเพื่อเรียกใช้ Base Image สำหรับงานที่ทำงานด้วย NodeJS จาก DockerHub ที่รันด้วย Alpine Linux long term support version
WORKDIR /usr/src/app
- เป็นคำสั่งเพื่อกำหนด Work Directory เพื่อให้คำสั่งอื่น ๆ ที่จะทำการรันต่อจากนี้ถูกรันที่ Directory /usr/src/app
COPY package.json ./
- เป็นคำสั่งเพื่อคัดลอกทุกอย่างที่อยู่ในไฟล์ package.json ไปยัง Work Directory
RUN yarn install --production
- เป็นคำสั่งเพื่อให้รัน yarn install เพื่อติดตั้ง dependencies ตามไฟล์ package.json
COPY . .
- เป็นคำสั่งเพื่อคัดลอกทุกไฟล์ไปยัง image
RUN ["yarn", "run", "build"]
- เป็นคำสั่งเพื่อให้ build
ส่วนที่ใช้งาน
FROM node:lts-alpine AS production
- เป็นคำสั่งเพื่อเรียกใช้ Base Image สำหรับงานที่ทำงานด้วย NodeJS จาก DockerHub ที่รันด้วย Alpine Linux long term support version
WORKDIR /usr/src/app
- เป็นคำสั่งเพื่อกำหนด Work Directory เพื่อให้คำสั่งอื่น ๆ ที่จะทำการรันต่อจากนี้ถูกรันที่ Directory /usr/src/app
COPY package.json ./
- เป็นคำสั่งเพื่อคัดลอกทุกอย่างที่อยู่ในไฟล์ package.json ไปยัง Work Directory
RUN yarn install --production
- เป็นคำสั่งเพื่อให้รัน yarn install เพื่อติดตั้ง dependencies ตามไฟล์ package.json ยกเว้นส่วนที่เป็น devDependencies
COPY --from=development /usr/src/app/dist ./dist
- เป็นคำสั่งเพื่อให้ copy ไฟล์ที่เราทำการ build ไว้แล้วมายัง image ที่ใช้งาน
CMD ["node", "dist/main"]
- เป็น execute command เพื่อใช้ node รันไฟล์ main.js ในโฟลเดอร์ dist