Ngaphambi kokuthi isici singene ekukhiqizweni, kulezi zinsuku zama-orchestra ayinkimbinkimbi ne-CI/CD, kunendlela ende okufanele yenziwe kusukela ekuzinikeleni kuye ekuhlolweni nasekulethweni. Ngaphambilini, ubungalayisha amafayela amasha nge-FTP (akukho muntu okwenzayo lokho, akunjalo?), futhi inqubo "yokuthunyelwa" ithathe imizuzwana. Manje udinga ukudala isicelo sokuhlanganisa futhi ulinde isikhathi eside ukuze isici sifinyelele kubasebenzisi.
Ingxenye yale ndlela yakha isithombe se-Docker. Ngezinye izikhathi umhlangano uthatha imizuzu, ngezinye izikhathi amashumi emizuzu, okungase kubizwe ngokuthi evamile. Kulesi sihloko, sizothatha isicelo esilula esizosifaka esithombeni, sisebenzise izindlela ezimbalwa zokusheshisa ukwakha, futhi sibheke ama-nuances wokuthi lezi zindlela zisebenza kanjani.
Sinolwazi oluhle ekwakheni nasekusekeleni amawebhusayithi emidiya:
Sithumela ku-GitLab. Siqoqa izithombe, siziphushele ku-GitLab Registry bese sizikhiphela ekukhiqizweni. Into ende kakhulu kulolu hlu ukuhlanganisa izithombe. Isibonelo: ngaphandle kokuthuthukisa, ukwakhiwa kwe-backend ngakunye kuthathe imizuzu eyi-14.
Ekugcineni, kwacaca ukuthi ngeke sisakwazi ukuphila kanje, futhi sahlala phansi sabheka ukuthi kungani izithombe zithatha isikhathi eside ukuqoqwa. Ngenxa yalokho, sakwazi ukunciphisa isikhathi somhlangano saba imizuzwana engu-30!
Kulesi sihloko, ukuze singaboshelwa endaweni Yesikhumbuzi, ake sibheke isibonelo sokuhlanganisa uhlelo lokusebenza lwe-Angular olungenalutho. Ngakho-ke, masidale uhlelo lwethu lokusebenza:
ng n app
Engeza i-PWA kuyo (siyathuthuka):
ng add @angular/pwa --project app
Ngenkathi kulandwa amaphakheji we-npm ayisigidi, ake sithole ukuthi isithombe se-docker sisebenza kanjani. I-Docker inikeza ikhono lokupakisha izinhlelo zokusebenza nokuziqhuba endaweni engayodwa ebizwa ngokuthi isitsha. Ngenxa yokuhlukaniswa, ungakwazi ukusebenzisa iziqukathi eziningi ngesikhathi esisodwa kuseva eyodwa. Iziqukathi zilula kakhulu kunemishini ebonakalayo ngoba zisebenza ngqo ku-kernel yesistimu. Ukuze sisebenzise isiqukathi esinohlelo lwethu lokusebenza, sidinga kuqala ukwakha isithombe lapho sizopakisha khona yonke into edingekayo ukuze uhlelo lwethu lusebenze. Empeleni, isithombe siyikhophi yesistimu yefayela. Isibonelo, thatha i-Dockerfile:
FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod
I-Dockerfile iyisethi yemiyalelo; Ngokwenza ngayinye yazo, i-Docker izogcina izinguquko ohlelweni lwefayela futhi iwamboze kowangaphambili. Iqembu ngalinye lakha isendlalelo salo. Futhi isithombe esiphelile siyizendlalelo ezihlanganiswe ndawonye.
Okubalulekile ukwazi: ungqimba ngalunye lwe-Docker lungagcina inqolobane. Uma kungekho lutho olushintshile kusukela ekwakhiweni kokugcina, esikhundleni sokwenza umyalo, i-docker izothatha isendlalelo esenziwe ngomumo. Njengoba ukwanda okuyinhloko kwejubane lokwakha kuzoba ngenxa yokusetshenziswa kwenqolobane, lapho silinganisa isivinini sokwakha sizonaka ngokukhethekile ukwakha isithombe nge-cache eyenziwe ngomumo. Ngakho, step by step:
- Sisusa izithombe endaweni ukuze imigijimo eyedlule ingaphazamisi ukuhlolwa.
docker rmi $(docker images -q)
- Sethula isakhiwo okokuqala ngqa.
time docker build -t app .
- Sishintsha ifayela elithi src/index.html - silingisa umsebenzi womklami.
- Siqhuba ukwakha okwesibili.
time docker build -t app .
Uma imvelo yokwakha izithombe icushwe ngendlela efanele (ngaphezulu kwalokho okungezansi), lapho-ke ukwakhiwa kuqala, i-Docker izobe isivele inenqwaba yezilondolozi ebhodini. Umsebenzi wethu ukufunda indlela yokusebenzisa inqolobane ukuze ukwakhiwa kuhambe ngokushesha okukhulu. Njengoba sicabanga ukuthi ukusebenzisa isakhiwo ngaphandle kwenqolobane kwenzeka kanye kuphelaβokokuqala ngqaβngakho-ke singaziba ukuthi sasihamba kancane kangakanani leso sikhathi sokuqala. Ekuhlolweni, ukugijima kwesibili kwesakhiwo kubalulekile kithi, lapho ama-caches asevele efudumele futhi sesilungele ukubhaka ikhekhe lethu. Kodwa-ke, amanye amathiphu azophinde athinte ukwakhiwa kokuqala.
Ake sibeke i-Dockerfile echazwe ngenhla kufolda yephrojekthi futhi siqale ukwakha. Konke ukufakwa kuhlu kufingqiwe ukuze kube lula ukufunda.
$ 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
Sishintsha okuqukethwe kwe-src/index.html bese siyiqhuba okwesibili.
$ 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
Ukuze ubone ukuthi sinaso yini isithombe, sebenzisa umyalo docker images
:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 79f335df92d3 About a minute ago 1.74GB
Ngaphambi kokwakha, i-docker ithatha wonke amafayela kumongo wamanje futhi iwathumele ku-daemon yayo Sending build context to Docker daemon 409MB
. Umongo wokwakha ucaciswe njengengxabano yokugcina kumyalo wokwakha. Esimweni sethu, lena inkomba yamanje - ".", - futhi i-Docker ihudula yonke into esinayo kule folda. 409 MB kuningi: ake sicabange ukuthi singayilungisa kanjani.
Ukunciphisa umongo
Ukunciphisa umongo, kunezinketho ezimbili. Noma faka wonke amafayela adingekayo ukuze ahlanganiswe kufolda ehlukile bese ukhomba umongo wedokhu kule folda. Lokhu kungase kungabi lula ngaso sonke isikhathi, ngakho-ke kungenzeka ukucacisa okuhlukile: okungafanele kuhudulelwe kumongo. Ukuze wenze lokhu, faka ifayela le-.dockerignore kuphrojekthi futhi ubonise lokho okungadingeki ekwakheni:
.git
/node_modules
bese uqhuba isakhiwo futhi:
$ 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 ingcono kakhulu kuno-409 MB. Siphinde sehlisa usayizi wesithombe ukusuka ku-1.74 kuya ku-1.38 GB:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 4942f010792a 3 minutes ago 1.38GB
Ake sizame ukunciphisa usayizi wesithombe ngokuqhubekayo.
Sisebenzisa i-Alpine
Enye indlela yokulondoloza kusayizi wesithombe ukusebenzisa isithombe esincane somzali. Isithombe somzali yisithombe esisekelwe kuso isithombe sethu esilungiselelwe. Isendlalelo esingezansi sicaciswa umyalo FROM
ku-Dockerfile. Esimweni sethu, sisebenzisa isithombe esisekelwe ku-Ubuntu esesivele sinama-nodejs afakiwe. Futhi inesisindo...
$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB
... cishe igigabhayithi. Ungakwazi ukunciphisa kakhulu ivolumu ngokusebenzisa isithombe esisekelwe ku-Alpine Linux. I-Alpine iyi-Linux encane kakhulu. Isithombe sedokhu sama-nodejs asuselwa ku-alpine sinesisindo esingu-88.5 MB kuphela. Ngakho-ke ake sishintshe isithombe sethu esiphilayo ezindlini:
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
Bekufanele sifake ezinye izinto ezidingekayo ukuze sakhe uhlelo lokusebenza. Yebo, i-Angular ayakhi ngaphandle kwePython Β―(Β°_o)/Β―
Kepha usayizi wesithombe wehla waba ngu-150 MB:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest aa031edc315a 22 minutes ago 761MB
Asiqhubeke nakakhulu.
Umhlangano we-Multistage
Akuyona yonke into esesithombeni esiyidingayo ekukhiqizeni.
$ 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
Ngosizo luka docker run app ls -lah
sethule isitsha esisekelwe esithombeni sethu app
futhi wenza umyalo kuwo ls -lah
, ngemva kwalokho isitsha saqeda umsebenzi waso.
Ekukhiqizeni sidinga ifolda kuphela dist
. Kulokhu, amafayela ngandlela-thile adinga ukunikezwa ngaphandle. Ungasebenzisa iseva ethile ye-HTTP kuma-nodejs. Kodwa sizokwenza kube lula. Qagela igama lesiRashiya elinezinhlamvu ezine "y". Kulungile! Ynzhynyksy. Ake sithathe isithombe nge-nginx, sibeke ifolda kuso dist
kanye nokucushwa okuncane:
server {
listen 80 default_server;
server_name localhost;
charset utf-8;
root /app/dist;
location / {
try_files $uri $uri/ /index.html;
}
}
Ukwakhiwa kwezigaba eziningi kuzosisiza ukuthi senze konke lokhu. Masiguqule i-Dockerfile yethu:
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 .
Manje sineziqondiso ezimbili FROM
ku-Dockerfile, ngayinye yazo isebenzisa isinyathelo sokwakha esihlukile. Sabiza eyokuqala builder
, kodwa kusukela kokugcina KUSUKA, isithombe sethu sokugcina sizolungiselelwa. Isinyathelo sokugcina ukukopisha i-artifact yomhlangano wethu esinyathelweni sangaphambilini esithombeni sokugcina nge-nginx. Usayizi wesithombe wehle kakhulu:
REPOSITORY TAG IMAGE ID CREATED SIZE
app latest 2c6c5da07802 29 minutes ago 36MB
Masiqhube isiqukathi ngesithombe sethu futhi siqinisekise ukuthi yonke into iyasebenza:
docker run -p8080:80 app
Sisebenzisa inketho -p8080:80, sidlulisele i-port 8080 emshinini wethu wokusingathwa ukuze ifake i-80 ngaphakathi kwesitsha lapho i-nginx isebenza khona. Vula kusiphequluli
Ukunciphisa usayizi wesithombe ukusuka ku-1.74 GB ukuya ku-36 MB kunciphisa kakhulu isikhathi esisithathayo ukuletha uhlelo lwakho lokusebenza emkhiqizweni. Kodwa ake sibuyele esikhathini somhlangano.
$ 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
Ukushintsha ukuhleleka kwezingqimba
Izinyathelo zethu ezintathu zokuqala zigcinwe (ukusikisela Using cache
). Esinyathelweni sesine, wonke amafayela ephrojekthi ayakopishwa futhi esinyathelweni sesihlanu okuncikile kufakwa RUN npm ci
- kuze kufike ku-47.338s. Kungani ufake kabusha okuncikile ngaso sonke isikhathi uma kushintsha kuyaqabukela? Ake sithole ukuthi kungani zingagcinwanga kunqolobane. Iphuzu liwukuthi i-Docker izohlola isendlalelo ngesendlalelo ukuze ibone ukuthi umyalo namafayela ahlobene nawo ashintshile yini. Esinyathelweni sesine, sikopisha wonke amafayela wephrojekthi yethu, futhi phakathi kwawo, yiqiniso, kunezinguquko, ngakho-ke i-Docker ayithathi nje kuphela lolu ungqimba kunqolobane, kodwa futhi nayo yonke elandelayo! Masenze izinguquko ezincane ku-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 .
Okokuqala, i-package.json ne-package-lock.json ziyakopishwa, bese kufakwa okuncikile, futhi ngemva kwalokho yonke iphrojekthi ikopishiwe. Ngenxa yalokho:
$ 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
Imizuzwana engama-46 esikhundleni semizuzu emi-3 - okungcono kakhulu! Ukuhleleka okufanele kwezendlalelo kubalulekile: okokuqala sikopisha lokho okungashintshi, bese kuba yilokho okushintshayo okungavamile, futhi ekugcineni lokho okushintsha njalo.
Okulandelayo, amagama ambalwa mayelana nokuhlanganisa izithombe ezinhlelweni ze-CI/CD.
Ukusebenzisa izithombe zangaphambilini kunqolobane
Uma sisebenzisa uhlobo oluthile lwesixazululo se-SaaS ekwakheni, khona-ke inqolobane yendawo ye-Docker ingase ihlanzeke futhi ibe yintsha. Ukuze unikeze i-docker indawo yokuthola izendlalelo ezibhakiwe, mnike isithombe esakhiwe ngaphambilini.
Ake sithathe isibonelo sokwakha uhlelo lwethu lokusebenza ku-GitHub Actions. Sisebenzisa lokhu kulungiselelwa
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
Isithombe siqoqwe futhi sicindezelwe ku-GitHub Packages ngemizuzu emibili nemizuzwana engama-20:
Manje ake sishintshe ukwakha ukuze kusetshenziswe inqolobane ngokusekelwe ezithombeni ezakhiwe ngaphambilini:
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
Okokuqala sidinga ukukutshela ukuthi kungani imiyalo emibili yethulwa build
. Iqiniso liwukuthi emhlanganweni wezigaba eziningi isithombe esiphumela sizoba isethi yezendlalelo kusukela esigabeni sokugcina. Kulokhu, izendlalelo ezivela ezendlalelo ezedlule ngeke zifakwe esithombeni. Ngakho-ke, lapho usebenzisa isithombe sokugcina esakhiweni sangaphambilini, i-Docker ngeke ikwazi ukuthola izendlalelo ezilungile zokwakha isithombe ngama-nodejs (isiteji somakhi). Ukuze kuxazululwe le nkinga, kwakhiwa isithombe esimaphakathi $IMAGE_NAME-builder-stage
futhi iphushwa ku-GitHub Packages ukuze isetshenziswe ekwakhiweni okulandelayo njengomthombo wenqolobane.
Isikhathi sokuhlanganisa sincishisiwe saba umzuzu nengxenye. Isigamu somzuzu sichithwa kudonsa izithombe ezedlule.
Ukucabangela kusengaphambili
Enye indlela yokuxazulula inkinga yenqolobane ehlanzekile ye-Docker ukuhambisa ezinye izendlalelo kwenye i-Dockerfile, uyakhe ngokuhlukana, uyiphushele ku-Container Registry futhi uyisebenzise njengomzali.
Sakha isithombe sethu se-nodejs ukwakha uhlelo lokusebenza lwe-Angular. Dala i-Dockerfile.node kuphrojekthi
FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add
python
make
g++
Siqoqa futhi siphushe isithombe esisesidlangalaleni ku-Docker Hub:
docker build -t exsmund/node-for-angular -f Dockerfile.node .
docker push exsmund/node-for-angular:latest
Manje ku-Dockerfile yethu enkulu sisebenzisa isithombe esiqediwe:
FROM exsmund/node-for-angular:latest as builder
...
Esibonelweni sethu, isikhathi sokwakha asizange sinciphe, kodwa izithombe ezakhiwe ngaphambilini zingaba usizo uma unamaphrojekthi amaningi futhi kufanele ufake ukuncika okufanayo kulowo nalowo wabo.
Sibheke izindlela ezimbalwa zokusheshisa ukwakhiwa kwezithombe ze-docker. Uma ufuna ukuthunyelwa kuhambe ngokushesha, zama ukusebenzisa lokhu kuphrojekthi yakho:
- ukunciphisa umongo;
- ukusetshenziswa kwezithombe zomzali ezincane;
- ukuhlanganiswa kwezigaba eziningi;
- ukushintsha ukuhleleka kwemiyalelo ku-Dockerfile ukuze kusetshenziswe kahle inqolobane;
- ukusetha i-cache ezinhlelweni ze-CI/CD;
- ukudalwa kokuqala kwezithombe.
Ngethemba ukuthi isibonelo sizokucacisa ukuthi i-Docker isebenza kanjani, futhi uzokwazi ukumisa kahle ukuthunyelwa kwakho. Ukuze udlale ngezibonelo ezivela esihlokweni, indawo yokugcina idaliwe
Source: www.habr.com