αα»ααααααααααααααα·ααααα½αα αΌαααααΎαααΆαααα·α αααα»ααααααααααα»αα’αααααααααααααα»αααααΆα αα·α CI/CD ααΆαααααΌααααααααααΆαααΎααααΈααααααΈααΆαααααααααΆα α·ααααα ααΆααααΆαααααΎααααα αα·αααΆαα ααα αΆαα ααΈαα»αα’αααα’αΆα αααα»αα―αααΆαααααΈααΆαααα FTP (ααααΆαααααΆααααΆααααααΎααΆαααααααααα?) α αΎαααααΎαααΆα "ααΆαααΆαααααααΆα" α αααΆααααααα»ααααΆααα·ααΆααΈα α₯α‘αΌαβααα α’αααβααααΌαβαααααΎαβααααΎβαααα αΌαβααααΆ α αΎαβαααα αΆαβααααααβααΌαβαααααΆααβαα»αααΆαβαααβα’αΆα βααΆαβαααβα’αααβααααΎα
ααααααα½αααααααΌααααααΊααΆααααΆαααΌαααΆα Docker α αααβααααβααΆαβαα½αβαα»αβααΆαβαααβαααβαα½αβααΆααΈ αα½αβααΆαβααΆααβαα·αβααΆααΈ αααβαα·ααΆαβα α βααΆβααααααΆβααΆααα αα αααα»αα’αααααααα ααΎαααΉαααΎααααααααα·ααΈααΆαααααα½α αααααΎαααΉαααΆαααααα»αααΌαααΆααα½α α’αα»αααααα·ααΈααΆαααααααΆα αααΎαααΎααααΈαααααΎαααααΏαααααΆααααααΎα αα·αααΎαααΆααα»ααααααααααΆααααααααααα·ααΈααΆαααααααΆαααααααααΎαααΆαα
ααΎαααΆααααα·αααααααα’αααα»αααΆααααααΎα αα·αααΆααααααα αααααααααααααααααααααααΆαα
ααΎαααΆαααααααΆααα GitLab α ααΎααααααΌαααΌαααΆα αα»ααα½αααΆαα GitLab Registry α αΎαααααααΆα αααα ααα·αααααα ααΏαααααααα»ααααα»ααααααΈαααααΊααΆααααα»αααΌαααΆαα α§ααΆα αααα αααβααααΆαβααΆαβαααααΎαβααααα·αααααΆα ααΆαβαααααΎαβαααααβααΆααααααβααΈαα½ααβααΆαβα αααΆαβααα 14 ααΆααΈα
αα ααΈαααα αα ααΆα αααΆααααΆααΎααα·αα’αΆα ααααα ααααααααααα α αΎαααΎαα’αααα»αα α»αααΎααααΈααααΌαα ααα»αααααΌαααΆαααΆαααααα αααΆααααααΌααααα»αααΆααααααΌαα ααΆαααααα ααΎαααΆαααΆααααααααααααααΆααα‘αΎαααααααΉα 30 αα·ααΆααΈ!
αααααΆααα’αααααααα ααΎααααΈαα»αα±ααααΆααααΆααααααΉαααα·ααααΆααααααααααα·ααΈααααΉα ααΌααααα‘ααααΎαα§ααΆα αααααααΆαααα‘αΎααααααα·ααΈ Angular αααα ααΌα ααααααΌααααααΎααααααα·ααΈααααααΎαα
ng n app
αααααα PWA αα ααΆ (ααΎαααΈαα ααααΎα)α
ng add @angular/pwa --project app
ααααααααααααα αα npm αα½αααΆααααα»αααααΌαααΆαααΆααα ααΌαααααααααααΈαααααααααΌαααΆα docker ααααΎαααΆαα Docker αααααααααααΆααααα»αααΆαααα ααα αααααααα·ααΈ αα·αααααΎαααΆααα½αααΆαααα»αααα·ααΆααΆαααΆα αααααΆαααΈααα α ααΆαα»αααΊαααα α’ααα»αα ααααααΆαα―αα α’αααα’αΆα ααααΎαααΆααα»αααΊαααααΆα αααΎααααα»ααααααααΆαααααΆαα ααΎαααΆαααΈααααα½αα αα»αααΊαααααΊααααΆαααΆααααΆαααΈααα·αααα·α αααααααΆααααΎαααΆααααααααΆαααα ααΎααΊαααααααααααα ααΎααααΈααααΎαααΆααα»αααΊαααααΆαα½ααααααα·ααΈααααααΎα ααααΌαααΎαααααΌααααααΎαααΌαααΆααααααΎαααΉαααα ααα ααα’αααΈααααααααΆααααα αΆαααΆα ααααααΆαααααααα·ααΈααααααΎαααΎααααΈααααΎαααΆαα ααααΆααααΌαααΆαααΊααΆα αααΆααα ααααααααααααααα―αααΆαα α§ααΆα ααααα Dockerfileα
FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
Dockerfile ααΊααΆαααα»αααααΆαααααΆαα αααααααΎαα½αααΆααΈαα½αα Docker ααΉααααααΆαα»αααΆαααααΆααααααΌααα αααα»αααααααααα―αααΆα α αΎαααΆααααΆααααΎαα½αααΆαα ααΎα―αααΆααα»αα αααα»αααΈαα½αααααααΎααααααΆααααααΆαααααα½αα α αΎαααΌαααΆααααααΆααααα ααααΊαααααΆαααα½ααααα αΌαααααΆα
α’αααΈαααααααΆαααααααααΌαααΉαα αααααΆαα Docker ααΈαα½ααα’αΆα αααα»ααα·ααααααααΆαα ααααα·αααΎααααΆαα’αααΈααΆαααααΆααααααΌαα αΆααααΆααααΈααΆαααααΆαααΆα α»αααααα ααααααα½αα±ααααΆαααααα·ααααα·ααΆααααααααΆααα docker ααΉααααααααΆαααααααααααα½α ααΆααααα α αααααΆαααΆαααΎαα‘αΎαααααααΆααααααααΏαααΆααααααΉαααΎαα‘αΎααααααΆαααΆαααααΎααααΆααααααΆαααααααΆαα αα αααααΆααααααΏαααΆαααα ααΎαααΉαααα α·ααααα»αααΆααααΆαα·αααα ααααααΆααααααΎαααΌαααΆαααΆαα½αααΉαααααΆαααααααΆαααααααααααα½α ααΆααααα α ααΌα ααααααΆααα αΆα α α
- ααΎααα»αααΌαααΆααααα»αααΌαααααΆα ααΎααααΈαα»αα±ααααααΎαααΆαααΈαα»ααααααΆαααααααΆαααΆαααααα
docker rmi $(docker images -q)
- ααΎαααΎαααααΎαααΆαααΆααααααΆααΎαααααΌαα
time docker build -t app .
- ααΎαααααΆααααααΌαα―αααΆα src/index.html - ααΎαααααΎααααΆααααΆαααΆαααΆαααααα’αααααααααααααα·ααΈα
- ααΎαααααΎαααΆαααΆαααΆααααααΆααΎαααΈααΈαα
time docker build -t app .
ααααα·αααΎααα·ααααΆααααααΆααααΌαααΆαααΆααααααααΌαααΆααααααααααΉαααααΌα (ααααααααΎααΆααΆαααααα) ααααα ααααααααΆαααααΆαααΆα αΆααααααΎα Docker ααΉαααΆαααααΆαααααααΆααααΆα αααΎααα ααΎααααα αααα½α α αΎαα ααΆααα·α αα ααααααΎαααΊαααααΈααααααααΎααααΆαααααααΆααααΎααααΈα±ααααΆαααααΆαααΆααααΎαααΆαααΏαααΆααααα’αΆα ααααΎαα ααΆαα αααααΆαααΎαααααααααΆααΆαααααΎαααΆαααΆαααααΆαααΆαααααααΆαααααΆαααααααΆααααΎαα‘αΎαααααααααα»αααααβααΆααΎαααΈαα½αβααΌα ααααα αΎα ααΎαα’αΆα αα·αα’αΎααΎααΆααΎαααααααΌααααααΊαααα»ααααΆα αα αααα»αααΆαααααΎααααα ααΆαααααΎαααΆαααΈααΈαααααΆαααΆααααααΆαααΆααααααΆαααααααΆααααΎα αα ααααααααααΆαααααααΆααααααΌαααΆααααα α‘αΎα α αΎαααΎαααααααααα½ααα½α ααΆααααΎααααΈαα»αααααααααΎαα αααααΆαααΆαααΆααααα αααααΉαααααααααΉααααααΆαααααααΆαααΆααααααααΌααααααα
α αΌαααΆαα 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
αα»αααααααααΎα Docker ααα―αααΆαααΆααα’αααα
αααα»αααα·αααα
αα
α»αααααα α αΎααααααΌαααΆαα
αααα·αααααααΆα Sending build context to Docker daemon 409MB
. ααα·ααααΆααααααααΌαααΆααααααΆααααΆα’αΆαα»αααααα
α»ααααααα
ααααααΆααααααααΆααΆααααα αααα»αααααΈααααααΎα αααααΊααΆαααα
αα
α»αααααα - ".", - α αΎα Docker α’αΌαα’αααΈααααααααΆααααααΎαααΆααα
αααα»ααααααα 409 MB ααΊα
αααΎαα ααααα·αααΈαααααα½ααα»αααΆα
ααΆαααΆαααααααααα·αα
ααΎααααΈααΆαααααααααα·αα ααΆααααααΎαααΈαα α¬ααΆααα―αααΆαααΆααα’αααααααααΌαααΆααααααΆααααΆααα½αααααα»αααααΆαα αααα»αααααΆα ααααα‘αααα½α α αΎαα ααα’α»αααα·αα docker αα ααΆαααααααα ααααααα ααααΆαα·ααααααααΆααααα½ααα ααΌα ααααααΆα’αΆα αααααΆααααααΈααΎααααα α’αααΈααααα·ααα½αα’αΌαα αΌααα αααα»αααα·ααα ααΎααααΈααααΎααΌα αααααΆααα―αααΆα .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
αα
αααα»α Dockerfile α αααα»αααααΈααααααΎα ααΎααααα»αααααΎααΌαααΆααααααΆαααΌαααααΆαααΎ Ubuntu αααααΆαααα‘αΎα nodejs αα½α
α αΎαα α αΎαααΆααΆααααααα ...
$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB
... ααααΎααααα½αααΈα αααΆααα α’αααα’αΆα ααΆαααααααααααα·αααα‘αααααΆαααααΆαααααααααΎααΌαααΆααααααΆαααΌαααααΆαααΎ Alpine Linux α Alpine ααΊααΆααΈαα»α ααΌα ααΆααα ααΌαααΆα docker αααααΆαα nodejs ααα’ααααΎα’αΆαααααααΆαααααααααααΉααα 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
ααΎαβααααΌαβααα‘αΎαβααααβαα½αβα ααα½αβαααβα αΆαααΆα αβααΎααααΈβαααααΎαβαααααα·ααΈα ααΆα Angular αα·ααααααΎααααααααΆα Python Β―(Β°_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 αα½αα
ααα½ααα
ααΎ nodejs α ααα»ααααααΎαααΉαααααΎα±ααααΆααΆααααααΆααααα½αα ααΆαααΆααααα»αααααΈαααααΆαα’αααα "y" α
ααα½ααα½αα ααααΌαα αΎα! Ynzhynyksy α αααααααΌαααΆαα½α nginx ααΆαα folder α
αΌα 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 αα½αααααααΆαααααααΎαααΆαααα αΆαααΆαααααααααααααΆα ααΎαααΆαα α
α’αααααΈαα½α 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.338s α α ααα»α’αααΈβααΆαβααα‘αΎαβααΆαα’αΆαααααβα‘αΎααα·αβααΆααααα ααααα·αααΎβαα½αααβααααΆααααααΌαβααααβααΆαα? α
αΌαααΎαααααααααααΆα ααα»α’αααΈααΆαααΆαα½ααααα·αααααΌαααΆαααααΆαααααα»αααααΆαααααααΆααα α
ααα»α
αααααΊααΆ Docker ααΉααα·αα·ααααααααΆααααααααααΆαα ααΎααααΈααΎαααΆααΎααΆααααααααΆ αα·αα―αααΆααααααααΆααααΆαα½αααΆααΆαααααΆααααααΌαα¬α’ααα αα
ααα αΆαααΈ XNUMX ααΎαα
ααααα―αααΆαααΆααα’ααααααααααααααααΎα α αΎααααα»αα
αααααα½ααα αα·αααΆααααΆαααΆαααααΆααααααΌα ααΌα
αααα 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 αααα»αααααααααΈαααΆααΈ αα·α 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
. ααΆααα·αααΊααΆαα
αααα»αααΆααα½αααααα»αααααΆαα α»ααααΆααααΆαααΌαααΆαααααααααΉαααΆαααα»ααααααααΆααααΈααααΆααααΆαα
α»ααααααα αααα»αααααΈααααααααΆααααΈαααααΆαααα»αααΉααα·αααααΌαααΆααααα
αΌααααα»αααΌαααΆαααα ααΌα
ααααα αΎα αα
αααααααΎααΌαααΆαα
α»ααααααααΈααΆαααΆαααααα»α Docker ααΉααα·αα’αΆα
ααααααααααααΆαααααααααααα½α
ααΆααααα
ααΎααααΈααΆααααααΌαααΆαααΆαα½α nodejs (ααααΆααααΆαααΆαααα) ααΆαααα ααΎααααΈαααααααΆααααα αΆααα ααΌαααΆαααααα·ααααααααααΌαααΆααααααΎαα‘αΎα $IMAGE_NAME-builder-stage
α αΎαααααΌαααΆααα»ααα
αααα
αα GitHub ααΌα
ααααααΆα’αΆα
ααααΌαααΆαααααΎαα
αααα»αααΆαααααΆαααΆααΆαααααααααΆααααΆαααααααααΆαααααααΆααα
αααααααΆααα‘αΎαααα»αααααΌαααΆαααΆαααααααααααααΉααα½αααΆααΈαααααα α αααΆαααααααααααΆααΈααΎααααΈααΆαααΌαααΆααα»ααα
ααΆααααα»αααΆαα»α
αα·ααΈαα½ααααααΎααααΈαααααααΆααααα αΆααααααΆαααααααΆαα 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
...
αααα»αα§ααΆα αααααααααΎα αααααααΆααΆαααααα·αααα α»ααα ααα»ααααααΌαααΆααααααΆαααΆααααααΆαα»αα’αΆα ααΆααααααααα ααααα·αααΎα’αααααΆαααααααααΆα αααΎα α αΎαααααΌαααα‘αΎαααΆαα’αΆαααααααΌα ααααΆαα αααα»ααα½αααΆααΈαα½ααα
ααΎαααΆααα·αα·αααααΎααα·ααΈααΆαααααααΆα αααΎααααααΆααααΆααααααΎαααααΏαααααΆααααααΎαααΌαααΆα docker α ααααα·αααΎα’αααα ααα±ααααΆαααΆαααααααΆαααααΎαααΆαααΏα ααΌαααΆαααααααααΎααΆαα αααα»αααααααααααα’αααα
- ααΆαααααααααα·αα;
- ααΆαααααΎααααΆααααΌαααΆαααααΌα ;
- ααΆααα½αααααα»αααααΆαα α»ααααΆααααΆα;
- ααΆαααααΆααααααΌαααααΆααααααΆαααααΆααα αααα»α Dockerfile ααΎααααΈααααΎα±ααααΆαααααΎααααΆααααααΆαααααααΆααααααααααααααα·αααααΆαα
- ααα‘αΎαααααΆαααααααΆαααα αααα»ααααααααα CI/CD;
- ααΆααααααΎαααΌαααΆααααα
αααα»ααααααΉαααΆα§ααΆα αααααΉαααααΎα±ααααΆααΆααααα
αααΆααα’αααΈααααααα Docker ααααΎαααΆα α αΎαα’αααααΉαα’αΆα
ααααααα
ααΆααααααααααΆαααΆααα±ααααααΎααααΆααααααα’αααααΆαααα’αααα»αα ααΎααααΈαααααΆαα½αα§ααΆα αααααΈα’ααααα ααααΆαααα½αααααΌαααΆααααααΎαα‘αΎα
ααααα: www.habr.com