เชซเชฟเชเชฐ เชชเซเชฐเซเชกเชเซเชถเชจเชฎเชพเช เชเชตเซ เชคเซ เชชเชนเซเชฒเชพเช, เชเชเชฟเชฒ เชเชฐเซเชเซเชธเซเชเซเชฐเซเชเชฐเซเชธ เช เชจเซ CI/CDเชจเชพ เช เชฆเชฟเชตเชธเซเชฎเชพเช, เชชเชฐเซเชเซเชทเชฃเซ เช เชจเซ เชกเชฟเชฒเชฟเชตเชฐเซ เชธเซเชงเซ เชชเซเชฐเชคเชฟเชฌเชฆเซเชงเชคเชพเชฅเซ เชฒเชเชจเซ เชฒเชพเชเชฌเซ เชฎเชเชฒ เชเชพเชชเชตเชพเชจเซ เชเซ. เชชเชนเซเชฒเชพเช, เชคเชฎเซ FTP เชฆเซเชตเชพเชฐเชพ เชจเชตเซ เชซเชพเชเชฒเซ เช เชชเชฒเซเชก เชเชฐเซ เชถเชเชคเชพ เชนเชคเชพ (เชนเชตเซ เชเซเช เชเชตเซเช เชเชฐเชคเซเช เชจเชฅเซ, เชเชฐเซเช?), เช เชจเซ "เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช" เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชธเซเชเชจเซเชกเชจเซ เชธเชฎเชฏ เชฒเชพเชเชคเซ เชนเชคเซ. เชนเชตเซ เชคเชฎเชพเชฐเซ เชฎเชฐเซเช เชตเชฟเชจเชเชคเซ เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชธเซเชตเชฟเชงเชพ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเช เชธเซเชงเซ เชชเชนเซเชเชเชตเชพ เชฎเชพเชเซ เชฒเชพเชเชฌเซ เชธเชฎเชฏ เชฐเชพเชน เชเซเช.
เช เชชเชพเชฅเชจเซ เชเช เชญเชพเช เชกเซเชเชฐ เชเชฎเซเช เชฌเชจเชพเชตเซ เชฐเชนเซเชฏเซ เชเซ. เชเซเชเชฒเซเชเชตเชพเชฐ เชเชธเซเชฎเซเชฌเชฒเซ เชฎเชฟเชจเชฟเชเซ เชธเซเชงเซ เชเชพเชฒเซ เชเซ, เชเซเชเชฒเซเชเชตเชพเชฐ เชฆเชธ เชฎเชฟเชจเชฟเช, เชเซเชจเซ เชญเชพเชเซเชฏเซ เช เชธเชพเชฎเชพเชจเซเชฏ เชเชนเซ เชถเชเชพเชฏ. เช เชฒเซเชเชฎเชพเช, เช เชฎเซ เชเช เชธเชฐเชณ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฒเชเชถเซเช เชเซเชจเซ เช เชฎเซ เชเช เชเชฌเซเชฎเชพเช เชชเซเชเซเช เชเชฐเซเชถเซเช, เชฌเชฟเชฒเซเชกเชจเซ เชเชกเชชเซ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฃเซ เชชเชฆเซเชงเชคเชฟเช เชฒเชพเชเซ เชเชฐเซเชถเซเช เช เชจเซ เช เชชเชฆเซเชงเชคเชฟเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ เชคเซเชจเซ เชเซเชเชเชพเช เชเซเชเชถเซเช.
เช
เชฎเชจเซ เชฎเซเชกเชฟเชฏเชพ เชตเซเชฌเชธเชพเชเชเซเชธ เชฌเชจเชพเชตเชตเชพ เช
เชจเซ เชธเชชเซเชฐเซเช เชเชฐเชตเชพเชฎเชพเช เชธเชพเชฐเซ เช
เชจเซเชญเชต เชเซ:
เช เชฎเซ GitLab เชฎเชพเช เชเชฎเชพเชตเช เชเชฐเซเช เชเซเช. เช เชฎเซ เชเชฌเซเช เชเชเชคเซเชฐเชฟเชค เชเชฐเซเช เชเซเช, เชคเซเชฎเชจเซ GitLab เชฐเชเชฟเชธเซเชเซเชฐเซเชฎเชพเช เชฆเชฌเชพเชฃ เชเชฐเซเช เชเซเช เช เชจเซ เชคเซเชฎเชจเซ เชเชคเซเชชเชพเชฆเชจ เชฎเชพเชเซ เชฌเชนเชพเชฐ เชชเชพเชกเซเช เชเซเช. เช เชธเซเชเชฟเชฎเชพเช เชธเซเชฅเซ เชฒเชพเชเชฌเซ เชตเชธเซเชคเซ เช เชเชฎเซเช เชเชธเซเชฎเซเชฌเชฒ เชเชฐเชตเชพเชจเซ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ: เชเชชเซเชเชฟเชฎเชพเชเชเซเชถเชจ เชตเชฟเชจเชพ, เชฆเชฐเซเช เชฌเซเชเชเชจเซเชก เชฌเชฟเชฒเซเชกเชฎเชพเช 14 เชฎเชฟเชจเชฟเชเชจเซ เชธเชฎเชฏ เชฒเชพเชเซเชฏเซ.
เช เชเชคเซ, เชคเซ เชธเซเชชเชทเซเช เชฅเช เชเชฏเซเช เชเซ เช เชฎเซ เชนเชตเซ เช เชฐเซเชคเซ เชเซเชตเซ เชถเชเซเช เชจเชนเซเช, เช เชจเซ เช เชฎเซ เชเชเซเชคเชฟ เชเชฐเชตเชพ เชฌเซเช เชพ เชเซ เชถเชพ เชฎเชพเชเซ เชเชฌเซเช เชเชเชคเซเชฐเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชเชฒเซ เชธเชฎเชฏ เชฒเชพเชเซ เชฐเชนเซเชฏเซ เชเซ. เชชเชฐเชฟเชฃเชพเชฎเซ, เช เชฎเซ เชเชธเซเชฎเซเชฌเชฒเซเชจเซ เชธเชฎเชฏ 30 เชธเซเชเชเชก เชธเซเชงเซ เชเชเชพเชกเชตเชพเชฎเชพเช เชธเชซเชณ เชฅเชฏเชพ!
เช เชฒเซเช เชฎเชพเชเซ, เชฐเซเชฎเชพเชเชจเซเชกเชฐเชจเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชธเชพเชฅเซ เชฌเชเชงเชพเชฏเซเชฒ เชจ เชฐเชนเซเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เชเชพเชฒเซ เชเซเชฃเซเชฏ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเชตเชพเชจเซเช เชเชฆเชพเชนเชฐเชฃ เชเซเชเช. เชคเซ, เชเชพเชฒเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเซเช:
ng n app
เชคเซเชฎเชพเช PWA เชเชฎเซเชฐเซ (เช เชฎเซ เชชเซเชฐเชเชคเชฟเชถเซเชฒ เชเซเช):
ng add @angular/pwa --project app
เชเซเชฏเชพเชฐเซ เชเช เชฎเชฟเชฒเชฟเชฏเชจ เชเชจเชชเซเชเชฎ เชชเซเชเซเชเซ เชกเชพเชเชจเชฒเซเชก เชฅเช เชฐเชนเซเชฏเชพเช เชเซ, เชคเซเชฏเชพเชฐเซ เชเชพเชฒเซ เชเชพเชฃเซเช เชเซ เชกเซเชเชฐ เชเชฎเซเช เชเซเชตเซ เชฐเซเชคเซ เชเชพเชฎ เชเชฐเซ เชเซ. เชกเซเชเชฐ เชเชชเซเชฒเซเชเซเชถเชจเชจเซ เชชเซเชเซเช เชเชฐเชตเชพเชจเซ เช เชจเซ เชคเซเชจเซ เชเชจเซเชเซเชจเชฐ เชคเชฐเซเชเซ เชเชณเชเชพเชคเชพ เช เชฒเช เชตเชพเชคเชพเชตเชฐเชฃเชฎเชพเช เชเชฒเชพเชตเชตเชพเชจเซ เชเซเชทเชฎเชคเชพ เชชเซเชฐเซ เชชเชพเชกเซ เชเซ. เช เชฒเชเชคเชพ เชฎเชพเชเซ เชเชญเชพเชฐ, เชคเชฎเซ เชเช เชธเชฐเซเชตเชฐ เชชเชฐ เชเชเชธเชพเชฅเซ เชเชฃเชพ เชเชจเซเชเซเชจเชฐ เชเชฒเชพเชตเซ เชถเชเซ เชเซ. เชเชจเซเชเซเชจเชฐ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชเชฐเชคเชพเช เชเซเชฌ เชนเชณเชตเชพ เชนเซเชฏ เชเซ เชเชพเชฐเชฃ เชเซ เชคเซเช เชธเชฟเชธเซเชเชฎ เชเชฐเซเชจเชฒ เชชเชฐ เชธเซเชงเชพ เช เชเชพเชฒเซ เชเซ. เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชธเชพเชฅเซ เชเชจเซเชเซเชจเชฐ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ, เช เชฎเชพเชฐเซ เชธเซเชชเซเชฐเชฅเชฎ เชเช เชเชฎเซเช เชฌเชจเชพเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เชเซเชฎเชพเช เช เชฎเซ เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเชฐเซเชฐเซ เชเซ เชคเซ เชฌเชงเซเช เชชเซเชเซเช เชเชฐเซเชถเซเช. เช เชจเชฟเชตเชพเชฐเซเชฏเชชเชฃเซ, เชเชฌเซ เช เชซเชพเชเชฒ เชธเชฟเชธเซเชเชฎเชจเซ เชจเชเชฒ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชกเซเชเชฐเชซเชพเชเชฒ เชฒเซ:
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 MB เชเชฐเชคเชพเช 409 KB เชเชฃเซเช เชธเชพเชฐเซเช เชเซ. เช เชฎเซ เชเชฎเซเชเชจเซเช เชเชฆ เชชเชฃ 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 เชธเซ. เชเซ เชคเซ เชเซเชฌ เช เชญเชพเชเซเชฏเซ เช เชฌเชฆเชฒเชพเชฏ เชคเซ เชฆเชฐ เชตเชเชคเซ เช
เชตเชฒเชเชฌเชจ เชถเชพ เชฎเชพเชเซ เชชเซเชจเชเชธเซเชฅเชพเชชเชฟเชค เชเชฐเชตเซเช? เชเชพเชฒเซ เชเชพเชฃเซเช เชเซ เชคเซเช เชเซเชฎ เชเซเชถ เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชจ เชนเชคเชพ. เชฎเซเชฆเซเชฆเซ เช เชเซ เชเซ เชกเซเชเชฐ เชเชฎเชพเชจเซเชก เช
เชจเซ เชคเซเชจเซ เชธเชพเชฅเซ เชธเชเชเชณเชพเชฏเซเชฒ เชซเชพเชเชฒเซ เชฌเชฆเชฒเชพเช เชเซ เชเซ เชเซเชฎ เชคเซ เชเซเชตเชพ เชฎเชพเชเซ เชธเซเชคเชฐ เชฆเซเชตเชพเชฐเชพ เชธเซเชคเชฐ เชคเชชเชพเชธเชถเซ. เชเซเชฅเชพ เชชเชเชฒเชพ เชชเชฐ, เช
เชฎเซ เช
เชฎเชพเชฐเชพ เชชเซเชฐเซเชเซเชเซเชเชจเซ เชฌเชงเซ เชซเชพเชเชฒเซเชจเซ เชจเชเชฒ เชเชฐเซเช เชเซเช, เช
เชจเซ เชคเซเชฎเชพเชเชฅเซ, เช
เชฒเชฌเชคเซเชค, เชซเซเชฐเชซเชพเชฐเซ เชเซ, เชคเซเชฅเซ เชกเซเชเชฐ เชซเชเซเชค เช เชธเซเชคเชฐเชจเซ เชเซเชถเชฎเชพเชเชฅเซ เช เชจเชนเซเช, เชชเชฃ เชชเชเซเชจเซ เชฌเชงเซ เชซเชพเชเชฒเซ เชชเชฃ เชฒเซ เชเซ! เชเชพเชฒเซ 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 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