Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 segondra

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.

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 segondra

Manana traikefa tsara amin'ny famoronana sy fanohanana tranonkala media izahay: TASS, The Bell, "Gazety vaovao", Republic… Vao tsy ela akory izay dia nanitatra ny portfolio-nay izahay tamin'ny famoahana tranonkala vokatra fampahatsiahivana. Ary na dia nampidirina haingana aza ny endri-javatra vaovao ary namboarina ny bibikely taloha, dia nanjary olana lehibe ny fametrahana miadana.

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.

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 segondra

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!

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 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:

  1. Fafantsika eo an-toerana ny sary mba tsy hisy fiantraikany amin'ny fitsapana ny hazakazaka teo aloha.
    docker rmi $(docker images -q)
  2. Sambany izahay no manomboka ny fananganana.
    time docker build -t app .
  3. Ovainay ny rakitra src/index.html - maka tahaka ny asan'ny programmer izahay.
  4. 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 http://localhost:8080/ ary hitanay ny fampiharana anay. Mandeha ny zava-drehetra!

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 segondra

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:

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 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.

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 segondra

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.

Torohevitra sasantsasany momba ny fomba hanafainganana ny fananganana sary Docker. Ohatra, hatramin'ny 30 segondra

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 https://github.com/devopsprodigy/test-docker-build.

Source: www.habr.com

Add a comment