á ááľ áŁá ᪠áá° áááľ á¨áááŁáą á ááľáŁ á áá ááľáĽáľáĽ áŚááŹáľáľáŤáá˝ áĽá CI/á˛á˛ áááľ ááľáĽáŁ áá° áá°á áĽá ááľá¨áľ áĽá áááŤáᢠá¨áá áá°á á á˛áľ áááá˝á á á¤áá˛á á áŠá ááľáá áá˝áá (á¨áĽááá˛á ááá áá á á áŤá°ááá, áľááá?) áĽá "á¨áá°ááŤáľ" áá°áą á°á¨ááśá˝ ááľáˇá. á áá á¨áá á°áľ áĽáŤá ááá á áĽá áŁá áŞá á°á áááá˝á áĽáľáŞá°ááľ áľá¨áľ á¨á á áá áá á á á ááĽááľá˘
á¨áá ááááľ á áŤá á¨áśá¨á ááľá ááááŁáľ ááᢠá ááłááľ áá áľáĽá°áŁá áá°áááá˝áŁ á ááłáá´á áá áľá á°áááá˝ á¨ááá á˛áá áá á áá°á á á°áĽá áá ፠á áá˝ááᢠá áá á˝áá ááľáĽ áá° ááľá á¨ááá áááá áľá ááá áá°áá áŞáŤá áĽáááľáłáá, áááŁáłáá áááá á áĽá áá´áá˝á áĽáá°ááĽáŤáá, áĽá áĽááá áá´áá˝ áĽáá´áľ áĽáá°áá አáŤááľá ááŠááśá˝ áĽáááá¨áłáá.
á¨áá˛áŤ áľá áŁá˘áŤáá˝á á ááá á áĽá á áá°áá á¨ááľ áĽáŠ áááľ á ááá˘
áá° GitLab á á°ááá°ááᢠááľáá˝á áĽáá°á áľáŁáá ᣠáá° GitLab Registry áĽáááá¸ááá áĽá áá° áááľ áĽáááŤá¸áááᢠá áá áááá ááľáĽ á áŁá á¨á á ááá ááľáá˝á áá°áĽá°áĽ áá. áááłáᥠáŤá áááťá¸áľáŁ áĽáŤááłááą á¨áá áááŁáł 14 á°áá ááľáˇáá˘
á áá¨á¨áťá, áĽá áĽáá°áá ááá áĽáá°ááá˝á ááá˝ áá, áĽá ááľááš ááá°áĽá°áĽ ááá áŤá á áá áĽáá°áá°áą áááá á°áááĽá. á áá¤áąá, á¨áľáĽá°áŁáá áá áá° 30 á°á¨ááľ ááááľ á˝ááá!
ááá ááŁáĽáᣠá¨ááľáłááť á áŤáŁá˘ áá áááá°áłá°áᣠáŁáś á¨Angular áá°áá áŞáŤá á¨áááŁá á ááłáá áĽáááá¨áľá˘ áľááá áá°áá áŞáŤá˝áá áĽááá ááĄ-
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
Dockerfile á¨áááŞáŤáá˝ áľáĽáľáĽ áá; áĽáŤááłááłá¸áá á ááĽáŤáľ, 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
áśá¨á á¨ááááŁáą á ááľ á áá áŁáá á ááľ ááľáĽ áŤááľá áááá áááá˝ ááľáś áá° á˛áá áááŤáᢠSending build context to Docker daemon 409MB
. á¨áááŁáłá á ááľ ááááŁáł áľááá á¨áá¨á¨áťá áá¨áŤá¨áŞáŤ áá á°áááżá. á áĽá áá᳠ᣠáá
á¨á áá áá፠áá - â.â ᣠ- áĽá Docker á áá
á áá ááľáĽ áŤááá áá áááľáłáᢠ409 áᣠáĽá ááᥠáĽáá´áľ ááľá°áŤá¨á áĽááłááĽá áĽááľáĽá˘
á ááľ á ááááľ
ááá°-á˝ááá áááááľ, áááľ á ááŤáŽá˝ á á. ááá ááááŁá á á¨ááŤáľááááľá áááá áááá˝ á á°áᨠá áá ááľáĽ á áľááᥠáĽá á¨ááľá¨áŤ á ááľ áá°áá á áá áá ááᢠáá áááá ááš áááá áá˝áá, áľááá áአáááłáá˝á áááá˝ ááťáá: áá° á ááľ ááá°áľ á¨ááááŁá. áá áá áááľá¨á á¨.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 áᣠááá°ááááĄ-
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 4942f010792a 3 minutes ago 1.38GB
á¨ááľáá áá á á¨á áá áááááľ áĽáááá.
á áááá áĽáá áááá
á ááľá áá á áá áááľááἠáááá ááááľ áľáá˝ á¨ááá
ááľá áá áá áá. á¨ááá
ááľ ááľá á¨áĽá ááľá á á°áááá áľ áá°á¨áľ ááľá áá. á¨áłá˝áá ááĽááĽá á áľáĽáá ááááťá FROM
á Dockerfile ááľáĽ. á áĽá áááłáŁ á áľááľá nodejs á¨á°áŤááá á áĄáĄááą áá á¨á°áá°á¨á° ááľá áĽá¨á°á ááá ááᢠáĽá ááááá ...
$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB
... á ááľ áááŁááľ áááľ ááťááᢠá á áááá ááááľ áá á¨á°áá°á¨á° ááľá á áá áá áľáášá á áĽá á ááááľ áá˝áá. á áááá á áŁá áľáá˝ ááááľ ááᢠá á áááá áá á¨á°áá°á¨á° ᨠnodejs áśá¨á ááľá 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
á áááŹá˝áá áááááŁáľ á áľááá á¨áá á ááłááľ áááŽá˝á ááŤá áá á¨áĽáᢠá áᣠá ááá áŤá áááá (°_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
. á áá
á ááŁá ááááš áĽáá°ááá áá áá°á áľ á ááŁá¸áᢠá ááłááľ á¨á¤á˝á˛á˛á á áááá á 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 ááľáĽ áĽáŤááłááłá¸á á¨á°áᨠá¨áááŁáł á°á¨á áŤáŤááłáᢠá¨ááááŞáŤáá á°áááᢠbuilder
, ááá áá á¨áá¨á¨áťá FROM áááŽ, á¨áĽá á¨áá¨á¨áťá ááľá ááááá. á¨áá¨á¨áťá áĽááá á¨áľáĽá°áŁá˝áá á
ááľ á áá°áá á°á¨á áá° áá¨á¨áťá ááľá á nginx áá
áłáľ ááᢠá¨ááľá áá á á á¨áá°á áááł áááˇááĄ-
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 2c6c5da07802 29 minutes ago 36MB
ááŤáŁáá á ááľáá˝á áĽááľáŹá°á áĽá ááá ááá áĽáá°áá°áŤ áŤá¨áááĄá˘
docker run -p8080:80 app
ᨠ-p8080:80 á ááŤáá á áá ááᣠ8080 áá°áĽ á á áľá°ááá
áá˝áá˝á áá nginx áá°áá°áŤá áľ ááŤáŁ ááľáĽ áá° 80 áá°áĽ á áľá°áááááᢠá á áłá˝ ááľáĽ áááľ
á¨ááľáá áá á á¨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.338s. áĽááá˝ á áŁá á áá á áá á¨á°áá¨áŠ ááááľáá áĽáá°áá ááŤááľ? ááá á áá°á¸ááĄá á¨áááá áĽááá
ᢠááĽáĄ áśá¨á áľááá áĽá á¨áą áá á¨á°áŤáŤá áááá˝ ááááŁá¸áá ááá¨áľ ááĽááĽá á ááĽááĽá áááľáťáᢠá á áŤá°áá á°á¨á, áááá á¨ááŽáááłá˝áá áááá˝ áĽáááá áŁáá, áĽá á¨ááą ááŤá¨á, á áĽáááĽ, áááŚá˝ á á, áľááá
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 áááľáá á¨á°á ááá á¨á áŤáŁá˘á áśá¨á áá¸á፠áášá áĽá áľáŠáľ ááá áá˝ááᢠáśá¨á á¨á°ááአááĽááĽáŽá˝á áááááľ áŚáł áááľá áľ, ááłááá á¨á°á°áŤáá ááľá ááľáĄáľ.
á 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
. áĽáááłá áá á áŁááĽá á°á¨á áľáĽá°áŁ ááľáĽ á¨á°ááá ááľá á¨áá¨á¨áťá á°á¨á á¨ááĽááĽáŽá˝ áľáĽáľáĽ áááá. á áá
áááł, á¨áá°ááľ ááĽááĽáŽá˝ ááľáĽ áŤá ááĽááĽáŽá˝ á ááľá ááľáĽ á ááŤá°áąá. áľááá
ᣠáŤááá áááŁáł á¨áá¨á¨áťáá ááľá á˛á áá áśá¨á ááľáá á nodejs (á¨ááᢠá°á¨á) áááááŁáľ ááá á¨áá ááĽááĽáŽá˝á ááááľ á áá˝ááᢠáá
áá á˝áá ááááłáľ, ááŤá¨áá ááľá ááá áŤá $IMAGE_NAME-builder-stage
áĽá áá° GitHub Packages ááááá áľááá
á á ááŁá áááŁáł áĽáá° áá¸á፠ááá áĽá
á áá ááá áá˝ááá˘
á á ááá á¨áá°áĽá°á˘áŤ áá áá° á ááľ á°áá á°áŠá áááˇáᢠá¨áá°á ááľáá˝á á áááłáľ ááá˝ á°áá á áá˘
á áľá áĽááł
á¨ááá á¨áśá¨á áá¸á፠á˝áá ááááłáľ áááá ááááľ á ááłááľ ááĽááĽáŽá˝á áá° áá Dockerfile ááááłááľ, ááĽáťá ááááŁáľ, áá° áŽáá´ááá áááἠá¤áľ ááľáĽ ááľááŁáľ áĽá áĽáá° ááá áá áá áá.
ᨠAngular áá°áá áŞáŤá áááááŁáľ á¨áŤáłá˝áá nodejs ááľá áĽáááĽáŤááᢠá ááŽáááą ááľáĽ 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 / á˛á˛ áľáááśá˝ ááľáĽ áá¸á፠áááááľ;
- á¨ááááŞáŤ ááľáá˝ ááá á.
ááłáá Docker áĽáá´áľ áĽáá°áá°áŤ á¨á áá ááá˝ áĽáá°ááŤá°áá á°áľá á á°ááááᣠáĽá áĽááľáá á¨áĽááľáá áá°ááŤáľ á á°áťá áááł áááá áá˝ááᢠá¨á˝áá ááłááá˝ áá áááŤááľ, áá¨ááť á°ááĽáŻá
ááá: hab.com