1. Dự án viết bằng nodejs
Cấu trúc thư mục
| .editorconfig
| .gitignore
| angular.json
| client-app.iml
| nginx.conf
| package-lock.json
| package.json
| README.md
| tsconfig.app.json
| tsconfig.json
| tsconfig.spec.json
|
+---.angular
+---.vscode
+---public
\---src
| index.html
| main.ts
| polyfills.ts
| styles.scss
|
+---app
\---environments
2. Viết Dockerfile
FROM node:20-alpine AS build-stage
WORKDIR /app
COPY package*.json ./
COPY angular.json ./
COPY tsconfig*.json ./
RUN npm install --legacy-peer-deps
COPY . .
RUN npm run build --prod
#Production stage
FROM nginx:alpine AS production-stage
COPY --from=build-stage /app/dist/client-app/browser/* /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
3. Build và Run
Build
C:\Project\devops-coaching\client-app>Docker build -t client-app .
[+] Building 176.8s (18/18) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 739B
=> [internal] load metadata for docker.io/library/node:20-alpine
=> [internal] load metadata for docker.io/library/nginx:alpine
=> [auth] library/node:pull token for registry-1.docker.io
=> [auth] library/nginx:pull token for registry-1.docker.io
.....
=> exporting to image
=> => exporting layers
=> => exporting manifest sha256:3103120edef07b9dc7133212cdf7411a3c5c4e9e52e68e
=> => exporting config sha256:44f5fb0c03639c7a8e4f8172d23ad513c1466bd80
=> => exporting attestation manifest sha256:36da2cff0490c92a1d6bd9df8be8f7ae4f01b5
=> => exporting manifest list sha256:7cd8bf732a799dc5ebb71644cd4574134b1d7871ecd2dd0
=> => naming to docker.io/library/client-app:latest
=> => unpacking to docker.io/library/client-app:latest
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/dygh8w9qx076opte3epl1egzc
Run
devops-coaching\client-app>docker run -p 80:80 --name client-app -d client-app
20efa9da1046554ab726a5c8ffe8bcbf34b55f4f7dfadc2076cd6cb9765f5d6e
Kiểm tra
