Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Mbali isanapangidwe, m'masiku ano a oimba ovuta ndi CI / CD, pali njira yayitali yopitira pakudzipereka kupita ku mayeso ndi kutumiza. M'mbuyomu, mutha kukweza mafayilo atsopano kudzera pa FTP (palibe amene amachitanso izi, sichoncho?), Ndipo njira ya "kutumiza" idatenga masekondi. Tsopano muyenera kupanga pempho lophatikiza ndikudikirira nthawi yayitali kuti mawonekedwewo afike kwa ogwiritsa ntchito.

Gawo lanjira iyi ndikumanga chithunzi cha Docker. Nthawi zina msonkhano umatenga mphindi, nthawi zina mphindi makumi, zomwe sizingatchulidwe kuti ndizabwinobwino. M'nkhaniyi, titenga ntchito yosavuta yomwe tidzayiyika mu chithunzi, tigwiritse ntchito njira zingapo kuti tifulumizitse kumanga, ndikuyang'ana ma nuances a momwe njirazi zimagwirira ntchito.

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Tili ndi chidziwitso chabwino pakupanga ndikuthandizira mawebusayiti azama media: CHIWANDA, The Bell, "New Newspaper", Republic… Osati kale kwambiri ife anakulitsa mbiri yathu ndi kumasula mankhwala webusaiti Chikumbutso. Ndipo ngakhale zatsopano zidawonjezeredwa mwachangu ndipo nsikidzi zakale zidakonzedwa, kutumiza pang'onopang'ono kunakhala vuto lalikulu.

Timatumiza ku GitLab. Timasonkhanitsa zithunzi, kuzikankhira ku GitLab Registry ndikuzitulutsa kuti zipangidwe. Chotalika kwambiri pamndandandawu ndikusonkhanitsa zithunzi. Mwachitsanzo: popanda kukhathamiritsa, kumanga kumbuyo kulikonse kumatenga mphindi 14.

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Pamapeto pake, zinaonekeratu kuti sitingakhalenso moyo wotere, ndipo tinakhala pansi kuti tidziwe chifukwa chake zithunzizo zinkatenga nthawi yaitali kuti zisawonongeke. Zimenezi zinachititsa kuti tichepetse nthawi ya msonkhanowo kufika masekondi 30!

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Kwa nkhaniyi, kuti tisamangiridwe ku chilengedwe cha Chikumbutso, tiyeni tiwone chitsanzo cha kusonkhanitsa pulogalamu yopanda kanthu ya Angular. Chifukwa chake, tiyeni tipange pulogalamu yathu:

ng n app

Onjezani PWA kwa izo (tikupita patsogolo):

ng add @angular/pwa --project app

Pomwe mapaketi miliyoni a npm akutsitsidwa, tiyeni tiwone momwe chithunzi cha docker chimagwirira ntchito. Docker imapereka mwayi woyika mapulogalamu ndikuyendetsa pamalo akutali otchedwa chidebe. Chifukwa cha kudzipatula, mutha kuyendetsa zotengera zambiri nthawi imodzi pa seva imodzi. Zotengera ndizopepuka kwambiri kuposa makina enieni chifukwa zimayendera molunjika pa kernel. Kuti tigwiritse ntchito chidebe chokhala ndi pulogalamu yathu, choyamba tifunika kupanga chithunzi chomwe timayikamo chilichonse chofunikira kuti pulogalamu yathu igwire ntchito. Kwenikweni, chithunzi ndi kopi ya fayilo yamafayilo. Mwachitsanzo, tengani Dockerfile:

FROM node:12.16.2
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build --prod

Dockerfile ndi mndandanda wa malangizo; Pochita chilichonse, Docker amasunga zosintha pamafayilo ndikuzikuta pazimene zapita. Gulu lirilonse limapanga wosanjikiza wake. Ndipo chithunzi chomalizidwa ndi zigawo zophatikizidwa pamodzi.

Chofunika kudziwa: gawo lililonse la Docker limatha kubisa. Ngati palibe chomwe chasintha kuyambira pakumanga komaliza, ndiye kuti m'malo motsatira lamulo, docker itenga wosanjikiza wokonzeka. Popeza kuwonjezeka kwakukulu kwa liwiro la kumanga kudzakhala chifukwa cha kugwiritsa ntchito cache, pamene kuyeza liwiro la kumanga tidzatchera khutu kumanga fano ndi cache yokonzeka. Kotero, sitepe ndi sitepe:

  1. Timachotsa zithunzizo kwanuko kuti zomwe zidachitika kale zisakhudze mayeso.
    docker rmi $(docker images -q)
  2. Timakhazikitsa kumangako koyamba.
    time docker build -t app .
  3. Timasintha fayilo ya src/index.html - timatsanzira ntchito ya wopanga mapulogalamu.
  4. Timayendetsanso kumangako kachiwiri.
    time docker build -t app .

Ngati malo opangira zithunzi akonzedwa bwino (zambiri pamunsimu), ndiye kuti kumangako kukayamba, Docker adzakhala ndi kale nkhokwe zambiri. Ntchito yathu ndikuphunzira momwe tingagwiritsire ntchito cache kuti kumangako kupite mofulumira momwe tingathere. Popeza tikuganiza kuti kuyendetsa nyumba popanda cache kumachitika kamodzi kokha - koyambirira - titha kunyalanyaza momwe nthawi yoyambayo idachedwera. M'mayesero, kuthamanga kwachiwiri kwa zomangamanga ndikofunika kwa ife, pamene ma cache atenthedwa kale ndipo takonzeka kuphika keke yathu. Komabe, malangizo ena adzakhudzanso kumanga koyamba.

Tiyeni tiyike Dockerfile yomwe yafotokozedwa pamwambapa mufoda ya polojekiti ndikuyamba kumanga. Mindandanda yonse yafupikitsidwa kuti muwerenge mosavuta.

$ 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

Timasintha zomwe zili mu src/index.html ndikuyendetsanso kachiwiri.

$ 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

Kuti muwone ngati tili ndi chithunzicho, yendetsani lamulo docker images:

REPOSITORY   TAG      IMAGE ID       CREATED              SIZE
app          latest   79f335df92d3   About a minute ago   1.74GB

Asanamange, docker amatenga mafayilo onse momwe alili ndikuwatumiza ku daemon yake Sending build context to Docker daemon 409MB. Zomangamanga zimatchulidwa ngati mkangano womaliza ku lamulo lomanga. Kwa ife, ichi ndi chikwatu chapano - ".", - ndipo Docker amakoka chilichonse chomwe tili nacho mufoda iyi. 409 MB ndiyochuluka: tiyeni tiganizire momwe tingakonzere.

Kuchepetsa nkhaniyo

Kuchepetsa nkhaniyo, pali njira ziwiri. Kapena ikani mafayilo onse ofunikira kuti asonkhanitse mufoda ina ndikulozera zomwe zili mufoda iyi. Izi sizingakhale zosavuta nthawi zonse, kotero ndizotheka kutchula zosiyana: zomwe siziyenera kukokera m'nkhaniyo. Kuti muchite izi, ikani fayilo ya .dockerignore mu polojekiti ndikuwonetsa zomwe sizikufunika pakumanga:

.git
/node_modules

ndikuyambitsanso kumanganso:

$ 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 ndi yabwino kwambiri kuposa 409 MB. Tidachepetsanso kukula kwa chithunzi kuchokera ku 1.74 mpaka 1.38 GB:

REPOSITORY   TAG      IMAGE ID       CREATED         SIZE
app          latest   4942f010792a   3 minutes ago   1.38GB

Tiyeni tiyese kuchepetsa kukula kwa chithunzicho.

Timagwiritsa ntchito Alpine

Njira ina yosungira pa kukula kwa chithunzi ndikugwiritsa ntchito chithunzi chaching'ono cha kholo. Chithunzi cha makolo ndi chithunzi chomwe chifaniziro chathu chakonzedwa. Chigawo chapansi chikufotokozedwa ndi lamulo FROM mu Dockerfile. Kwa ife, tikugwiritsa ntchito chithunzi chochokera ku Ubuntu chomwe chili kale ndi ma nodejs. Ndipo amalemera...

$ docker images -a | grep node
node 12.16.2 406aa3abbc6c 17 minutes ago 916MB

... pafupifupi gigabyte. Mutha kuchepetsa kwambiri voliyumu pogwiritsa ntchito chithunzi chozikidwa pa Alpine Linux. Alpine ndi Linux yaying'ono kwambiri. Chithunzi cha docker cha ma nodejs ozikidwa pa alpine chimalemera 88.5 MB yokha. Kotero tiyeni tisinthe chithunzi chathu chamoyo m'nyumba:

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

Tinayenera kukhazikitsa zinthu zina zofunika kuti tipange pulogalamuyo. Inde, Angular samamanga popanda Python Β―(Β°_o)/Β―

Koma kukula kwa chithunzi kudatsikira ku 150 MB:

REPOSITORY   TAG      IMAGE ID       CREATED          SIZE
app          latest   aa031edc315a   22 minutes ago   761MB

Tiyeni tipite patsogolo.

Multistage msonkhano

Sizinthu zonse zomwe zili pachithunzichi zomwe timafunikira pakupanga.

$ 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

Ndi chithandizo cha docker run app ls -lah tinayambitsa chidebe chotengera chithunzi chathu app nachita lamulo m’menemo ls -lah, pambuyo pake chidebecho chinamaliza ntchito yake.

Popanga timangofunika chikwatu dist. Pankhaniyi, mafayilo ayenera kuperekedwa kunja. Mutha kuyendetsa seva ya HTTP pa nodejs. Koma ife tipangitsa izo kukhala zosavuta. Tangoganizirani liwu la Chirasha lomwe lili ndi zilembo zinayi "y". Kulondola! Ynzhynyksy. Tiyeni titenge chithunzi ndi nginx, ikani chikwatu mmenemo dist ndi config yaying'ono:

server {
    listen 80 default_server;
    server_name localhost;
    charset utf-8;
    root /app/dist;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

Kumanga kwa masitepe ambiri kudzatithandiza kuchita zonsezi. Tiyeni tisinthe Dockerfile yathu:

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 .

Tsopano tili ndi malangizo awiri FROM mu Dockerfile, aliyense waiwo amayendetsa njira yomanga yosiyana. Tinayitana woyamba builder, koma kuyambira komaliza KUCHOKERA, chithunzi chathu chomaliza chidzakonzedwa. Chomaliza ndikutengera chojambula cha msonkhano wathu mu gawo lapitalo mu chithunzi chomaliza ndi nginx. Kukula kwa chithunzicho kwatsika kwambiri:

REPOSITORY   TAG      IMAGE ID       CREATED          SIZE
app          latest   2c6c5da07802   29 minutes ago   36MB

Tiyeni tiyendetse chidebecho ndi chithunzi chathu ndikuwonetsetsa kuti zonse zikuyenda:

docker run -p8080:80 app

Pogwiritsa ntchito -p8080:80 njira, tidatumiza doko 8080 pamakina athu obwera ku doko 80 mkati mwa chidebe momwe nginx imayendera. Tsegulani mu msakatuli http://localhost:8080/ ndipo tikuwona ntchito yathu. Zonse zikuyenda!

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Kuchepetsa kukula kwa chithunzi kuchokera ku 1.74 GB mpaka 36 MB kumachepetsa kwambiri nthawi yomwe imatenga kuti mupereke pulogalamu yanu yopanga. Koma tiyeni tibwerere ku nthawi ya msonkhano.

$ 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

Kusintha dongosolo la zigawo

Masitepe athu atatu oyamba adasungidwa (hint Using cache). Pa sitepe yachinayi, mafayilo onse a polojekiti amakopera ndipo pa sitepe yachisanu kudalira kumayikidwa RUN npm ci - mpaka 47.338s. Chifukwa chiyani kuyikanso zodalira nthawi zonse ngati zikusintha kawirikawiri? Tiyeni tiwone chifukwa chake sanasungidwe. Chowonadi ndi chakuti Docker adzayang'ana wosanjikiza ndi wosanjikiza kuti awone ngati lamulo ndi mafayilo okhudzana nawo asintha. Pa gawo lachinayi, timakopera mafayilo onse a polojekiti yathu, ndipo pakati pawo, pali zosintha, kotero Docker samangotenga wosanjikiza uwu pa cache, komanso onse otsatira! Tiyeni tisinthe pang'ono pa 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 .

Choyamba, package.json ndi package-lock.json amakopedwa, ndiye zodalira zimayikidwa, ndipo pokhapokha polojekiti yonseyo imakopedwa. Zotsatira zake:

$ 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

Masekondi 46 m'malo mwa mphindi 3 - bwino kwambiri! Dongosolo loyenera la zigawo ndilofunika: choyamba timatengera zomwe sizisintha, ndiye zomwe zimasintha kawirikawiri, ndipo pamapeto pake zomwe zimasintha nthawi zambiri.

Kenako, mawu ochepa okhudza kusonkhanitsa zithunzi mu machitidwe a CI/CD.

Kugwiritsa ntchito zithunzi zakale posungira

Ngati tigwiritsa ntchito njira ya SaaS pomanga, ndiye kuti cache ya Docker yapafupi ikhoza kukhala yoyera komanso yatsopano. Kuti mupatse docker malo kuti atenge zigawo zophikidwa, mupatseni chithunzi chomangidwa kale.

Tiyeni titenge chitsanzo chopanga ntchito yathu mu GitHub Actions. Timagwiritsa ntchito config

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

Chithunzicho chimasonkhanitsidwa ndikukankhidwira ku GitHub Packages mumphindi ziwiri ndi masekondi 20:

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Tsopano tiyeni tisinthe kumanga kuti cache igwiritsidwe ntchito kutengera zithunzi zomwe zidamangidwa kale:

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

Choyamba tiyenera kukuuzani chifukwa chake malamulo awiri akuyambitsidwa build. Chowonadi ndi chakuti mumsonkhano wamagulu ambiri chifaniziro chotsatira chidzakhala chamagulu kuchokera pagawo lomaliza. Pankhaniyi, zigawo zochokera m'magawo am'mbuyomu sizingaphatikizidwe pachithunzichi. Chifukwa chake, mukamagwiritsa ntchito chithunzi chomaliza kuchokera pamapangidwe am'mbuyomu, Docker sangathe kupeza zigawo zokonzeka kuti amange chithunzicho ndi ma nodejs (gawo lomanga). Pofuna kuthetsa vutoli, chithunzi chapakati chimapangidwa $IMAGE_NAME-builder-stage ndipo imakankhidwira ku GitHub Packages kuti igwiritsidwe ntchito pomanganso ngati gwero la cache.

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Nthawi ya msonkhano wonse inachepetsedwa kukhala mphindi imodzi ndi theka. Theka la miniti limatha kukoka zithunzi zam'mbuyo.

Kuganiziratu

Njira ina yothetsera vuto la cache yoyera ya Docker ndikusuntha zigawo zina mu Dockerfile ina, kumanga padera, kukankhira mu Container Registry ndikuigwiritsa ntchito ngati kholo.

Timapanga chithunzi chathu cha nodejs kuti tipange pulogalamu ya Angular. Pangani Dockerfile.node mu polojekitiyi

FROM node:12.16.2-alpine3.11
RUN apk --no-cache --update --virtual build-dependencies add 
    python 
    make 
    g++

Timasonkhanitsa ndikukankhira chithunzi chapagulu ku Docker Hub:

docker build -t exsmund/node-for-angular -f Dockerfile.node .
docker push exsmund/node-for-angular:latest

Tsopano mu Dockerfile yathu yayikulu timagwiritsa ntchito chithunzi chomalizidwa:

FROM exsmund/node-for-angular:latest as builder
...

Muchitsanzo chathu, nthawi yomanga sinachepe, koma zithunzi zomangidwa kale zitha kukhala zothandiza ngati muli ndi mapulojekiti ambiri ndipo muyenera kuyika zodalira zomwezo pa chilichonse.

Malangizo ena amomwe mungafulumizitse kupanga zithunzi za Docker. Mwachitsanzo, mpaka 30 masekondi

Tidawona njira zingapo zofulumizitsa kupanga zithunzi za docker. Ngati mukufuna kuti ntchitoyo ipite mofulumira, yesani kugwiritsa ntchito izi mu polojekiti yanu:

  • kuchepetsa nkhani;
  • kugwiritsa ntchito zithunzi zazing'ono za makolo;
  • multistage msonkhano;
  • kusintha dongosolo la malangizo mu Dockerfile kuti mugwiritse ntchito bwino posungira;
  • kukhazikitsa cache mu machitidwe a CI / CD;
  • kupanga koyambirira kwa zithunzi.

Ndikukhulupirira kuti chitsanzochi chidzamveketsa bwino momwe Docker imagwirira ntchito, ndipo mudzatha kukonza momwe mungatumizire. Kuti muthe kusewera ndi zitsanzo kuchokera m'nkhaniyi, malo osungira apangidwa https://github.com/devopsprodigy/test-docker-build.

Source: www.habr.com

Kuwonjezera ndemanga