เจเจฟเจธเฉ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจฆเฉ เจเจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจ เจเจเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจเจฐเจเฉเจธเจเจฐเฉเจเจฐเจพเจ เจ เจคเฉ CI/CD เจฆเฉ เจเจนเจจเจพเจ เจฆเจฟเจจเจพเจ เจตเจฟเฉฑเจ, เจเฉเจธเจเจพเจ เจ เจคเฉ เจกเจฟเจฒเฉเจตเจฐเฉ เจคเฉฑเจ เจตเจเจจเจฌเฉฑเจงเจคเจพ เจคเฉเจ เจฒเฉ เจเฉ เจเฉฑเจ เจฒเฉฐเจฎเจพ เจธเจซเจผเจฐ เจคเฉเจ เจเจฐเจจเจพ เจนเฉเฅค เจชเจนเจฟเจฒเจพเจ, เจคเฉเจธเฉเจ FTP เจฐเจพเจนเฉเจ เจจเจตเฉเจเจ เจซเจพเจเจฒเจพเจ เจ เฉฑเจชเจฒเฉเจก เจเจฐ เจธเจเจฆเฉ เจนเฉ (เจนเฉเจฃ เจ เจเจฟเจนเจพ เจเฉเจ เจจเจนเฉเจ เจเจฐเจฆเจพ, เจ เฉเจ เจนเฉ?), เจ เจคเฉ "เจกเจฟเจชเจฒเจพเจเจฎเฉเจเจ" เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจธเจเจฟเฉฐเจเจพเจ เจฒเฉฑเจเฉเจเจเฅค เจนเฉเจฃ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจตเจฟเจฒเฉเจจเจคเจพ เจฌเฉเจจเจคเฉ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจ เจคเฉ เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจคเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจคเฉฑเจ เจชเจนเฉเฉฐเจเจฃ เจฒเจ เจฒเฉฐเจฎเจพ เจธเจฎเจพเจ เจเจกเฉเจ เจเจฐเจจเฉ เจชเจตเฉเจเฉเฅค
เจเจธ เจฎเจพเจฐเจ เจฆเจพ เจนเจฟเฉฑเจธเจพ เจเฉฑเจ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพ เจฐเจฟเจนเจพ เจนเฉเฅค เจเจ เจตเจพเจฐ เจ เจธเฉเจเจฌเจฒเฉ เจฎเจฟเฉฐเจเจพเจ เจคเฉฑเจ เจเฉฑเจฒเจฆเฉ เจนเฉ, เจเจ เจตเจพเจฐ เจเจ เจฎเจฟเฉฐเจเจพเจ เจฆเฉ, เจเจฟเจธ เจจเฉเฉฐ เจธเจผเจพเจเจฆ เจนเฉ เจเจฎ เจเจฟเจนเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ, เจ เจธเฉเจ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฒเจตเจพเจเจเฉ เจเฉ เจ เจธเฉเจ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจชเฉเจ เจเจฐเจพเจเจเฉ, เจฌเจฟเจฒเจก เจจเฉเฉฐ เจคเฉเจเจผ เจเจฐเจจ เจฒเจ เจเจ เจคเจฐเฉเจเจฟเจเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจพเจเจเฉ, เจ เจคเฉ เจเจนเจจเจพเจ เจตเจฟเจงเฉเจเจ เจฆเฉ เจเฉฐเจฎ เจเจฐเจจ เจฆเฉเจเจ เจฌเจพเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฆเฉเจเจพเจเจเฉเฅค
เจธเจพเจกเฉ เจเฉเจฒ เจฎเฉเจกเฉเจ เจตเฉเฉฑเจฌเจธเจพเจเจเจพเจ เจฌเจฃเจพเจเจฃ เจ
เจคเฉ เจธเจฎเจฐเจฅเจจ เจเจฐเจจ เจฆเจพ เจเฉฐเจเจพ เจ
เจจเฉเจญเจต เจนเฉ:
เจ เจธเฉเจ GitLab เจตเจฟเฉฑเจ เจคเฉเจจเจพเจค เจเจฐเจฆเฉ เจนเจพเจเฅค เจ เจธเฉเจ เจเจฟเฉฑเจคเจฐ เจเจเฉฑเจ เฉ เจเจฐเจฆเฉ เจนเจพเจ, เจเจนเจจเจพเจ เจจเฉเฉฐ GitLab เจฐเจเจฟเจธเจเจฐเฉ เจตเจฟเฉฑเจ เจงเฉฑเจเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจ เจฐเฉเจฒ เจเจเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจเจธ เจธเฉเจเฉ เจตเจฟเฉฑเจ เจธเจญ เจคเฉเจ เจฒเฉฐเจฌเฉ เจเฉเจเจผ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจเจพ เจนเฉ. เจเจฆเจพเจนเจฐเจจ เจฒเจ: เจฌเจฟเจจเจพเจ เจ เจจเฉเจเฉเจฒเจคเจพ เจฆเฉ, เจนเจฐเฉเจ เจฌเฉเจเจเจเจก เจฌเจฟเจฒเจก เจตเจฟเฉฑเจ 14 เจฎเจฟเฉฐเจ เจฒเฉฑเจเฉเฅค
เจ เฉฐเจค เจตเจฟเฉฑเจ, เจเจน เจธเจชเฉฑเจธเจผเจ เจนเฉ เจเจฟเจ เจเจฟ เจ เจธเฉเจ เจนเฉเจฃ เจเจธ เจคเจฐเฉเจนเจพเจ เจจเจนเฉเจ เจฐเจนเจฟ เจธเจเจฆเฉ, เจ เจคเฉ เจ เจธเฉเจ เจเจน เจชเจคเจพ เจฒเจเจพเจเจฃ เจฒเจ เจฌเฉเจ เจเจ เจเจฟ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจ เจตเจฟเฉฑเจ เจเฉฐเจจเจพ เจธเจฎเจพเจ เจเจฟเจเจ เจฒเฉฑเจ เจฐเจฟเจนเจพ เจนเฉเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ, เจ เจธเฉเจ เจ เจธเฉเจเจฌเจฒเฉ เจฆเฉ เจธเจฎเฉเจ เจจเฉเฉฐ 30 เจธเจเจฟเฉฐเจเจพเจ เจคเฉฑเจ เจเจเจพเจเจฃ เจตเจฟเฉฑเจ เจเจพเจฎเจฏเจพเจฌ เจฐเจนเฉ!
เจเจธ เจฒเฉเจ เจฒเจ, เจฐเฉเจฎเจพเจเจเจกเจฐ เจฆเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจจเจพเจฒ เจจเจพ เจฌเฉฐเจจเฉเจนเฉ เจเจพเจฃ เจฒเจ, เจเจ เจเฉฑเจ เจเจพเจฒเฉ เจเจเจเฉเจฒเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจ เจธเฉเจเจฌเจฒ เจเจฐเจจ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจตเฉเจเฉเจเฅค เจเจธ เจฒเจ, เจเจ เจธเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจ:
ng n app
เจเจธ เจตเจฟเฉฑเจ PWA เจธเจผเจพเจฎเจฒ เจเจฐเฉ (เจ เจธเฉเจ เจชเฉเจฐเจเจคเฉเจธเจผเฉเจฒ เจนเจพเจ):
ng add @angular/pwa --project app
เจเจฆเฉเจ เจเจฟ เจเฉฑเจ เจฎเจฟเจฒเฉเจ เจจ npm เจชเฉเจเฉเจ เจกเจพเจเจจเจฒเฉเจก เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเจจ, เจเจ เจเจน เจชเจคเจพ เจเจฐเฉเจ เจเจฟ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉเฅค เจกเฉเจเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจชเฉเจเฉเจ เจเจฐเจจ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจ เจเจฒเจพเจเจฃ เจฆเฉ เจฏเฉเจเจคเจพ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉ เจเจฟเจธเจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจเจธเฉเจฒเฉเจธเจผเจจ เจฒเจ เจงเฉฐเจจเจตเจพเจฆ, เจคเฉเจธเฉเจ เจเฉฑเจ เจธเจฐเจตเจฐ 'เจคเฉ เจเฉฑเจเฉ เจธเจฎเฉเจ เจเจ เจเฉฐเจเฉเจจเจฐ เจเจฒเจพ เจธเจเจฆเฉ เจนเฉเฅค เจเฉฐเจเฉเจจเจฐ เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจเจพเจ เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจนเจฒเจเฉ เจนเฉเฉฐเจฆเฉ เจนเจจ เจเจฟเจเจเจเจฟ เจเจน เจธเจฟเจธเจเจฎ เจเจฐเจจเจฒ 'เจคเฉ เจธเจฟเฉฑเจงเฉ เจเฉฑเจฒเจฆเฉ เจนเจจเฅค เจธเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเฉฐเจเฉเจจเจฐ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ, เจธเจพเจจเฉเฉฐ เจชเจนเจฟเจฒเจพเจ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจนเจฐ เจเจน เจเฉเจเจผ เจชเฉเจเฉเจ เจเจฐเจพเจเจเฉ เจเฉ เจธเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจเจผเจฐเฉเจฐเฉ เจนเฉเฅค เจ เจธเจฒ เจตเจฟเฉฑเจ, เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจซเจพเจเจฒ เจธเจฟเจธเจเจฎ เจฆเฉ เจเฉฑเจ เจเจพเจชเฉ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจกเฉเจเจฐเจซเจพเจเจฒ เจฒเจ:
FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
เจเฉฑเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจนเจฆเจพเจเจคเจพเจ เจฆเจพ เจเฉฑเจ เจธเจฎเฉเจน เจนเฉ; เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจนเจฐเฉเจ เจจเฉเฉฐ เจเจฐเจจ เจจเจพเจฒ, เจกเฉเจเจฐ เจซเจพเจเจฒ เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเจฐเฉเจเจพ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเจฟเจเจฒเฉเจเจ เจเฉฑเจคเฉ เจเจตเจฐเจฒเฉ เจเจฐเฉเจเจพเฅค เจนเจฐ เจเฉเจฎ เจเจชเจฃเฉ เจชเจฐเจค เจฌเจฃเจพเจเจเจฆเฉ เจนเฉเฅค เจ เจคเฉ เจฎเฉเจเฉฐเจฎเจฒ เจเจฟเฉฑเจคเจฐ เจฒเฉเจ เจฐเจพเจ เจจเฉเฉฐ เจเฉเฉเจฟเจ เจเจฟเจ เจนเฉเฅค
เจเฉ เจเจพเจฃเจจเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ: เจนเจฐเฉเจ เจกเฉเจเจฐ เจฒเฉเจ เจฐ เจเฉเจธเจผ เจเจฐ เจธเจเจฆเฉ เจนเฉ. เจเฉเจเจฐ เจเจเจฐเฉ เจฌเจฟเจฒเจก เจคเฉเจ เจฌเจพเจ เจฆ เจเฉเจ เจจเจนเฉเจ เจฌเจฆเจฒเจฟเจ เจนเฉ, เจคเจพเจ เจเจฎเจพเจเจก เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเฉ เจฌเจเจพเจ, เจกเฉเจเจฐ เจเฉฑเจ เจคเจฟเจเจฐ-เจฌเจฃเจพเจ เจชเจฐเจค เจฒเจตเฉเจเจพเฅค เจเจฟเจเจเจเจฟ เจฌเจฟเจฒเจก เจธเจชเฉเจก เจตเจฟเฉฑเจ เจฎเฉเฉฑเจ เจตเจพเจงเจพ เจเฉเจธเจผ เจฆเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจเจพเจฐเจจ เจนเฉเจตเฉเจเจพ, เจเจฆเฉเจ เจฌเจฟเจฒเจก เจธเจชเฉเจก เจจเฉเฉฐ เจฎเจพเจชเจฆเฉ เจนเจพเจ เจคเจพเจ เจ เจธเฉเจ เจเจพเจธ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจฐเฉเจกเฉเจฎเฉเจก เจเฉเจ เจจเจพเจฒ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจฃ เจตเฉฑเจฒ เจงเจฟเจเจจ เจฆเฉเจตเจพเจเจเฉเฅค เจเจธ เจฒเจ, เจเจฆเจฎ เจฆเจฐ เจเจฆเจฎ:
- เจ
เจธเฉเจ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจธเจฅเจพเจจเจ เจคเฉเจฐ 'เจคเฉ เจฎเจฟเจเจพ เจฆเจฟเฉฐเจฆเฉ เจนเจพเจ เจคเจพเจ เจเจฟ เจชเจฟเจเจฒเฉเจเจ เจฆเฉเฉเจพเจ เจเฉเจธเจ เจจเฉเฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจจเจพ เจเจฐเจจเฅค
docker rmi $(docker images -q)
- เจ
เจธเฉเจ เจชเจนเจฟเจฒเฉ เจตเจพเจฐ เจฌเจฟเจฒเจก เจฒเจพเจเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
time docker build -t app .
- เจ เจธเฉเจ src/index.html เจซเจพเจเจฒ เจจเฉเฉฐ เจฌเจฆเจฒเจฆเฉ เจนเจพเจ - เจ เจธเฉเจ เจเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ เจฆเฉ เจเฉฐเจฎ เจฆเฉ เจจเจเจฒ เจเจฐเจฆเฉ เจนเจพเจ.
- เจ
เจธเฉเจ เจฌเจฟเจฒเจก เจจเฉเฉฐ เจฆเฉเจเฉ เจตเจพเจฐ เจเจฒเจพเจเจเจฆเฉ เจนเจพเจเฅค
time docker build -t app .
เจเฉ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจตเจพเจคเจพเจตเจฐเจฃ เจจเฉเฉฐ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจเฉเจเจซเจฟเจเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ (เจนเฉเจ เจพเจ เจเจธ เจฌเจพเจฐเฉ เจนเฉเจฐ), เจคเจพเจ เจเจฆเฉเจ เจฌเจฟเจฒเจก เจธเจผเฉเจฐเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจกเฉเจเจฐ เจเฉเจฒ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจฌเฉเจฐเจก 'เจคเฉ เจเฉเจเจพเจ เจฆเจพ เจเฉฑเจ เจธเจฎเฉเจน เจนเฉเจตเฉเจเจพเฅค เจธเจพเจกเจพ เจเฉฐเจฎ เจเจน เจธเจฟเฉฑเจเจฃเจพ เจนเฉ เจเจฟ เจเฉเจธเจผ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฟเจตเฉเจ เจเจฐเจจเฉ เจนเฉ เจคเจพเจ เจเฉ เจฌเจฟเจฒเจก เจเจฟเฉฐเจจเฉ เจเจฒเจฆเฉ เจนเฉ เจธเจเฉ. เจเจฟเจเจเจเจฟ เจ เจธเฉเจ เจเจน เจฎเฉฐเจจ เจฐเจนเฉ เจนเจพเจ เจเจฟ เจเฉฑเจ เจเฉเจธเจผ เจคเฉเจ เจฌเจฟเจจเจพเจ เจเฉฑเจ เจฌเจฟเจฒเจก เจเจฒเจพเจเจฃเจพ เจธเจฟเจฐเจซ เจเฉฑเจ เจตเจพเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉ - เจชเจนเจฟเจฒเฉ เจตเจพเจฐ - เจ เจธเฉเจ เจเจธ เจฒเจ เจ เจฃเจกเจฟเฉฑเจ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ เจเจฟ เจชเจนเจฟเจฒเฉ เจตเจพเจฐ เจเจฟเฉฐเจจเฉ เจนเฉเจฒเฉ เจธเฉเฅค เจเฉเจธเจเจพเจ เจตเจฟเฉฑเจ, เจฌเจฟเจฒเจก เจฆเจพ เจฆเฉเจเจพ เจฐเจจ เจธเจพเจกเฉ เจฒเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจฆเฉเจ เจเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเจฐเจฎ เจนเฉ เจเจพเจเจฆเฉ เจนเจจ เจ เจคเฉ เจ เจธเฉเจ เจเจชเจฃเฉ เจเฉเจ เจจเฉเฉฐ เจธเฉเจเจฃ เจฒเจ เจคเจฟเจเจฐ เจนเฉเฉฐเจฆเฉ เจนเจพเจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉเจ เจธเฉเจเจพเจ เจชเจนเจฟเจฒเฉ เจฌเจฟเจฒเจก เจจเฉเฉฐ เจตเฉ เจชเฉเจฐเจญเจพเจตเจฟเจค เจเจฐเจจเจเฉเฅค
เจเจ เจเฉฑเจชเจฐ เจฆเฉฑเจธเฉ เจเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจจเฉเฉฐ เจชเฉเจฐเฉเจเฉเจเจ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจชเจพเจ เจ เจคเฉ เจฌเจฟเจฒเจก เจธเจผเฉเจฐเฉ เจเจฐเฉเจเฅค เจธเจพเจฐเฉเจเจ เจธเฉเจเฉเจเจ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจฆเฉ เจธเฉเจ เจฒเจ เจธเฉฐเจเจฃเจพ เจเฉเจคเจพ เจเจฟเจ เจนเฉเฅค
$ time docker build -t app .
Sending build context to Docker daemon 409MB
Step 1/5 : FROM node:12.16.2
Status: Downloaded newer image for node:12.16.2
Step 2/5 : WORKDIR /app
Step 3/5 : COPY . .
Step 4/5 : RUN npm ci
added 1357 packages in 22.47s
Step 5/5 : RUN npm run build --prod
Date: 2020-04-16T19:20:09.664Z - Hash: fffa0fddaa3425c55dd3 - Time: 37581ms
Successfully built c8c279335f46
Successfully tagged app:latest
real 5m4.541s
user 0m0.000s
sys 0m0.000s
เจ เจธเฉเจ src/index.html เจฆเฉ เจธเจฎเฉฑเจเจฐเฉ เจฌเจฆเจฒเจฆเฉ เจนเจพเจ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจฆเฉเจเฉ เจตเจพเจฐ เจเจฒเจพเจเจเจฆเฉ เจนเจพเจเฅค
$ time docker build -t app .
Sending build context to Docker daemon 409MB
Step 1/5 : FROM node:12.16.2
Step 2/5 : WORKDIR /app
---> Using cache
Step 3/5 : COPY . .
Step 4/5 : RUN npm ci
added 1357 packages in 22.47s
Step 5/5 : RUN npm run build --prod
Date: 2020-04-16T19:26:26.587Z - Hash: fffa0fddaa3425c55dd3 - Time: 37902ms
Successfully built 79f335df92d3
Successfully tagged app:latest
real 3m33.262s
user 0m0.000s
sys 0m0.000s
เจเจน เจตเฉเจเจฃ เจฒเจ เจเจฟ เจเฉ เจธเจพเจกเฉ เจเฉเจฒ เจเจฟเฉฑเจคเจฐ เจนเฉ, เจเจฎเจพเจเจก เจเจฒเจพเจ docker images
:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 79f335df92d3 About a minute ago 1.74GB
เจฌเจฃเจพเจเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจกเฉเจเจฐ เจฎเฉเจเฉเจฆเจพ เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจ เจธเจพเจฐเฉเจเจ เจซเจพเจเจฒเจพเจ เจฒเฉเจเจฆเจพ เจนเฉ เจ
เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจชเจฃเฉ เจกเฉเจฎเจจ เจจเฉเฉฐ เจญเฉเจเจฆเจพ เจนเฉ Sending build context to Docker daemon 409MB
. เจฌเจฟเจฒเจก เจธเฉฐเจฆเจฐเจญ เจจเฉเฉฐ เจฌเจฟเจฒเจก เจเจฎเจพเจเจก เจฒเจ เจเจเจฐเฉ เจเจฐเจเฉเจฎเฉเจเจ เจตเจเฉเจ เจฆเจฐเจธเจพเจเจ เจเจฟเจ เจนเฉเฅค เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจเจน เจฎเฉเจเฉเจฆเจพ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจนเฉ - ".", - เจ
เจคเฉ เจกเฉเจเจฐ เจนเจฐ เจเฉเจเจผ เจจเฉเฉฐ เจเจฟเฉฑเจเจฆเจพ เจนเฉ เจเฉ เจธเจพเจกเฉ เจเฉเจฒ เจเจธ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจนเฉ. 409 MB เจฌเจนเฉเจค เจนเฉ: เจเจ เจเจธ เจฌเจพเจฐเฉ เจธเฉเจเฉเจ เจเจฟ เจเจธเจจเฉเฉฐ เจเจฟเจตเฉเจ เจ เฉเจ เจเจฐเจจเจพ เจนเฉ.
เจธเฉฐเจฆเจฐเจญ เจจเฉเฉฐ เจเจเจพเจเจฃเจพ
เจธเฉฐเจฆเจฐเจญ เจจเฉเฉฐ เจเจเจพเจเจฃ เจฒเจ, เจฆเฉ เจตเจฟเจเจฒเจช เจนเจจ. เจเจพเจ เจ เจธเฉเจเจฌเจฒเฉ เจฒเจ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจธเจพเจฐเฉเจเจ เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจตเฉฑเจเจฐเฉ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจชเจพเจ เจ เจคเฉ เจกเฉเจเจฐ เจธเฉฐเจฆเจฐเจญ เจจเฉเฉฐ เจเจธ เจซเฉเจฒเจกเจฐ เจตเฉฑเจฒ เจชเฉเจเจเฉฐเจ เจเจฐเฉเฅค เจเจน เจนเจฎเฉเจธเจผเจพ เจธเฉเจตเจฟเจงเจพเจเจจเจ เจจเจนเฉเจ เจนเฉ เจธเจเจฆเจพ เจนเฉ, เจเจธ เจฒเจ เจ เจชเจตเจพเจฆเจพเจ เจจเฉเฉฐ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉ: เจธเฉฐเจฆเจฐเจญ เจตเจฟเฉฑเจ เจเฉ เจจเจนเฉเจ เจเจฟเฉฑเจเจฟเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจ เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ .dockerignore เจซเจพเจเจฒ เจชเจพเจ เจ เจคเฉ เจฆเฉฑเจธเฉ เจเจฟ เจฌเจฟเจฒเจก เจฒเจ เจเฉ เจเจผเจฐเฉเจฐเฉ เจจเจนเฉเจ เจนเฉ:
.git
/node_modules
เจ เจคเฉ เจฌเจฟเจฒเจก เจจเฉเฉฐ เจฆเฉเจฌเจพเจฐเจพ เจเจฒเจพเจ:
$ time docker build -t app .
Sending build context to Docker daemon 607.2kB
Step 1/5 : FROM node:12.16.2
Step 2/5 : WORKDIR /app
---> Using cache
Step 3/5 : COPY . .
Step 4/5 : RUN npm ci
added 1357 packages in 22.47s
Step 5/5 : RUN npm run build --prod
Date: 2020-04-16T19:33:54.338Z - Hash: fffa0fddaa3425c55dd3 - Time: 37313ms
Successfully built 4942f010792a
Successfully tagged app:latest
real 1m47.763s
user 0m0.000s
sys 0m0.000s
607.2 KB 409 MB เจจเจพเจฒเฉเจ เจฌเจนเฉเจค เจตเจงเฉเจ เจนเฉเฅค เจ เจธเฉเจ เจเจฟเฉฑเจคเจฐ เจฆเจพ เจเจเจพเจฐ เจตเฉ 1.74 เจคเฉเจ 1.38 GB เจคเฉฑเจ เจเจเจพ เจฆเจฟเฉฑเจคเจพ เจนเฉ:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 4942f010792a 3 minutes ago 1.38GB
เจเจ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจเจเจพเจฐ เจจเฉเฉฐ เจนเฉเจฐ เจเจเจพเจเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉเจ.
เจ เจธเฉเจ เจ เจฒเจชเจพเจเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ
เจเจฟเฉฑเจคเจฐ เจฆเฉ เจเจเจพเจฐ เจจเฉเฉฐ เจฌเจเจพเจเจฃ เจฆเจพ เจเฉฑเจ เจนเฉเจฐ เจคเจฐเฉเจเจพ เจนเฉ เจเฉฑเจ เจเฉเจเฉ เจชเฉเจฐเฉเจเจ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพเฅค เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจฆเจพ เจเจฟเฉฑเจคเจฐ เจเจน เจเจฟเฉฑเจคเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฟเจธ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจธเจพเจกเจพ เจเจฟเฉฑเจคเจฐ เจคเจฟเจเจฐ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจนเฉเจ เจฒเฉ เจชเจฐเจค เจเจฎเจพเจเจก เจฆเฉเจเจฐเจพ เจฆเจฐเจธเจพเจ เจเจ เจนเฉ FROM
เจกเฉเจเจฐเจซเจพเจเจฒ เจตเจฟเฉฑเจ. เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจ
เจธเฉเจ เจเฉฑเจ เจเจฌเฉฐเจเฉ-เจ
เจงเจพเจฐเจฟเจค เจเจฟเฉฑเจคเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจฐเจนเฉ เจนเจพเจ เจเจฟเจธ เจตเจฟเฉฑเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจจเฉเจกเจ เจธเจฅเจพเจชเจค เจนเจจเฅค เจ
เจคเฉ เจเจธเจฆเจพ เจญเจพเจฐ เจนเฉ ...
$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB
... เจฒเจเจญเจ เจเฉฑเจ เจเฉเจเจพเจฌเจพเจเจเฅค เจคเฉเจธเฉเจ เจเจฒเจชเจพเจเจจ เจฒเฉเจจเจเจธ 'เจคเฉ เจ เจงเจพเจฐเจค เจเจฟเฉฑเจคเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจตเจพเจฒเฉเจ เจฎ เจจเฉเฉฐ เจเจพเจซเจผเฉ เจเจเจพ เจธเจเจฆเฉ เจนเฉเฅค เจเจฒเจชเจพเจเจจ เจเฉฑเจ เจฌเจนเฉเจค เจเฉเจเจพ เจฒเฉเจจเจเจธ เจนเฉเฅค เจ เจฒเจชเจพเจเจจ 'เจคเฉ เจ เจงเจพเจฐเจค เจจเฉเจกเจ เจฒเจ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐ เจฆเจพ เจญเจพเจฐ เจธเจฟเจฐเจซ 88.5 MB เจนเฉเฅค เจคเจพเจ เจเจ เจเจฐเจพเจ เจตเจฟเฉฑเจ เจเจชเจฃเฉ เจเฉเจตเฉฐเจค เจเจฟเฉฑเจคเจฐ เจจเฉเฉฐ เจฌเจฆเจฒเฉเจ:
FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
เจธเจพเจจเฉเฉฐ เจเฉเจ เจเฉเจเจผเจพเจ เจธเจฅเจพเจชเจค เจเจฐเจจเฉเจเจ เจชเจเจเจ เจเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃ เจฒเจ เจเจผเจฐเฉเจฐเฉ เจนเจจเฅค เจนเจพเจ, เจเจเจเฉเจฒเจฐ เจชเจพเจเจฅเจจ ยฏ(ยฐ_o)/ยฏ เจคเฉเจ เจฌเจฟเจจเจพเจ เจจเจนเฉเจ เจฌเจฃเจฆเจพ
เจชเจฐ เจเจฟเฉฑเจคเจฐ เจฆเจพ เจเจเจพเจฐ เจเจ เจเฉ 150 MB เจนเฉ เจเจฟเจ:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest aa031edc315a 22 minutes ago 761MB
เจเจฒเฉ เจนเฉเจฐ เจตเฉ เจ เฉฑเจเฉ เจเฉฑเจฒเฉเจเฅค
เจฎเจฒเจเฉเจธเจเฉเจ เจ เจธเฉเจเจฌเจฒเฉ
เจนเจฐ เจเฉเจเจผ เจเฉ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจนเฉ เจเจน เจจเจนเฉเจ เจนเฉ เจเจฟเจธเจฆเฉ เจธเจพเจจเฉเฉฐ เจเจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจ เจฒเฉเฉ เจนเฉเฅค
$ docker run app ls -lah
total 576K
drwxr-xr-x 1 root root 4.0K Apr 16 19:54 .
drwxr-xr-x 1 root root 4.0K Apr 16 20:00 ..
-rwxr-xr-x 1 root root 19 Apr 17 2020 .dockerignore
-rwxr-xr-x 1 root root 246 Apr 17 2020 .editorconfig
-rwxr-xr-x 1 root root 631 Apr 17 2020 .gitignore
-rwxr-xr-x 1 root root 181 Apr 17 2020 Dockerfile
-rwxr-xr-x 1 root root 1020 Apr 17 2020 README.md
-rwxr-xr-x 1 root root 3.6K Apr 17 2020 angular.json
-rwxr-xr-x 1 root root 429 Apr 17 2020 browserslist
drwxr-xr-x 3 root root 4.0K Apr 16 19:54 dist
drwxr-xr-x 3 root root 4.0K Apr 17 2020 e2e
-rwxr-xr-x 1 root root 1015 Apr 17 2020 karma.conf.js
-rwxr-xr-x 1 root root 620 Apr 17 2020 ngsw-config.json
drwxr-xr-x 1 root root 4.0K Apr 16 19:54 node_modules
-rwxr-xr-x 1 root root 494.9K Apr 17 2020 package-lock.json
-rwxr-xr-x 1 root root 1.3K Apr 17 2020 package.json
drwxr-xr-x 5 root root 4.0K Apr 17 2020 src
-rwxr-xr-x 1 root root 210 Apr 17 2020 tsconfig.app.json
-rwxr-xr-x 1 root root 489 Apr 17 2020 tsconfig.json
-rwxr-xr-x 1 root root 270 Apr 17 2020 tsconfig.spec.json
-rwxr-xr-x 1 root root 1.9K Apr 17 2020 tslint.json
เจฆเฉ เจธเจนเจพเจเจคเจพ เจจเจพเจฒ docker run app ls -lah
เจ
เจธเฉเจ เจเจชเจฃเฉ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจเฉฑเจ เจเฉฐเจเฉเจจเจฐ เจฒเจพเจเจ เจเฉเจคเจพ เจนเฉ app
เจ
เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจเจฎเจพเจเจก เจจเฉเฉฐ เจเจฒเจพเจเจ ls -lah
เจเจฟเจธ เจคเฉเจ เจฌเจพเจ
เจฆ เจเฉฐเจเฉเจจเจฐ เจจเฉ เจเจชเจฃเจพ เจเฉฐเจฎ เจชเฉเจฐเจพ เจเจฐ เจฒเจฟเจเฅค
เจเจคเจชเจพเจฆเจจ เจตเจฟเฉฑเจ เจธเจพเจจเฉเฉฐ เจธเจฟเจฐเจซ เจเฉฑเจ เจซเฉเจฒเจกเจฐ เจฆเฉ เจฒเฉเฉ เจนเฉ dist
. เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ, เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเจฟเจธเฉ เจคเจฐเฉเจนเจพเจ เจฌเจพเจนเจฐ เจฆเฉเจฃ เจฆเฉ เจเจผเจฐเฉเจฐเจค เจนเฉ. เจคเฉเจธเฉเจ เจจเฉเจกเจ 'เจคเฉ เจเฉเจ HTTP เจธเจฐเจตเจฐ เจเจฒเจพ เจธเจเจฆเฉ เจนเฉเฅค เจชเจฐ เจ
เจธเฉเจ เจเจธเจจเฉเฉฐ เจเจธเจพเจจ เจฌเจฃเจพเจตเจพเจเจเฉเฅค เจเฉฑเจ เจฐเฉเจธเฉ เจธเจผเจฌเจฆ เจฆเจพ เจ
เจจเฉเจฎเจพเจจ เจฒเจเจพเจ เจเจฟเจธ เจตเจฟเฉฑเจ เจเจพเจฐ เจ
เฉฑเจเจฐ โyโ เจนเจจเฅค เจธเจนเฉ! Ynzhynyksy. เจเจ nginx เจจเจพเจฒ เจเฉฑเจ เจเจฟเฉฑเจคเจฐ เจฒเฉเจเจฆเฉ เจนเจพเจ, เจเจธ เจตเจฟเฉฑเจ เจเฉฑเจ เจซเฉเจฒเจกเจฐ เจชเจพเจ dist
เจ
เจคเฉ เจเฉฑเจ เจเฉเจเฉ เจธเฉฐเจฐเจเจจเจพ:
server {
listen 80 default_server;
server_name localhost;
charset utf-8;
root /app/dist;
location / {
try_files $uri $uri/ /index.html;
}
}
เจฎเจฒเจเฉ-เจธเจเฉเจ เจฌเจฟเจฒเจก เจเจน เจธเจญ เจเจฐเจจ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจฎเจฆเจฆ เจเจฐเฉเจเจพเฅค เจเจ เจเจชเจฃเฉ เจกเฉเจเจฐเจซเจพเจเจฒ เจจเฉเฉฐ เจฌเจฆเจฒเฉเจ:
FROM node:12.16.2-alpine3.11 as builder
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
FROM nginx:1.17.10-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/static.conf /etc/nginx/conf.d
COPY --from=builder /app/dist/app .
เจนเฉเจฃ เจธเจพเจกเฉ เจเฉเจฒ เจฆเฉ เจนเจฆเจพเจเจคเจพเจ เจนเจจ FROM
เจกเฉเจเจฐเจซเจพเจเจฒ เจตเจฟเฉฑเจ, เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจนเจฐ เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจฌเจฟเจฒเจก เจธเจเฉเจช เจเจฒเจพเจเจเจฆเจพ เจนเฉเฅค เจ
เจธเฉเจ เจชเจนเจฟเจฒเฉ เจจเฉเฉฐ เจฌเฉเจฒเจพเจเจ builder
, เจชเจฐ เจเจเจฐเฉ FROM เจคเฉเจ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเฉเจ, เจธเจพเจกเจพ เจ
เฉฐเจคเจฟเจฎ เจเจฟเฉฑเจคเจฐ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค เจเจเจฐเฉ เจเจฆเจฎ เจนเฉ nginx เจฆเฉ เจจเจพเจฒ เจ
เฉฐเจคเจฟเจฎ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจชเจฟเจเจฒเฉ เจชเฉเจพเจ
เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจ
เจธเฉเจเจฌเจฒเฉ เจฆเฉ เจเจฐเจเฉเจซเฉเจเจ เจฆเฉ เจจเจเจฒ เจเจฐเจจเจพเฅค เจเจฟเฉฑเจคเจฐ เจฆเจพ เจเจเจพเจฐ เจฌเจนเฉเจค เจเฉฑเจ เจเจฟเจ เจนเฉ:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 2c6c5da07802 29 minutes ago 36MB
เจเจ เจเจชเจฃเฉ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจจเจพเจฒ เจเฉฐเจเฉเจจเจฐ เจจเฉเฉฐ เจเจฒเจพเจ เจ เจคเฉ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจ เจเจฟ เจธเจญ เจเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ:
docker run -p8080:80 app
-p8080:80 เจตเจฟเจเจฒเจช เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจ
เจธเฉเจ เจเจชเจฃเฉ เจฎเฉเจเจผเจฌเจพเจจ เจฎเจธเจผเฉเจจ 'เจคเฉ เจชเฉเจฐเจ 8080 เจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐ เจฆเฉ เจ
เฉฐเจฆเจฐ เจชเฉเจฐเจ 80 'เจคเฉ เจซเจพเจฐเจตเจฐเจก เจเฉเจคเจพ เจเจฟเฉฑเจฅเฉ nginx เจเฉฑเจฒเจฆเจพ เจนเฉเฅค เจฌเฉเจฐเจพเจเจเจผเจฐ เจตเจฟเฉฑเจ เจเฉเจฒเฉเจนเฉ
เจเจฟเฉฑเจคเจฐ เจฆเฉ เจเจเจพเจฐ เจจเฉเฉฐ 1.74 GB เจคเฉเจ 36 MB เจคเฉฑเจ เจเจเจพเจเจฃเจพ เจคเฉเจนเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจชเฉเจฐเฉเจกเจเจธเจผเจจ เจคเฉฑเจ เจชเจนเฉเฉฐเจเจพเจเจฃ เจตเจฟเฉฑเจ เจฒเฉฑเจเจฃ เจตเจพเจฒเฉ เจธเจฎเฉเจ เจจเฉเฉฐ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจฃ เจฐเฉเจช เจตเจฟเฉฑเจ เจเจเจพเจเจเจฆเจพ เจนเฉเฅค เจชเจฐ เจเจ เจ เจธเฉเจเจฌเจฒเฉ เจฆเฉ เจธเจฎเฉเจ เจคเฉ เจตเจพเจชเจธ เจเจฒเฉเจ.
$ time docker build -t app .
Sending build context to Docker daemon 608.8kB
Step 1/11 : FROM node:12.16.2-alpine3.11 as builder
Step 2/11 : RUN apk --no-cache --update --virtual build-dependencies add python make g++
---> Using cache
Step 3/11 : WORKDIR /app
---> Using cache
Step 4/11 : COPY . .
Step 5/11 : RUN npm ci
added 1357 packages in 47.338s
Step 6/11 : RUN npm run build --prod
Date: 2020-04-16T21:16:03.899Z - Hash: fffa0fddaa3425c55dd3 - Time: 39948ms
---> 27f1479221e4
Step 7/11 : FROM nginx:stable-alpine
Step 8/11 : WORKDIR /app
---> Using cache
Step 9/11 : RUN rm /etc/nginx/conf.d/default.conf
---> Using cache
Step 10/11 : COPY nginx/static.conf /etc/nginx/conf.d
---> Using cache
Step 11/11 : COPY --from=builder /app/dist/app .
Successfully built d201471c91ad
Successfully tagged app:latest
real 2m17.700s
user 0m0.000s
sys 0m0.000s
เจฒเฉเจ เจฐเจพเจ เจฆเจพ เจเฉเจฐเจฎ เจฌเจฆเจฒเจฃเจพ
เจธเจพเจกเฉ เจชเจนเจฟเจฒเฉ เจคเจฟเฉฐเจจ เจเจฆเจฎ เจเฉเจธเจผ เจเฉเจคเฉ เจเจ เจธเจจ (เจธเฉฐเจเฉเจค Using cache
). เจเฉเจฅเฉ เจชเฉเจพเจ
'เจคเฉ, เจธเจพเจฐเฉเจเจ เจชเฉเจฐเฉเจเฉเจเจ เจซเจพเจเจฒเจพเจ เจฆเฉ เจจเจเจฒ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจ
เจคเฉ เจชเฉฐเจเจตเฉเจ เจชเฉเจพเจ
'เจคเฉ เจจเจฟเจฐเจญเจฐเจคเจพ เจธเจฅเจพเจชเจค เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ RUN npm ci
- เจเจฟเฉฐเจจเจพ 47.338 เจธเจเจฟเฉฐเจเฅค เจจเจฟเจฐเจญเจฐเจคเจพเจตเจพเจ เจจเฉเฉฐ เจนเจฐ เจตเจพเจฐ เจฎเฉเฉ-เจธเจฅเจพเจชเจฟเจค เจเจฟเจเจ เจเจฐเจจเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ เจเฉเจเจฐ เจเจน เจฌเจนเฉเจค เจเฉฑเจ เจฌเจฆเจฒเจฆเฉ เจนเจจ? เจเจ เจเจน เจชเจคเจพ เจเจฐเฉเจ เจเจฟ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉเจธเจผ เจเจฟเจเจ เจจเจนเฉเจ เจเฉเจคเจพ เจเจฟเจ เจธเฉเฅค เจฌเจฟเฉฐเจฆเฉ เจเจน เจนเฉ เจเจฟ เจกเฉเจเจฐ เจเจน เจตเฉเจเจฃ เจฒเจ เจฒเฉเจ
เจฐ เจฆเจฐ เจชเจฐเจค เจฆเฉ เจเจพเจเจ เจเจฐเฉเจเจพ เจเจฟ เจเฉ เจเจฎเจพเจเจก เจ
เจคเฉ เจเจธ เจจเจพเจฒ เจเฉเฉเฉเจเจ เจซเจพเจเจฒเจพเจ เจฌเจฆเจฒ เจเจเจเจ เจนเจจ. เจเฉเจฅเฉ เจชเฉเจพเจ
'เจคเฉ, เจ
เจธเฉเจ เจเจชเจฃเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉเจเจ เจธเจพเจฐเฉเจเจ เจซเจพเจเจฒเจพเจ เจฆเฉ เจจเจเจฒ เจเจฐเจฆเฉ เจนเจพเจ, เจ
เจคเฉ เจเจนเจจเจพเจ เจตเจฟเฉฑเจ, เจฌเฉเจธเจผเฉฑเจ, เจคเจฌเจฆเฉเจฒเฉเจเจ เจนเจจ, เจเจธเจฒเจ เจกเฉเจเจฐ เจจเจพ เจธเจฟเจฐเจซ เจเจธ เจชเจฐเจค เจจเฉเฉฐ เจเฉเจธเจผ เจคเฉเจ เจฒเฉเจเจฆเจพ เจนเฉ, เจฌเจฒเจเจฟ เจธเจพเจฐเฉเจเจ เจ
เจเจฒเฉเจเจ เจตเฉ! เจเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจเฉเจ เจเฉเจเฉ เจฌเจฆเจฒเจพเจ
เจเจฐเฉเจเฅค
FROM node:12.16.2-alpine3.11 as builder
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build --prod
FROM nginx:1.17.10-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/static.conf /etc/nginx/conf.d
COPY --from=builder /app/dist/app .
เจชเจนเจฟเจฒเจพเจ, package.json เจ เจคเฉ package-lock.json เจฆเฉ เจจเจเจฒ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจซเจฟเจฐ เจจเจฟเจฐเจญเจฐเจคเจพ เจธเจฅเจพเจชเจค เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ, เจ เจคเฉ เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ เจนเฉ เจชเฉเจฐเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจจเจเจฒ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจซเจฒเจธเจฐเฉเจช:
$ time docker build -t app .
Sending build context to Docker daemon 608.8kB
Step 1/12 : FROM node:12.16.2-alpine3.11 as builder
Step 2/12 : RUN apk --no-cache --update --virtual build-dependencies add python make g++
---> Using cache
Step 3/12 : WORKDIR /app
---> Using cache
Step 4/12 : COPY package*.json ./
---> Using cache
Step 5/12 : RUN npm ci
---> Using cache
Step 6/12 : COPY . .
Step 7/12 : RUN npm run build --prod
Date: 2020-04-16T21:29:44.770Z - Hash: fffa0fddaa3425c55dd3 - Time: 38287ms
---> 1b9448c73558
Step 8/12 : FROM nginx:stable-alpine
Step 9/12 : WORKDIR /app
---> Using cache
Step 10/12 : RUN rm /etc/nginx/conf.d/default.conf
---> Using cache
Step 11/12 : COPY nginx/static.conf /etc/nginx/conf.d
---> Using cache
Step 12/12 : COPY --from=builder /app/dist/app .
Successfully built a44dd7c217c3
Successfully tagged app:latest
real 0m46.497s
user 0m0.000s
sys 0m0.000s
46 เจฎเจฟเฉฐเจ เจฆเฉ เจฌเจเจพเจ 3 เจธเจเจฟเฉฐเจ - เจฌเจนเฉเจค เจตเจงเฉเจ! เจฒเฉเจ เจฐเจพเจ เจฆเจพ เจธเจนเฉ เจเฉเจฐเจฎ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉ: เจชเจนเจฟเจฒเจพเจ เจ เจธเฉเจ เจจเจเจฒ เจเจฐเจฆเฉ เจนเจพเจ เจเจฟ เจเฉ เจจเจนเฉเจ เจฌเจฆเจฒเจฆเจพ, เจซเจฟเจฐ เจเฉ เจฌเจฆเจฒเจฆเจพ เจนเฉ, เจ เจคเฉ เจ เฉฐเจค เจตเจฟเฉฑเจ เจ เจเจธเจฐ เจเฉ เจฌเจฆเจฒเจฆเจพ เจนเฉเฅค
เจ เฉฑเจเฉ, CI/CD เจธเจฟเจธเจเจฎเจพเจ เจตเจฟเฉฑเจ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจ เจธเฉเจเจฌเจฒ เจเจฐเจจ เจฌเจพเจฐเฉ เจเฉเจ เจธเจผเจฌเจฆเฅค
เจเฉเจธเจผ เจฒเจ เจชเจฟเจเจฒเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ
เจเฉ เจ เจธเฉเจ เจฌเจฟเจฒเจก เจฒเจ เจเจฟเจธเฉ เจเจฟเจธเจฎ เจฆเฉ SaaS เจนเฉฑเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ, เจคเจพเจ เจธเจฅเจพเจจเจ เจกเฉเจเจฐ เจเฉเจธเจผ เจธเจพเจซเจผ เจ เจคเฉ เจคเจพเจเจผเจพ เจนเฉ เจธเจเจฆเจพ เจนเฉ. เจกเฉเจเจฐ เจจเฉเฉฐ เจฌเฉเจเจก เจฒเฉเจ เจฐเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจเจเฉเจนเจพ เจฆเฉเจฃ เจฒเจ, เจเจธเจจเฉเฉฐ เจชเจฟเจเจฒเฉ เจฌเจฃเจพเจ เจเจ เจเจฟเฉฑเจคเจฐ เจฆเจฟเจเฅค
เจเจ GitHub เจเจเจธเจผเจจเจพเจ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจจ เจฒเจเจเฅค เจ เจธเฉเจ เจเจธ เจธเฉฐเจฐเจเจจเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ
on:
push:
branches:
- master
name: Test docker build
jobs:
deploy:
name: Build
runs-on: ubuntu-latest
env:
IMAGE_NAME: docker.pkg.github.com/${{ github.repository }}/app
IMAGE_TAG: ${{ github.sha }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Login to GitHub Packages
env:
TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $TOKEN
- name: Build
run: |
docker build
-t $IMAGE_NAME:$IMAGE_TAG
-t $IMAGE_NAME:latest
.
- name: Push image to GitHub Packages
run: |
docker push $IMAGE_NAME:latest
docker push $IMAGE_NAME:$IMAGE_TAG
- name: Logout
run: |
docker logout docker.pkg.github.com
เจเจฟเฉฑเจคเจฐ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ เจ เจคเฉ เจฆเฉ เจฎเจฟเฉฐเจ เจ เจคเฉ 20 เจธเจเจฟเฉฐเจเจพเจ เจตเจฟเฉฑเจ GitHub เจชเฉเจเฉเจเจพเจ เจตเจฟเฉฑเจ เจงเฉฑเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ:
เจเจ เจนเฉเจฃ เจฌเจฟเจฒเจก เจจเฉเฉฐ เจฌเจฆเจฒเฉเจ เจคเจพเจ เจเจฟ เจชเจฟเจเจฒเฉเจเจ เจฌเจฃเจพเจเจเจ เจเจเจเจ เจคเจธเจตเฉเจฐเจพเจ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจเฉเจธเจผ เจฆเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ เจเจพ เจธเจเฉ:
on:
push:
branches:
- master
name: Test docker build
jobs:
deploy:
name: Build
runs-on: ubuntu-latest
env:
IMAGE_NAME: docker.pkg.github.com/${{ github.repository }}/app
IMAGE_TAG: ${{ github.sha }}
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Login to GitHub Packages
env:
TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $TOKEN
- name: Pull latest images
run: |
docker pull $IMAGE_NAME:latest || true
docker pull $IMAGE_NAME-builder-stage:latest || true
- name: Images list
run: |
docker images
- name: Build
run: |
docker build
--target builder
--cache-from $IMAGE_NAME-builder-stage:latest
-t $IMAGE_NAME-builder-stage
.
docker build
--cache-from $IMAGE_NAME-builder-stage:latest
--cache-from $IMAGE_NAME:latest
-t $IMAGE_NAME:$IMAGE_TAG
-t $IMAGE_NAME:latest
.
- name: Push image to GitHub Packages
run: |
docker push $IMAGE_NAME-builder-stage:latest
docker push $IMAGE_NAME:latest
docker push $IMAGE_NAME:$IMAGE_TAG
- name: Logout
run: |
docker logout docker.pkg.github.com
เจชเจนเจฟเจฒเจพเจ เจธเจพเจจเฉเฉฐ เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจฆเฉฑเจธเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟ เจฆเฉ เจเจฎเจพเจเจกเจพเจ เจเจฟเจเจ เจฒเจพเจเจ เจเฉเจคเฉเจเจ เจเจเจเจ เจนเจจ build
. เจคเฉฑเจฅ เจเจน เจนเฉ เจเจฟ เจเฉฑเจ เจฎเจฒเจเฉเจธเจเฉเจ เจ
เจธเฉเจเจฌเจฒเฉ เจตเจฟเฉฑเจ เจจเจคเฉเจเจพ เจเจฟเฉฑเจคเจฐ เจเจเจฐเฉ เจชเฉเจพเจ
เจคเฉเจ เจฒเฉเจ
เจฐเจพเจ เจฆเจพ เจเฉฑเจ เจธเจฎเฉเจน เจนเฉเจตเฉเจเจพ. เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจชเจฟเจเจฒเฉเจเจ เจฒเฉเจ
เจฐเจพเจ เจคเฉเจ เจชเจฐเจคเจพเจ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจจเจนเฉเจ เจเฉเจคเฉเจเจ เจเจพเจฃเจเฉเจเจเฅค เจเจธ เจฒเจ, เจชเจฟเจเจฒเฉ เจฌเจฟเจฒเจก เจคเฉเจ เจ
เฉฐเจคเจฟเจฎ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ, เจกเฉเจเจฐ เจจเฉเจกเจ (เจฌเจฟเจฒเจกเจฐ เจชเฉเจพเจ
) เจจเจพเจฒ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจคเจฟเจเจฐ เจฒเฉเจ
เจฐเจพเจ เจจเฉเฉฐ เจฒเฉฑเจญเจฃ เจฆเฉ เจฏเฉเจ เจจเจนเฉเจ เจนเฉเจตเฉเจเจพเฅค เจเจธ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ, เจเฉฑเจ เจตเจฟเจเจเจพเจฐเจฒเจพ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจ เจเจฟเจ เจนเฉ $IMAGE_NAME-builder-stage
เจ
เจคเฉ GitHub เจชเฉเจเฉเจเจพเจ 'เจคเฉ เจงเฉฑเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉ เจคเจพเจ เจเฉ เจเจธ เจจเฉเฉฐ เจเฉเจธเจผ เจธเจฐเฉเจค เจตเจเฉเจ เจฌเจพเจ
เจฆ เจฆเฉ เจฌเจฟเจฒเจก เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจเจพ เจธเจเฉเฅค
เจเฉเฉฑเจฒ เจ เจธเฉเจเจฌเจฒเฉ เจฆเจพ เจธเจฎเจพเจ เจเจเจพ เจเฉ เจกเฉเจข เจฎเจฟเฉฐเจ เจเจฐ เจฆเจฟเฉฑเจคเจพ เจเจฟเจเฅค เจชเจฟเจเจฒเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจเจฟเฉฑเจเจฃ เจตเจฟเฉฑเจ เจ เฉฑเจงเจพ เจฎเจฟเฉฐเจ เจฌเจฟเจคเจพเจเจ เจเจพเจเจฆเจพ เจนเฉเฅค
เจชเฉเจฐเฉเจเจฎเฉเจเจฟเฉฐเจ
เจเฉฑเจ เจธเจพเจซเจผ เจกเฉเจเจฐ เจเฉเจธเจผ เจฆเฉ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฆเจพ เจเฉฑเจ เจนเฉเจฐ เจคเจฐเฉเจเจพ เจนเฉ เจเฉเจ เจฒเฉเจ เจฐเจพเจ เจจเฉเฉฐ เจเจฟเจธเฉ เจนเฉเจฐ เจกเฉเจเจฐเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจฒเจฟเจเจพเจฃเจพ, เจเจธเจจเฉเฉฐ เจตเฉฑเจเจฐเฉ เจคเฉเจฐ 'เจคเฉ เจฌเจฃเจพเจเจฃเจพ, เจเจธเจจเฉเฉฐ เจเฉฐเจเฉเจจเจฐ เจฐเจเจฟเจธเจเจฐเฉ เจตเจฟเฉฑเจ เจงเฉฑเจเจฃเจพ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจตเจเฉเจ เจตเจฐเจคเจฃเจพ เจนเฉเฅค
เจ เจธเฉเจ เจเฉฑเจ เจเจเจเฉเจฒเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃ เจฒเจ เจเจชเจฃเจพ เจจเฉเจกเจ เจเจฟเฉฑเจคเจฐ เจฌเจฃเจพเจเจเจฆเฉ เจนเจพเจเฅค เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ Dockerfile.node เจฌเจฃเจพเจ
FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
เจ เจธเฉเจ เจกเฉเจเจฐ เจนเฉฑเจฌ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจจเจคเจ เจเจฟเฉฑเจคเจฐ เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจงเฉฑเจเจฆเฉ เจนเจพเจ:
docker build -t exsmund/node-for-angular -f Dockerfile.node .
docker push exsmund/node-for-angular:latest
เจนเฉเจฃ เจธเจพเจกเฉ เจฎเฉเฉฑเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจฎเฉเจเฉฐเจฎเจฒ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ:
FROM exsmund/node-for-angular:latest as builder
...
เจธเจพเจกเฉ เจเจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจ, เจฌเจฟเจฒเจก เจเจพเจเจฎ เจเฉฑเจ เจจเจนเฉเจ เจนเฉเจเจ เจนเฉ, เจชเจฐ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจฌเจฃเจพเจเจเจ เจเจเจเจ เจคเจธเจตเฉเจฐเจพเจ เจเจชเจฏเฉเจเฉ เจนเฉ เจธเจเจฆเฉเจเจ เจนเจจ เจเฉเจเจฐ เจคเฉเจนเจพเจกเฉ เจเฉเจฒ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจชเฉเจฐเฉเจเฉเจเจ เจนเจจ เจ เจคเฉ เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจนเจฐเฉเจ เจตเจฟเฉฑเจ เจเฉฑเจเฉ เจจเจฟเจฐเจญเจฐเจคเจพ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจเจพ เจนเฉเฅค
เจ เจธเฉเจ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจฆเฉ เจจเจฟเจฐเจฎเจพเจฃ เจจเฉเฉฐ เจคเฉเจเจผ เจเจฐเจจ เจฒเจ เจเจ เจคเจฐเฉเจเจฟเจเจ เจตเฉฑเจฒ เจฆเฉเจเจฟเจ. เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจพเจนเฉเฉฐเจฆเฉ เจนเฉ เจเจฟ เจคเฉเจจเจพเจคเฉ เจเจฒเจฆเฉ เจนเฉ เจเจพเจตเฉ, เจคเจพเจ เจเจธเจจเฉเฉฐ เจเจชเจฃเฉ เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจตเจฐเจคเจฃ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉ:
- เจธเฉฐเจฆเจฐเจญ เจจเฉเฉฐ เจเจเจพเจเจฃเจพ;
- เจเฉเจเฉ เจฎเจพเจคเจพ-เจชเจฟเจคเจพ เจเจฟเฉฑเจคเจฐเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ;
- เจฎเจฒเจเฉเจธเจเฉเจ เจ เจธเฉเจเจฌเจฒเฉ;
- เจเฉเจธเจผ เจฆเฉ เจเฉเจธเจผเจฒ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฒเจ เจกเฉเจเจฐเจซเจพเจเจฒ เจตเจฟเฉฑเจ เจจเจฟเจฐเจฆเฉเจธเจผเจพเจ เจฆเฉ เจเฉเจฐเจฎ เจจเฉเฉฐ เจฌเจฆเจฒเจฃเจพ;
- CI/CD เจธเจฟเจธเจเจฎเจพเจ เจตเจฟเฉฑเจ เจเฉเจธเจผ เจธเจฅเจพเจชเจค เจเจฐเจจเจพ;
- เจเจฟเฉฑเจคเจฐเจพเจ เจฆเฉ เจธเจผเฉเจฐเฉเจเจคเฉ เจฐเจเจจเจพเฅค
เจฎเฉเจจเฉเฉฐ เจเจฎเฉเจฆ เจนเฉ เจเจฟ เจเจฆเจพเจนเจฐเจจ เจเจน เจธเจชเฉฑเจธเจผเจ เจเจฐ เจฆเฉเจตเฉเจเฉ เจเจฟ เจกเฉเจเจฐ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ, เจ
เจคเฉ เจคเฉเจธเฉเจ เจเจชเจฃเฉ เจคเฉเจจเจพเจคเฉ เจจเฉเฉฐ เจตเจงเฉเจ เจขเฉฐเจ เจจเจพเจฒ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจตเฉเจเฉ. เจฒเฉเจ เจฆเฉเจเจ เจเจฆเจพเจนเจฐเจฃเจพเจ เจจเจพเจฒ เจเฉเจกเจฃ เจฒเจ, เจเฉฑเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฌเจฃเจพเจ เจเจ เจนเฉ
เจธเจฐเฉเจค: www.habr.com