Alohan'ny hidiran'ny endri-javatra iray amin'ny famokarana, amin'izao andron'ny orkesitra sarotra sy CI/CD izao, dia lavitra ny fandehanana manomboka amin'ny fanoloran-tena mankany amin'ny fitsapana sy ny fandefasana. Teo aloha dia afaka mampakatra rakitra vaovao amin'ny alΓ lan'ny FTP ianao (tsy misy manao an'izany intsony, sa tsy izany?), Ary naharitra segondra vitsy ny fizotran'ny "deployment". Ankehitriny dia mila mamorona fangatahana fampiraisana ianao ary miandry ela ny fahatongavan'ilay endri-javatra ho an'ny mpampiasa.
Ny ampahany amin'ity lalana ity dia ny fananganana sary Docker. Indraindray ny fivoriambe dia maharitra minitra, indraindray folo minitra, izay tsy azo antsoina hoe mahazatra. Ato amin'ity lahatsoratra ity, dia haka fampiharana tsotra izay handrafetana sary iray isika, hampihatra fomba maro hanafainganana ny fananganana, ary hijery ny fomba fiasan'ireo fomba ireo.
Manana traikefa tsara amin'ny famoronana sy fanohanana tranonkala media izahay:
Miparitaka amin'ny GitLab izahay. Manangona sary izahay, manosika azy ireo any amin'ny GitLab Registry ary manodina azy ireo amin'ny famokarana. Ny zavatra lava indrindra amin'ity lisitra ity dia ny fanangonana sary. Ohatra: tsy misy fanatsarana, naharitra 14 minitra ny fananganana backend tsirairay.
Tamin'ny farany dia nanjary nazava fa tsy afaka miaina toy izany intsony izahay, ary nipetraka mba hamantatra ny antony naharitra ela ny fanangonana ireo sary. Ho vokany, dia vitanay ny nampihena ny fotoana fivoriambe ho 30 segondra!
Ho an'ity lahatsoratra ity, mba tsy hifamatotra amin'ny tontolon'ny Fampahatsiahivana, andeha hojerentsika ny ohatra iray amin'ny fanangonana fampiharana Angular foana. Noho izany, andao hamorona ny fampiharana:
ng n app
Ampio ny PWA (mivoatra izahay):
ng add @angular/pwa --project app
Raha misy fonosana npm iray tapitrisa no alaina, andao hojerentsika ny fomba fiasan'ny sary docker. Docker dia manome ny fahafahana manangona rindranasa ary mampandeha azy ireo amin'ny tontolo mitoka-monina antsoina hoe container. Noho ny fitokana-monina dia afaka mitantana kaontenera maro miaraka amin'ny mpizara iray ianao. Maivana kokoa noho ny milina virtoaly ny kaontenera satria mandeha mivantana amin'ny kernel rafitra izy ireo. Mba hampandehanana kaontenera miaraka amin'ny rindranasantsika dia mila mamorona sary iray izay handrafetantsika ny zavatra rehetra ilaina amin'ny fampandehanan-draharahantsika isika. Amin'ny ankapobeny, ny sary dia dika mitovy amin'ny rafi-drakitra. Raiso, ohatra, ny Dockerfile:
FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
Ny Dockerfile dia andiana torolalana; Amin'ny fanaovana ny tsirairay amin'izy ireo, i Docker dia hamonjy ny fanovana amin'ny rafi-drakitra ary manarona azy ireo amin'ireo teo aloha. Ny ekipa tsirairay dia mamorona sosona manokana. Ary ny sary vita dia sosona mitambatra.
Ny zava-dehibe ho fantatra: ny layer Docker tsirairay dia afaka cache. Raha toa ka tsy nisy niova hatramin'ny fananganana farany, fa tsy manatanteraka ny baiko ny docker dia haka sosona efa vita. Satria ny fitomboana lehibe amin'ny hafainganam-pandehan'ny fananganana dia noho ny fampiasana ny cache, rehefa mandrefy ny hafainganam-pandehan'ny fananganana isika dia handinika manokana ny fananganana sary misy cache efa vita. Noho izany, tsikelikely:
- Fafantsika eo an-toerana ny sary mba tsy hisy fiantraikany amin'ny fitsapana ny hazakazaka teo aloha.
docker rmi $(docker images -q)
- Sambany izahay no manomboka ny fananganana.
time docker build -t app .
- Ovainay ny rakitra src/index.html - maka tahaka ny asan'ny programmer izahay.
- Manao ny fananganana fanindroany izahay.
time docker build -t app .
Raha amboarina tsara ny tontolon'ny fananganana sary (bebe kokoa amin'izay etsy ambany), dia rehefa manomboka ny fananganana dia efa manana cache maromaro ao anaty sambo i Docker. Ny anjarantsika dia ny mianatra mampiasa ny cache mba handeha haingana araka izay azo atao ny fananganana. Satria heverinay fa indray mandeha monja ny fampandehanana fananganana tsy misy cache β ny voalohany indrindra β noho izany dia azo atao ny tsy miraharaha ny fahamaivanan'io fotoana voalohany io. Amin'ny fitsapana dia zava-dehibe amintsika ny dingana faharoa amin'ny fananganana, rehefa efa mafana ny cache ary vonona ny hanendasantsika ny mofomamy. Na izany aza, ny toro-hevitra sasany dia hisy fiantraikany amin'ny fananganana voalohany ihany koa.
Andao hametraka ny Dockerfile voalaza etsy ambony ao amin'ny lahatahiry tetikasa ary manomboka ny fananganana. Ny lisitra rehetra dia nofonosina mba hanamora ny famakiana.
$ 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
Ovainay ny votoatin'ny src/index.html ary averinay fanindroany.
$ 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
Raha te hijerena raha manana ny sary isika dia araho ny baiko docker images
:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 79f335df92d3 About a minute ago 1.74GB
Alohan'ny hanorina, ny docker dia maka ny rakitra rehetra amin'ny toe-javatra misy ankehitriny ary mandefa azy ireo any amin'ny daemon-ny Sending build context to Docker daemon 409MB
. Ny contexte manorina dia voafaritra ho tohan-kevitra farany amin'ny baiko fananganana. Amin'ity tranga ity, ity no lahatahiry ankehitriny - ".", - ary i Docker dia misintona izay rehetra ananantsika ao amin'ity lahatahiry ity. Be dia be ny 409 MB: andeha hojerentsika ny fomba hanamboarana azy.
Mampihena ny contexte
Mba hampihenana ny contexte dia misy safidy roa. Na apetraho ao anaty lahatahiry mitokana ny rakitra rehetra ilaina amin'ny fivoriambe ary atoroy amin'ity lahatahiry ity ny contexte docker. Mety tsy mety foana izany, noho izany dia azo atao ny mamaritra ny maningana: izay tsy tokony hotaritarihina amin'ny teny manodidina. Mba hanaovana izany, apetraho amin'ny tetikasa ny rakitra .dockerignore ary asehoy izay tsy ilaina amin'ny fananganana:
.git
/node_modules
ary avereno indray ny fananganana:
$ 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 dia tsara lavitra noho ny 409 MB. Nahenanay koa ny haben'ny sary avy amin'ny 1.74 ho 1.38 GB:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 4942f010792a 3 minutes ago 1.38GB
Andao hiezaka hampihena ny haben'ny sary.
Mampiasa Alpine izahay
Fomba iray hafa hitehirizana ny haben'ny sary dia ny fampiasana sary kely ray aman-dreny. Ny sarin'ny ray aman-dreny dia ny sary mifototra amin'ny sarintsika. Ny sosona ambany dia voafaritra amin'ny baiko FROM
ao amin'ny Dockerfile. Amin'ny tranga misy antsika dia mampiasa sary miorina amin'ny Ubuntu izay efa misy nodejs napetraka. Ary milanja...
$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB
... efa ho gigabyte. Azonao atao ny mampihena be ny habe amin'ny fampiasana sary miorina amin'ny Alpine Linux. Alpine dia Linux tena kely. Ny sary docker ho an'ny nodejs mifototra amin'ny alpine dia milanja 88.5 MB fotsiny. Andeha Γ ry hosoloina ny sarintsika velona ao an-trano:
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
Tsy maintsy nametraka zavatra sasany ilaina amin'ny fananganana ny fampiharana izahay. Eny, tsy manorina ny Angular raha tsy misy Python Β―(Β°_o)/Β―
Saingy nihena ho 150 MB ny haben'ny sary:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest aa031edc315a 22 minutes ago 761MB
Andao handeha lavitra kokoa.
Fivoriambe maromaro
Tsy izay rehetra eo amin'ny sary no ilaintsika amin'ny famokarana.
$ 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
Amin'ny fanampian'ny docker run app ls -lah
nandefa kaontenera mifototra amin'ny sarinay izahay app
ary nanatanteraka ny baiko tao ls -lah
, taorian'izay dia nahavita ny asany ny kaontenera.
Amin'ny famokarana dia mila fampirimana fotsiny isika dist
. Amin'ity tranga ity dia mila omena any ivelany ny rakitra. Azonao atao ny mampiasa mpizara HTTP sasany amin'ny nodejs. Hanamora izany anefa izahay. Maminavina teny Rosiana misy litera efatra "y". Marina! Ynzhynyksy. Andao haka sary miaraka amin'ny nginx, asio lahatahiry ao anatiny dist
ary config kely:
server {
listen 80 default_server;
server_name localhost;
charset utf-8;
root /app/dist;
location / {
try_files $uri $uri/ /index.html;
}
}
Hanampy antsika hanao izany rehetra izany ny fananganana sehatra maro. Andao hanova ny 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 .
Manana torolalana roa isika izao FROM
Ao amin'ny Dockerfile, ny tsirairay amin'izy ireo dia manao dingana fananganana hafa. Niantso ny voalohany izahay builder
, fa manomboka amin'ny FROM farany dia homanina ny sarintsika farany. Ny dingana farany dia ny mandika ny artifact ny fivoriambentsika tamin'ny dingana teo aloha ho any amin'ny sary farany miaraka amin'ny nginx. Nihena be ny haben'ny sary:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 2c6c5da07802 29 minutes ago 36MB
Andeha hojerentsika miaraka amin'ny sarintsika ilay container ary ho azo antoka fa mandeha ny zava-drehetra:
docker run -p8080:80 app
Amin'ny fampiasana ny safidy -p8080:80, dia nandefa port 8080 izahay tamin'ny milina mpampiantrano anay mankany amin'ny seranan-tsambo 80 ao anatin'ny kaontenera misy ny nginx. Sokafy amin'ny navigateur
Ny fampihenana ny haben'ny sary avy amin'ny 1.74 GB ho 36 MB dia mampihena be ny fotoana ilaina amin'ny fandefasana ny fampiharana anao amin'ny famokarana. Andeha anefa isika hiverina aminβny fotoanβny fivoriambe.
$ 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
Fanovana ny filaharan'ny sosona
Ny dingana telo voalohany nataonay dia voatahiry (soso-kevitra Using cache
). Amin'ny dingana fahefatra dia adika daholo ny rakitra tetikasa ary amin'ny dingana fahadimy dia apetraka ny fiankinan-doha RUN npm ci
- hatramin'ny 47.338s. Fa maninona no averina apetraka isaky ny miova ny fiankinan-doha raha mahalana izy ireo no miova? Andeha hojerentsika hoe nahoana izy ireo no tsy voatahiry. Ny tiana holazaina dia ny Docker dia hanamarina ny soso-kevitra mba hahitana raha niova ny baiko sy ny rakitra mifandraika amin'izany. Amin'ny dingana fahefatra dia mandika ny rakitra rehetra amin'ny tetikasantsika isika, ary eo amin'izy ireo, mazava ho azy, misy fiovana, noho izany dia tsy vitan'ny hoe tsy manala an'io sosona io amin'ny cache i Docker, fa koa ny manaraka rehetra! Andao hanao fanovana kely amin'ny 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 .
Voalohany, adika package.json sy package-lock.json, avy eo apetraka ny dependencies, ary aorian'izay vao adika ny tetikasa manontolo. Vokatr'izany:
$ 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 segondra fa tsy 3 minitra - tsara kokoa! Zava-dehibe ny filaharan'ny sosona marina: ny voalohany dia maka tahaka izay tsy miova, avy eo izay miova mahalana, ary farany izay miova matetika.
Manaraka, teny vitsivitsy momba ny fanangonana sary amin'ny rafitra CI/CD.
Mampiasa sary teo aloha ho an'ny cache
Raha mampiasa karazana vahaolana SaaS isika amin'ny fananganana, dia mety ho madio sy vaovao ny cache Docker eo an-toerana. Mba hanomezana toerana ny docker haka ireo sosona vita amin'ny mofo, omeo azy ny sary namboarina teo aloha.
Andeha isika haka ohatra amin'ny fananganana ny fampiharana ao amin'ny GitHub Actions. Mampiasa ity config ity izahay
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
Ny sary dia tafangona ary atosiky ny GitHub Packages ao anatin'ny roa minitra sy 20 segondra:
Andeha isika hanova ny fananganana mba hampiasana cache mifototra amin'ny sary namboarina teo aloha:
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
Voalohany dia mila milaza aminao izahay hoe nahoana ny baiko roa no natomboka build
. Ny zava-misy dia ao amin'ny fivoriambe multistage ny sary aterak'izany dia ho andiana sosona avy amin'ny dingana farany. Amin'ity tranga ity, ny sosona avy amin'ny sosona teo aloha dia tsy ho tafiditra ao amin'ny sary. Noho izany, rehefa mampiasa ny sary farany avy amin'ny fananganana teo aloha, Docker dia tsy ho afaka hahita sosona vonona hananganana ny sary miaraka amin'ny nodejs (stage Builder). Mba hamahana ity olana ity dia misy sary mpanelanelana noforonina $IMAGE_NAME-builder-stage
ary atosiky ny GitHub Packages mba ho azo ampiasaina amin'ny fananganana manaraka ho loharano cache.
Nahena ho iray minitra sy sasany ny fitambaranβny fotoana fivoriambe. Atsasakadiny no lany amin'ny fisintonana ny sary teo aloha.
Preimaging
Ny fomba iray hafa hamahana ny olan'ny cache Docker madio dia ny mamindra ny sasany amin'ireo sosona ao amin'ny Dockerfile hafa, manangana azy misaraka, manosika azy ao amin'ny Rejistra Container ary mampiasa azy ho ray aman-dreny.
Mamorona sary nodejs manokana izahay hananganana fampiharana Angular. Mamorona Dockerfile.node amin'ny tetikasa
FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
Manangona sy manosika sary ho an'ny daholobe ao amin'ny Docker Hub izahay:
docker build -t exsmund/node-for-angular -f Dockerfile.node .
docker push exsmund/node-for-angular:latest
Amin'izao fotoana izao ao amin'ny Dockerfile lehibe dia mampiasa ny sary vita izahay:
FROM exsmund/node-for-angular:latest as builder
...
Amin'ny ohatra ataontsika dia tsy nihena ny fotoana fananganana, fa ny sary efa namboarina dia mety ilaina raha manana tetikasa maro ianao ary tsy maintsy mametraka ny fiankinan-doha mitovy amin'ny tsirairay amin'izy ireo.
Nijery fomba maro izahay hanafainganana ny fananganana sary docker. Raha tianao ny handeha haingana ny fametrahana dia andramo mampiasa ity amin'ny tetikasanao:
- fampihenana ny contexte;
- fampiasana sary kely ray aman-dreny;
- fivoriambe maromaro;
- manova ny filaharan'ny toromarika ao amin'ny Dockerfile mba hampiasana tsara ny cache;
- fametrahana cache amin'ny rafitra CI/CD;
- famoronana santatra ny sary.
Manantena aho fa ny ohatra dia hanazava kokoa ny fomba fiasan'i Docker, ary ho azonao atao tsara ny manamboatra ny fametrahanao. Mba hilalaovana amin'ireo ohatra avy amin'ny lahatsoratra dia nisy tahiry iray noforonina
Source: www.habr.com