เดเดฐเต เดซเตเดเตเดเตผ เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเดฒเตเดเตเดเต เดเดเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต, เดธเดเตเดเตเตผเดฃเตเดฃเดฎเดพเดฏ เดเตผเดเตเดเดธเตโเดเตเดฐเตเดฑเตเดฑเตผเดฎเดพเดฐเตเดเตเดฏเตเด CI/CD เดฏเตเดเตเดฏเตเด เดเดเตเดเดพเดฒเดคเตเดคเต, เดชเตเดฐเดคเดฟเดฌเดฆเตเดงเดคเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเตเดธเตเดฑเตเดฑเตเดเดณเดฟเดฒเตเดเตเดเตเด เดกเตเดฒเดฟเดตเดฑเดฟเดฏเดฟเดฒเตเดเตเดเตเด เดเดฐเตเดชเดพเดเต เดฆเตเดฐเด เดชเตเดเตเดฃเตเดเดคเตเดฃเตเดเต. เดฎเตเดฎเตเดชเต, เดจเดฟเดเตเดเตพเดเตเดเต FTP เดตเดดเดฟ เดชเตเดคเดฟเดฏ เดซเดฏเดฒเตเดเตพ เด เดชเตโเดฒเตเดกเต เดเตเดฏเตเดฏเดพเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต (เดเดจเดฟ เดเดฐเตเด เด เดคเต เดเตเดฏเตเดฏเดฟเดฒเตเดฒ, เดถเดฐเดฟเดฏเดฒเตเดฒเต?), เดเตเดเดพเดคเต "เดตเดฟเดจเตเดฏเดพเดธเด" เดชเตเดฐเดเตเดฐเดฟเดฏเดฏเตเดเตเดเต เดจเดฟเดฎเดฟเดทเดเตเดเตพ เดเดเตเดคเตเดคเต. เดเดชเตเดชเตเตพ เดจเดฟเดเตเดเตพ เดเดฐเต เดฒเดฏเดจ เด เดญเตเดฏเตผเดคเตเดฅเดจ เดธเตเดทเตโเดเดฟเดเตเดเตเดเดฏเตเด เดซเตเดเตเดเตผ เดเดชเดฏเตเดเตเดคเดพเดเตเดเดณเดฟเตฝ เดเดคเตเดคเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดฆเตเตผเดเดจเตเดฐเด เดเดพเดคเตเดคเดฟเดฐเดฟเดเตเดเตเดเดฏเตเด เดตเตเดฃเด.
เด เดชเดพเดคเดฏเตเดเต เดญเดพเดเดฎเดพเดฃเต เดเดฐเต เดกเตเดเตเดเตผ เดเดฎเตเดเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเต. เดเดฟเดฒเดชเตเดชเตเตพ เด เดธเดเดฌเตเดฒเดฟ เดฎเดฟเดจเดฟเดฑเตเดฑเตเดเตพ เดจเตเดฃเตเดเตเดจเดฟเตฝเดเตเดเตเด, เดเดฟเดฒเดชเตเดชเตเตพ เดชเดคเดฟเดจเดพเดฏเดฟเดฐเดเตเดเดฃเดเตเดเดฟเดจเต เดฎเดฟเดจเดฟเดฑเตเดฑเต เดจเตเดฃเตเดเตเดจเดฟเตฝเดเตเดเตเด, เด เดคเดฟเดจเต เดธเดพเดงเดพเดฐเดฃเดฎเตเดจเตเดจเต เดตเดฟเดณเดฟเดเตเดเดพเดจเดพเดตเดฟเดฒเตเดฒ. เด เดฒเตเดเดจเดคเตเดคเดฟเตฝ, เดเดเตเดเตพ เดเดฐเต เดเดฎเตเดเดฟเดฒเตเดเตเดเต เดชเดพเดเตเดเตเดเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเดเตเดเตเดเตเด, เดฌเดฟเตฝเดกเต เดตเตเดเดคเตเดคเดฟเดฒเดพเดเตเดเดพเตป เดจเดฟเดฐเดตเดงเดฟ เดฐเตเดคเดฟเดเตพ เดชเตเดฐเดฏเตเดเดฟเดเตเดเตเด, เด เดฐเตเดคเดฟเดเตพ เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต เดเดจเตเดจเดคเดฟเดจเตเดฑเต เดธเตเดเตเดทเตเดฎเดคเดเตพ เดจเตเดเตเดเตเด.
เดฎเตเดกเดฟเดฏ เดตเตเดฌเตเดธเตเดฑเตเดฑเตเดเตพ เดธเตเดทเตเดเดฟเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเด เดชเดฟเดจเตเดคเตเดฃเดฏเตเดเตเดเตเดจเตเดจเดคเดฟเดฒเตเด เดเดเตเดเตพเดเตเดเต เดจเดฒเตเดฒ เด
เดจเตเดญเดตเดฎเตเดฃเตเดเต:
เดเดเตเดเตพ GitLab-เดฒเตเดเตเดเต เดตเดฟเดจเตเดฏเดธเดฟเดเตเดเตเดจเตเดจเต. เดเดเตเดเตพ เดเดฟเดคเตเดฐเดเตเดเตพ เดถเตเดเดฐเดฟเดเตเดเตเดเดฏเตเด เด เดตเดฏเต GitLab เดฐเดเดฟเดธเตเดเตเดฐเดฟเดฏเดฟเดฒเตเดเตเดเต เดคเดณเตเดณเตเดเดฏเตเด เด เดต เดชเตเดฐเตเดกเดเตเดทเดจเดฟเดฒเตเดเตเดเต เดฎเดพเดฑเตเดฑเตเดเดฏเตเด เดเตเดฏเตเดฏเตเดจเตเดจเต. เด เดฒเดฟเดธเตเดฑเตเดฑเดฟเดฒเต เดเดฑเตเดฑเดตเตเด เดฆเตเตผเดเตเดฏเดฎเตเดฑเดฟเดฏ เดเดพเดฐเตเดฏเด เดเดฟเดคเตเดฐเดเตเดเตพ เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต: เดเดชเตเดฑเตเดฑเดฟเดฎเตเดธเตเดทเตป เดเดฒเตเดฒเดพเดคเต, เดเดฐเต เดฌเดพเดเตเดเตเตปเดกเต เดฌเดฟเตฝเดกเตเด 14 เดฎเดฟเดจเดฟเดฑเตเดฑเต เดเดเตเดคเตเดคเต.
เด เดตเดธเดพเดจเด, เดจเดฎเตเดเตเดเต เดเดจเดฟ เดเดเตเดเดจเต เดเตเดตเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดฟเดฒเตเดฒเตเดจเตเดจเต เดตเตเดฏเดเตเดคเดฎเดพเดฏเดฟ, เดเดจเตเดคเตเดเตเดฃเตเดเดพเดฃเต เดเดฟเดคเตเดฐเดเตเดเตพ เดถเตเดเดฐเดฟเดเตเดเดพเตป เดเดคเตเดฐเดฏเดงเดฟเดเด เดธเดฎเดฏเด เดเดเตเดเตเดเตเดจเตเดจเดคเตเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเดเตเดเดพเตป เดเดเตเดเตพ เดเดฐเตเดจเตเดจเต. เดคเตฝเดซเดฒเดฎเดพเดฏเดฟ, เด เดธเดเดฌเตเดฒเดฟ เดธเดฎเดฏเด 30 เดธเตเดเตเดเตปเดกเดพเดฏเดฟ เดเตเดฑเดฏเตเดเตเดเดพเตป เดเดเตเดเตพเดเตเดเต เดเดดเดฟเดเตเดเต!
เด เดฒเตเดเดจเดคเตเดคเดฟเดจเดพเดฏเดฟ, เดฑเดฟเดฎเตเตปเดกเดฑเดฟเดจเตเดฑเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดเตเดเดชเตเดชเตเดเดพเดคเดฟเดฐเดฟเดเตเดเดพเตป, เดเดฐเต เดถเตเดจเตเดฏเดฎเดพเดฏ เดเตเดฃเตเดฏ เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเตเดเตเดเดฟเดเตเดเตเตผเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดเดฐเต เดเดฆเดพเดนเดฐเดฃเด เดจเตเดเตเดเดพเด. เด เดคเดฟเดจเดพเตฝ, เดจเดฎเตเดเตเดเต เดเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดธเตเดทเตเดเดฟเดเตเดเดพเด:
ng n app
เดเดคเดฟเดฒเตเดเตเดเต PWA เดเตเตผเดเตเดเตเด (เดเดเตเดเตพ เดชเตเดฐเตเดเดฎเดจเดชเดฐเดฎเดพเดฃเต):
ng add @angular/pwa --project app
เดเดฐเต เดฆเดถเดฒเดเตเดทเด npm เดชเดพเดเตเดเตเดเตเดเตพ เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดฎเตเดชเตเตพ, เดกเตเดเตเดเตผ เดเดฎเตเดเต เดเดเตเดเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเตเดตเตเดจเตเดจเต เดจเดฎเตเดเตเดเต เดจเตเดเตเดเดพเด. เดเดฐเต เดเดฃเตเดเตเดฏเตโเดจเตผ เดเดจเตเดจ เดเดฑเตเดฑเดชเตเดชเตเดเตเด เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เด เดชเตเดฒเดฟเดเตเดเตเดทเดจเตเดเตพ เดชเดพเดเตเดเตเดเตเดเตเดฏเตเดฏเดพเดจเตเด เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเดจเตเดฎเตเดณเตเดณ เดเดดเดฟเดตเต เดกเตเดเตเดเตผ เดจเตฝเดเตเดจเตเดจเต. เดเดฑเตเดฑเดชเตเดชเตเดเดฒเดฟเดจเต เดจเดจเตเดฆเดฟ, เดจเดฟเดเตเดเตพเดเตเดเต เดเดฐเต เดธเตเตผเดตเดฑเดฟเตฝ เดเดฐเตเดธเดฎเดฏเด เดจเดฟเดฐเดตเดงเดฟ เดเดฃเตเดเตเดฏเตโเดจเดฑเตเดเตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. เดเดฃเตเดเตเดฏเตโเดจเดฑเตเดเตพ เดตเตเตผเดเตเดตเตฝ เดฎเตเดทเตเดจเตเดเดณเตเดเตเดเดพเตพ เดตเดณเดฐเต เดญเดพเดฐเด เดเตเดฑเดเตเดเดคเดพเดฃเต, เดเดพเดฐเดฃเด เด เดต เดธเดฟเดธเตเดฑเตเดฑเด เดเตเตผเดฃเดฒเดฟเตฝ เดจเตเดฐเดฟเดเตเดเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจเต. เดเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดเดชเดฏเตเดเดฟเดเตเดเต เดเดฐเต เดเดฃเตเดเตเดฏเตเดจเตผ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต, เดเดเตเดเตพ เดเดฆเตเดฏเด เดเดฐเต เดเดฎเตเดเต เดธเตเดทเตเดเดฟเดเตเดเตเดฃเตเดเดคเตเดฃเตเดเต, เด เดคเดฟเตฝ เดเดเตเดเดณเตเดเต เดเดชเตเดฒเดฟเดเตเดเตเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดเดฒเตเดฒเดพเด เดเดเตเดเตพ เดชเดพเดเตเดเตเดเต เดเตเดฏเตเดฏเตเด. เด เดเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฏเดฟ, เดเดฐเต เดเดฟเดคเตเดฐเด เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต เดชเดเตผเดชเตเดชเดพเดฃเต. เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, Dockerfile เดเดเตเดเตเดเตเด:
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 .
เดเดฎเตเดเตเดเตพ เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดเตเตบเดซเดฟเดเตผ เดเตเดฏเตโเดคเดฟเดเตเดเตเดฃเตเดเตเดเตเดเดฟเตฝ (เดคเดพเดดเตเดฏเตเดณเตเดณเดคเดฟเตฝ เดเตเดเตเดคเตฝ), เดฌเดฟเตฝเดกเต เดเดฐเดเดญเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดกเตเดเตเดเดฑเดฟเดจเต เดเดคเดฟเดจเดเด เดคเดจเตเดจเต เดเดฐเต เดเตเดเตเดเด เดเดพเดทเตเดเตพ เดเดฃเตเดเดพเดฏเดฟเดฐเดฟเดเตเดเตเด. เดเดพเดทเต เดเดเตเดเดจเต เดเดชเดฏเตเดเดฟเดเตเดเดพเดฎเตเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเดเตเดเตเด เดเดจเตเดจเดคเดพเดฃเต เดเดเตเดเดณเตเดเต เดเตเดฎเดคเดฒ, เด เดคเตเดตเดดเดฟ เดฌเดฟเตฝเดกเต เดเดดเดฟเดฏเตเดจเตเดจเดคเตเดฐ เดตเตเดเดคเตเดคเดฟเตฝ เดจเดเดเตเดเตเดจเตเดจเต. เดเดฐเต เดเดพเดทเต เดเดฒเตเดฒเดพเดคเต เดเดฐเต เดฌเดฟเตฝเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฐเต เดคเดตเดฃ เดฎเดพเดคเตเดฐเดฎเต เดธเดเดญเดตเดฟเดเตเดเตเดเดฏเตเดณเตเดณเต เดเดจเตเดจเต เดเดเตเดเตพ เด เดจเตเดฎเดพเดจเดฟเดเตเดเตเดจเตเดจเดคเดฟเดจเดพเตฝ-เดเดฆเตเดฏ เดคเดตเดฃ-เดเดฆเตเดฏเดคเตเดคเต เดชเตเดฐเดพเดตเดถเตเดฏเด เดเดคเตเดฐเดฎเดพเดคเตเดฐเด เดฎเดจเตเดฆเดเดคเดฟเดฏเดฟเดฒเดพเดฏเดฟเดฐเตเดจเตเดจเตเดตเตเดจเตเดจเต เดจเดฎเตเดเตเดเต เด เดตเดเดฃเดฟเดเตเดเดพเด. เดเตเดธเตเดฑเตเดฑเตเดเดณเดฟเตฝ, เดฌเดฟเตฝเดกเดฟเดจเตเดฑเต เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดฑเตบ เดเดเตเดเตพเดเตเดเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต, เดเดพเดทเตเดเตพ เดเดคเดฟเดจเดเด เดเตเดเดพเดเตเดฎเตเดชเตเตพ เดเดเตเดเตพ เดเตเดเตเดเต เดเตเดเดพเตป เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เดเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด, เดเดฟเดฒ เดจเตเดฑเตเดเตเดเตเดเตพ เดเดฆเตเดฏ เดฌเดฟเตฝเดกเดฟเดจเต เดฌเดพเดงเดฟเดเตเดเตเด.
เดฎเตเดเดณเดฟเตฝ เดตเดฟเดตเดฐเดฟเดเตเด Dockerfile เดชเตเดฐเตเดเดเตเดฑเตเดฑเต เดซเตเตพเดกเดฑเดฟเตฝ เดเดเตเดเต เดฌเดฟเตฝเดกเต เดเดฐเดเดญเดฟเดเตเดเดพเด. เดตเดพเดฏเดจเดฏเตเดเต เดเดณเตเดชเตเดชเดคเตเดคเดฟเดจเดพเดฏเดฟ เดเดฒเตเดฒเดพ เดฒเดฟเดธเตเดฑเตเดฑเดฟเดเดเตเดเดณเตเด เดเตเดฐเตเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
$ 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 เดเตเดฌเดฟ 409 เดเดเดฌเดฟเดฏเตเดเตเดเดพเตพ เดฎเดฟเดเดเตเดเดคเดพเดฃเต. เดเดเตเดเตพ เดเดฟเดคเตเดฐเดคเตเดคเดฟเดจเตเดฑเต เดตเดฒเตเดชเตเดชเด 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
... เดเดคเดพเดฃเตเดเต เดเดฐเต เดเดฟเดเดพเดฌเตเดฑเตเดฑเต. Alpine Linux เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเตเดณเตเดณ เดเดฐเต เดเดฎเตเดเต เดเดชเดฏเตเดเดฟเดเตเดเต เดจเดฟเดเตเดเตพเดเตเดเต เดตเตเดณเดฟเดฏเด เดเดฃเตเดฏเดฎเดพเดฏเดฟ เดเตเดฑเดฏเตเดเตเดเดพเตป เดเดดเดฟเดฏเตเด. เดเตฝเดชเตเตป เดตเดณเดฐเต เดเตเดฑเดฟเดฏ เดฒเดฟเดจเดเตเดธเดพเดฃเต. เดเตฝเดชเตเตป เด เดเดฟเดธเตเดฅเดพเดจเดฎเดพเดเตเดเดฟเดฏเตเดณเตเดณ เดจเตเดกเตเดเตเดเตพเดเตเดเตเดณเตเดณ เดกเตเดเตเดเตผ เดเดฎเตเดเดฟเดจเตเดฑเต เดญเดพเดฐเด 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)/ยฏ เดเดฒเตเดฒเดพเดคเต Angular เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ
เดเดจเตเดจเดพเตฝ เดเดฟเดคเตเดฐเดคเตเดคเดฟเดจเตเดฑเต เดตเดฒเตเดชเตเดชเด 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;
}
}
เดฎเตพเดเตเดเดฟ-เดธเตเดฑเตเดฑเตเดเต เดฌเดฟเตฝเดกเต เดเดคเตเดฒเตเดฒเดพเด เดเตเดฏเตเดฏเดพเตป เดเดเตเดเดณเต เดธเดนเดพเดฏเดฟเดเตเดเตเด. เดจเดฎเตเดเตเดเต เดจเดฎเตเดฎเตเดเต Dockerfile เดฎเดพเดฑเตเดฑเดพเด:
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 เดเดชเตเดทเตป เดเดชเดฏเตเดเดฟเดเตเดเต, nginx เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเตเดจเตเดจ เดเดฃเตเดเตเดฏเตโเดจเดฑเดฟเดจเตเดณเตเดณเดฟเดฒเต เดชเตเตผเดเตเดเต 8080-เดฒเตเดเตเดเต เดเดเตเดเดณเตเดเต เดนเตเดธเตเดฑเตเดฑเต เดฎเตเดทเตเดจเดฟเดฒเต เดชเตเตผเดเตเดเต 80 เดซเตเตผเดตเตเดกเต เดเตเดฏเตเดคเต. เดฌเตเดฐเตเดธเดฑเดฟเตฝ เดคเตเดฑเดเตเดเตเด
เดเดฎเตเดเต เดตเดฒเตเดชเตเดชเด 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, pack-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