แกแแแแ แคแฃแแฅแชแแ แจแแแ แฌแแ แแแแแแจแ, แ แแฃแแ แแ แแแกแขแ แแแขแแแแกแ แแ CI/CD-แแก แแฆแแแแจแ, แแแแ แแแแ แแแกแแแแแแ แแแแแแแฃแแแแแแแ แขแแกแขแแแแแแ แแ แแแฌแแแแแแแแ. แแแ แ, แแฅแแแ แจแแแแซแแแ แแฎแแแ แคแแแแแแแก แแขแแแ แแแ FTP-แแก แกแแจแฃแแแแแแ (แแแแก แแฆแแ แแแแ แแแแแแแก, แแ แ?) แแ "แแแแแแแแแแก" แแ แแชแแกแก แฌแแแแแ แแแกแญแแ แแ. แแฎแแ แแฅแแแ แฃแแแ แจแแฅแแแแ แจแแ แฌแงแแแก แแแแฎแแแแ แแ แแแแฎแแแก แแแแแแแแ แคแฃแแฅแชแแแก แแแแฎแแแ แแแแแแแ แแแกแแแแก.
แแ แแแแก แแแฌแแแแ Docker แแแแแกแแฎแฃแแแแแก แแแแแ. แจแแแ แแแ แฎแแ แฌแฃแแแแก แแ แซแแแแแแ, แฎแแ แแแแฃแ แฌแฃแแก, แ แแกแแช แซแแแแแ แจแแแซแแแแ แแฃแฌแแแแ แแแ แแแแฃแ แ. แแ แกแขแแขแแแจแ แฉแแแ แแแแฆแแแ แแแ แขแแ แแแแแแแชแแแก, แ แแแแแกแแช แจแแแคแฃแแแแ แกแฃแ แแแจแ, แแแแแแแงแแแแแ แ แแแแแแแแ แแแแแแก แแจแแแแแแแแแก แแแกแแฉแฅแแ แแแแแ แแ แแแแแแฎแแแแแ แแ แแแแแแแแแก แแฃแจแแแแแก แแแฃแแแกแแแก.
แฉแแแ แแแแฅแแก แแแ แแ แแแแแชแแแแแแ แแแแแ แแแแกแแแขแแแแก แจแแฅแแแแกแ แแ แแฎแแ แแแญแแ แแก แกแแฅแแแจแ:
แฉแแแ แแแแแแแแแกแแแ GitLab-แจแ. แฉแแแ แแแแ แแแแแ แกแฃแ แแแแแก, แแแงแแแแแ แแแ GitLab Registry-แจแ แแ แแแแฃแจแแแแแ แแแ แฌแแ แแแแแแจแ. แแ แกแแแจแ แงแแแแแแ แแ แซแแแ แ แแ แแ แแก แกแฃแ แแแแแแก แแฌแงแแแ. แแแแแแแแแ: แแแขแแแแแแชแแแก แแแ แแจแ, แแแแแแฃแแ backend-แแก แแจแแแแแแก 14 แฌแฃแแ แแแกแญแแ แแ.
แแแแแก แแแแ แแแ, แ แแ แแกแ แชแฎแแแ แแแ แแฆแแ แจแแแแแซแแ แแ แแแแกแฎแแแแ แแแแก แแแกแแ แแแแแแ, แแฃ แ แแขแแ แกแญแแ แแแแแแ แแแแแแ แกแฃแ แแแแแแก แจแแแ แแแแแ. แจแแแแแแ, แฉแแแ แจแแแซแแแแ แจแแแ แแแแก แแ แแแก แจแแแชแแ แแแ 30 แฌแแแแแแ!
แแ แกแขแแขแแแกแแแแก, แแแแกแแแแแก, แ แแ แแ แแงแแก แแแแแฃแแ Reminder-แแก แแแ แแแแกแแแ, แแแแแ แจแแแฎแแแแ แชแแ แแแแ Angular แแแแแแแชแแแก แแฌแงแแแแก แแแแแแแแก. แแกแ แ แแ, แแแแแ แจแแแฅแแแแ แฉแแแแ แแแแแแแชแแ:
ng n app
แแแแแแขแแ แแแก PWA (แฉแแแ แแ แแแ แแกแฃแแแแ แแแ แ):
ng add @angular/pwa --project app
แกแแแแ แฎแแแแ แแแแแแแ npm แแแแแขแแก แฉแแแแขแแแ แแแ, แแแแแ แแแแ แแแแแ, แแฃ แ แแแแ แแฃแจแแแแก แแแแแ แแก แกแฃแ แแแ. Docker แฃแแ แฃแแแแแงแแคแก แแแแแแแชแแแแแก แจแแคแฃแแแแก แแ แแแแ แแแจแแแแแก แจแแกแแซแแแแแแแแก แแแแแแ แแแฃแ แแแ แแแแจแ, แ แแแแแกแแช แแฌแแแแแ แแแแขแแแแแ แ. แแแแแแชแแแก แฌแงแแแแแแ, แจแแแแซแแแแ แแ แแแ แแฃแแแ แแแฃแจแแแ แแ แแแแแ แแแแขแแแแแ แ แแ แ แกแแ แแแ แแ. แแแแขแแแแแ แแแ แแแ แขแฃแแแฃแ แแแแฅแแแแแแ แแแแ แแ แแกแฃแแฃแฅแแ, แ แแแแแ แแกแแแ แฃแจแฃแแแแ แกแแกแขแแแแก แแแ แแแแ แแฃแจแแแแแ. แฉแแแแ แแแแแแแชแแแ แแแแขแแแแแ แแก แแแกแแจแแแแแ, แฏแแ แฃแแแ แจแแแฅแแแแ แกแฃแ แแแ, แ แแแแแจแแช แจแแแคแฃแแแแ แงแแแแแคแแ แก, แ แแช แแฃแชแแแแแแแแ แฉแแแแ แแแแแแแชแแแก แแแกแแจแแแแแ. แแ แกแแแแแแ, แกแฃแ แแแ แแ แแก แคแแแแฃแ แ แกแแกแขแแแแก แแกแแ. แแแแแแแแแ, แแแฆแแ Dockerfile:
FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
Dockerfile แแ แแก แแแกแขแ แฃแฅแชแแแแแก แแแแ แแแ; แแแแแแฃแแ แแแแแแแแก แแแแแแแแแ, Docker แจแแแแแฎแแแก แชแแแแแแแแแก แคแแแแฃแ แกแแกแขแแแแจแ แแ แแแแแคแแ แแแก แแแ แฌแแแแแ. แแแแแแฃแแ แแฃแแแ แฅแแแแก แกแแแฃแแแ แคแแแแก. แแ แแแกแ แฃแแแแฃแแ แกแฃแ แแแ แแ แแก แคแแแแแ แแ แแแ แแแแ แแแแแแแฃแแ.
แ แ แแแแจแแแแแแแแแแ แแชแแแแ: Docker-แแก แแแแแแฃแ แคแแแแก แจแแฃแซแแแ แฅแแจแแ แแแ. แแฃ แแ แแคแแ แ แจแแชแแแแแ แแแแ แแจแแแแแแก แจแแแแแ, แแแจแแ แแ แซแแแแแแก แจแแกแ แฃแแแแแก แแแชแแแแ, แแแแแ แ แแแแฆแแแก แแแ แคแแแแก. แแแแแแแแ แแจแแแแแแก แกแแฉแฅแแ แแก แซแแ แแแแแ แแ แแ แแแแแแ แแแแแฃแแ แแฅแแแแ แฅแแจแแก แแแแแงแแแแแแ, แแจแแแแแแก แกแแฉแฅแแ แแก แแแแแแแแกแแก แงแฃแ แแแฆแแแแก แแแแแฅแชแแแ แแแแแ แแขแฃแแแ แแแ แฅแแจแแ แแแแแกแแฎแฃแแแแแก แแแแแแก. แแกแ แ แแ, แแขแแแแแ แแแแ:
- แฉแแแ แแจแแแ แกแฃแ แแแแแก แแแแแแฃแ แแ, แ แแแ แฌแแแ แแแจแแแแแแแ แแ แแแแฅแแแแแก แขแแกแขแแ.
docker rmi $(docker images -q)
- แฉแแแ แแแ แแแแแ แแแฌแงแแแ แแจแแแแแแแแแก.
time docker build -t app .
- แแชแแแแ src/index.html แคแแแแก - แแแแแซแแแ แแ แแแ แแแแกแขแแก แแฃแจแแแแแก.
- แแจแแแแแแแแแก แแแแ แแ แแแฌแแ แแแแแ.
time docker build -t app .
แแฃ แกแฃแ แแแแแแก แจแแกแแฅแแแแแแ แแแ แแแ แกแฌแแ แแ แแ แแก แแแแคแแแฃแ แแ แแแฃแแ (แแแฌแแ แแแแแแ แแแแก แจแแกแแฎแแ แฅแแแแแ), แแแจแแ แ แแแแกแแช build แแแแฌแงแแแ, Docker-แก แฃแแแ แแฅแแแแ แฅแแจแแก แแแแแฃแแ แแแ แขแแ. แฉแแแแ แแแแชแแแแ แแแกแฌแแแแแ แ แแแแ แแแแแแแงแแแแ แฅแแจแ แแกแ, แ แแ แแจแแแแแแแแ แ แแช แจแแแซแแแแ แกแฌแ แแคแแ แแแฎแแแก. แแแก แจแแแแแ, แ แแช แฉแแแ แแแแแ แแฃแแแแ, แ แแ แฅแแจแแก แแแ แแจแ build-แแก แแแจแแแแ แแฎแแแแ แแ แแฎแแ แฎแแแแ - แแแ แแแแแแ แฏแแ แแ, แแแแขแแ แจแแแแแซแแแ แฃแแฃแแแแแแแงแแ แ แแแแแแแ แแแแ แแงแ แแก แแแ แแแแ แจแแแแฎแแแแ. แขแแกแขแแแจแ แฉแแแแแแแก แแแแจแแแแแแแแแแ แแแแกแขแ แฃแฅแชแแแก แแแแ แ แแแจแแแแ, แ แแแแกแแช แฅแแจแแแ แฃแแแ แแแฎแฃแ แแแฃแแแ แแ แแแแ แแแ แ แแแแแแแชแฎแแ แฉแแแแ แแแแชแฎแแแ แ. แแฃแแชแ, แแแแแแ แแ แ แฉแแแ แแกแแแ แแแแฅแแแแแแก แแแ แแแ แแจแแแแแแแแแแ.
แแแแแ แฉแแแแแ แแแแแ แแฆแฌแแ แแแ Dockerfile แแ แแแฅแขแแก แกแแฅแแฆแแแแแจแ แแ แแแแแฌแงแแ build. แงแแแแ แฉแแแแแแแแแแ แจแแแฃแแจแฃแแแ แแแแฎแแแก แกแแแแ แขแแแแกแแแแก.
$ 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
. build แแแแขแแฅแกแขแ แแแแแแแแฃแแแ, แ แแแแ แช build แแ แซแแแแแแก แแแแ แแ แแฃแแแแขแ. แฉแแแแก แจแแแแฎแแแแแจแ, แแก แแ แแก แแแแแแแแ แ แแแ แแฅแขแแ แแ - โ.โ, - แแ Docker แแแแแแแ แแแก แงแแแแแคแแ แก, แ แแช แแแแฅแแก แแ แกแแฅแแฆแแแแแจแ. 409 MB แแแแ แแ: แแแแ แแแคแแฅแ แแ แ แแแแ แแแแแแแกแฌแแ แแ.
แแแแขแแฅแกแขแแก แจแแแชแแ แแแ
แแแแขแแฅแกแขแแก แจแแกแแแชแแ แแแแแ, แแ แกแแแแแก แแ แ แแแ แแแแขแ. แแ แแแแแแแกแแ แแกแแแแแแแกแแแแก แกแแญแแ แ แงแแแแ แคแแแแ แชแแแแ แกแแฅแแฆแแแแแจแ แแ แแแฃแแแแแ แแแแแ แแก แแแแขแแฅแกแขแ แแ แกแแฅแแฆแแแแแแ. แแก แจแแแซแแแแ แงแแแแแแแแก แแ แแงแแก แแแกแแฎแแ แฎแแแแแ, แแแแขแแ แจแแกแแซแแแแแแแ แแแแแแแแแแกแแแแก แแแแฃแกแขแแแ: แ แ แแ แฃแแแ แแงแแก แฉแแแ แแฃแแ แแแแขแแฅแกแขแจแ. แแแแกแแแแแก แฉแแแแ .dockerignore แคแแแแ แแ แแแฅแขแจแ แแ แแแฃแแแแแ แ แ แแ แแ แแก แกแแญแแ แ build-แแกแแแแก:
.git
/node_modules
แแ แแแแแ แแแฃแจแแแ build:
$ 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 แแ-แแแ:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 4942f010792a 3 minutes ago 1.38GB
แจแแแแชแแแแ แแแแแ แฃแคแ แ แจแแแแแชแแ แแ แกแฃแ แแแแก แแแแ.
แฉแแแ แแแงแแแแแ แแแแฃแ แก
แกแฃแ แแแแก แแแแแก แแแแแแแแก แแแแแ แแ แแ แแแ แแ แแก แแแขแแ แ แแจแแแแแก แกแฃแ แแแแก แแแแแงแแแแแ. แแจแแแแแก แกแฃแ แแแ แแ แแก แกแฃแ แแแ, แ แแแแแก แกแแคแฃแซแแแแแแช แแแแแแแแ แฉแแแแ แกแฃแ แแแ. แฅแแแแ แคแแแ แแแแแแแแฃแแแ แแ แซแแแแแแ FROM
Dockerfile-แจแ. แฉแแแแก แจแแแแฎแแแแแจแ, แฉแแแ แแแงแแแแแ Ubuntu-แแ แแแคแฃแซแแแแฃแ แกแฃแ แแแก, แ แแแแแกแแช แฃแแแ แแฅแแก แแแแแกแขแแแแ แแแฃแแ nodejs. แแ แแฌแแแแก...
$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB
... แแแแฅแแแก แแแแแแแแขแ. แแฅแแแ แจแแแแซแแแแ แแแแจแแแแแแแแแ แจแแแแชแแ แแ แแแชแฃแแแแ Alpine Linux-แแ แแแคแฃแซแแแแฃแแ แกแฃแ แแแแก แแแแแงแแแแแแ. Alpine แแ แแก แซแแแแแ แแแขแแ แ Linux. แแแแแ แแก แแแแแกแแฎแฃแแแแ nodej-แแแแกแแแแก, แ แแแแแแช แแแคแฃแซแแแแฃแแแ แแแแฃแ แแ, แแฌแแแแก แแฎแแแแ 88.5 แแ. แแแแแ แจแแแชแแแแแ แฉแแแแ แชแแชแฎแแแ แกแฃแ แแแ แกแแฎแแแแจแ:
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
แฉแแแ แฃแแแ แแแแแแแกแขแแแแ แแ แ แแแแแแแแ แ แแ, แ แแช แแฃแชแแแแแแแแ แแแแแแแชแแแก แจแแกแแฅแแแแแแ. แแแแฎ, Angular แแ แแจแแแแแก Python-แแก แแแ แแจแ ยฏ(ยฐ_o)/ยฏ
แแแแ แแ แกแฃแ แแแแก แแแแ แแแแชแ 150 แแ-แแแ:
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 แกแแ แแแ แ nodejs-แแ. แแแแ แแ แฉแแแ แแแแแแแ แขแแแแแ. แแแแแแชแแแแ แ แฃแกแฃแแ แกแแขแงแแ, แ แแแแแกแแช แแฅแแก แแแฎแ แแกแ "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
Dockerfile-แจแ แแแแแแฃแแ แแแแแแแ แแฌแแ แแแแแก แแแแกแฎแแแแแแฃแ build-แแก แกแแคแแฎแฃแ แก. แแแ แแแแก แแแแฃแ แแแแ 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 แแ-แแแ 36 แแ-แแแ แแแแจแแแแแแแแแ แแแชแแ แแแก แแฅแแแแ แแแแแชแฎแแแแก แฌแแ แแแแแแแแ แแแขแแแแก แแ แแก. แแแแ แแ แแแแแ แแแแฃแแ แฃแแแแ แจแแแ แแแแก แแ แแก.
$ 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 แฌแ. แ แแขแแ แฎแแแแฎแแ แแแแแแกแขแแแแ แแ แแแแแแแแแแฃแแแแแแ แงแแแแ แฏแแ แแ, แแฃ แแกแแแ แซแแแแแ แแจแแแแแแ แแชแแแแแ? แแแแ แแแแแ แแแแแ, แ แแขแแ แแ แแฅแแ แจแแแแฎแฃแแ แแกแแแ. แกแแฅแแ แแแแจแแ, แ แแ Docker แคแแแ-แคแแแแ แจแแแแแฌแแแแก, แจแแแชแแแแ แแฃ แแ แ แแ แซแแแแแ แแ แแแกแแแ แแแแแแจแแ แแแฃแแ แคแแแแแแ. แแแแแฎแ แแขแแแแ แฉแแแ แแแแแแแ แแแ แฉแแแแ แแ แแแฅแขแแก แงแแแแ แคแแแแก แแ แแแ แจแแ แแก, แ แ แแฅแแ แฃแแแ, แแ แแก แชแแแแแแแแแ, แแกแ แ แแ, Docker แแ แ แแฎแแแแ แแ แแฆแแแก แแ แคแแแแก แฅแแจแแแแ, แแ แแแแ แงแแแแ แจแแแแแแแจแ! แแแแแ แจแแแแขแแแแ แแชแแ แ แชแแแแแแแแแ 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 แแแแแฌแงแแแขแแก แแแแกแขแ แฃแฅแชแแแกแแแแก, แแแจแแ แแแแแแแแ แแแ Docker แฅแแจแ แจแแแซแแแแ แแงแแก แกแฃแคแแ แแ แแฎแแแ. แแแแแ แก แ แแ แแแแชแแ แแแแแแ แแแแแแชแฎแแแ แ แคแแแแแแก แแแกแแฆแแแแ, แแแแชแแ แแแก แฌแแแ แแจแแแแแฃแแ แกแฃแ แแแ.
แแแแฆแแ GitHub Actions-แจแ แฉแแแแ แแแแแแแชแแแก แแแแแแก แแแแแแแแ. แฉแแแ แแแงแแแแแ แแ แแแแคแแแฃแ แแชแแแก
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
แกแฃแ แแแ แแแ แแแแแ แแ แแแแแแแก GitHub Packages-แจแ แแ แฌแฃแแกแ แแ 20 แฌแแแจแ:
แแฎแแ แแแแแ แจแแแชแแแแแ แแแแกแขแ แฃแฅแชแแ แแกแ, แ แแ แฅแแจแ แแแแแงแแแแแฃแแ แแงแแก แฌแแแ แแจแแแแแฃแ แกแฃแ แแแแแแ แแแงแ แแแแแแ:
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
. แคแแฅแขแแ, แ แแ แแ แแแแแกแแคแแฎแฃแ แแแแ แแกแแแแแแแก แจแแแแแแ แแแฆแแแฃแแ แกแฃแ แแแ แแฅแแแแ แคแแแแแแก แแแแ แแแ แแแแ แแขแแแแแแ. แแ แจแแแแฎแแแแแจแ, แฌแแแ แคแแแแแแก แคแแแแแ แแ แแฅแแแแ แฉแแ แแฃแแ แกแฃแ แแแจแ. แแแแขแแ, แฌแแแ build-แแก แกแแแแแแ แกแฃแ แแแแก แแแแแงแแแแแแกแแก, Docker แแแ แแแแแแก แแแ แคแแแแแก แแแแแกแแฎแฃแแแแแก แแกแแแแแแ nodejs-แแ (แแจแแแแแแแก แแขแแแ). แแ แแ แแแแแแแก แแแแแกแแญแ แแแแ แแฅแแแแแ แจแฃแแแแแฃแ แ แกแฃแ แแแ $IMAGE_NAME-builder-stage
แแ แแแแแแแก GitHub Packages-แแ, แ แแแ แแแกแ แแแแแงแแแแแ แจแแแแแแ build-แจแ แฅแแจแแก แฌแงแแ แแ แจแแแซแแแแ.
แแแแแแแ แจแแแ แแแแก แแ แ แจแแแชแแ แแ แฌแฃแแแแฎแแแแ แแแแ. แแแฎแแแแ แ แฌแฃแแ แแฎแแ แฏแแแ แฌแแแ แกแฃแ แแแแแแก แแกแแฆแแแแ.
แฌแแแแกแฌแแ แ แแแแฃแแแแแแชแแ
Docker-แแก แกแฃแคแแ แฅแแจแแก แแ แแแแแแแก แแแแแญแ แแก แแแแแ แแ แแ แแแแ แแแแแแ แแ แคแแแแก แกแฎแแ Dockerfile-แจแ แแแแแขแแแ, แชแแแแ แแจแแแแแ, แแแแขแแแแแ แแแแก แ แแแกแขแ แจแ แฉแแกแแ แแ แแแกแ แแจแแแแแก แแแแแงแแแแแ.
แฉแแแ แแฅแแแแ แกแแแฃแแแ nodejs แกแฃแ แแแก Angular แแแแแแแชแแแก แจแแกแแฅแแแแแแ. แจแแฅแแแแแ Dockerfile.node แแ แแแฅแขแจแ
FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
แฉแแแ แแแแ แแแแแ แแ แแแงแแแแแ แกแแฏแแ แ แกแฃแ แแแก Docker Hub-แจแ:
docker build -t exsmund/node-for-angular -f Dockerfile.node .
docker push exsmund/node-for-angular:latest
แแฎแแ แฉแแแแก แแแแแแ Dockerfile-แจแ แแแงแแแแแ แแแกแ แฃแแแแฃแ แกแฃแ แแแก:
FROM exsmund/node-for-angular:latest as builder
...
แฉแแแแก แแแแแแแแจแ, แแจแแแแแแก แแ แ แแ แจแแแชแแ แแ, แแแแ แแ แฌแแแแกแฌแแ แแจแแแแแฃแแ แกแฃแ แแแแแ แจแแแซแแแแ แกแแกแแ แแแแแ แแงแแก, แแฃ แแแแ แ แแ แแแฅแขแ แแแฅแแ แแ แแแแแแฃแ แแแแแแแจแ แฃแแแ แแแแแแกแขแแแแ แแ แแแแแ แแแแแแแแแแฃแแแแแแ.
แฉแแแ แแแแแแฎแแแแ แ แแแแแแแแ แแแแแแก แแแแแ แแก แกแฃแ แแแแแแก แแแแแแก แแแฉแฅแแ แแแแก แแแแแแ. แแฃ แแกแฃแ แ, แ แแ แแแแแแแแแ แกแฌแ แแคแแ แแแฎแแแก, แกแชแแแแ แแแแแแงแแแแ แแก แแฅแแแแก แแ แแแฅแขแจแ:
- แแแแขแแฅแกแขแแก แจแแแชแแ แแแ;
- แแชแแ แ แแแแแก แแจแแแแแก แกแฃแ แแแแแแก แแแแแงแแแแแ;
- แแ แแแแแกแแคแแฎแฃแ แแแแ แจแแแ แแแ;
- Dockerfile-แจแ แแแกแขแ แฃแฅแชแแแแแก แแแแแแแแแแ แแแแก แจแแชแแแ แฅแแจแแก แแคแแฅแขแฃแ แแ แแแแแงแแแแแแก แแแแแแ;
- แฅแแจแแก แแแงแแแแแ CI/CD แกแแกแขแแแแแจแ;
- แกแฃแ แแแแแแก แฌแแแแกแฌแแ แ แจแแฅแแแ.
แแแแแ แแแฅแแก, แแแแแแแแ แฃแคแ แ แแแแแแก แแแฎแแแก แ แแแแ แแฃแจแแแแก Docker แแ แแฅแแแ แจแแซแแแแ แแฅแแแแ แแแแแแแแแแก แแแขแแแแแฃแ แแ แแแแคแแแฃแ แแชแแแก. แกแขแแขแแแแแ แแแแแแแแแแแแ แแแแแจแแก แแแแแแ, แจแแแฅแแแ แกแแชแแแ
แฌแงแแ แ: www.habr.com