Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Chimiro chisati chapinda mukugadzirwa, mumazuva ano evaimbi vakaomarara uye CI/CD, pane nzira refu yekubva kubva pakuzvipira kuenda kumiedzo uye kuendesa. Pakutanga, iwe waigona kurodha mafaera matsva kuburikidza neFTP (hapana anoita izvozvo, handiti?), uye iyo "deployment" maitiro akatora masekondi. Iye zvino iwe unofanirwa kugadzira chikumbiro chekubatanidza uye kumirira kwenguva yakareba kuti chimiro chisvike vashandisi.

Chikamu cheiyi nzira iri kuvaka Docker mufananidzo. Dzimwe nguva gungano rinotora maminetsi, dzimwe nguva makumi emaminetsi, izvo zvisingakwanisi kunzi zvakajairika. Muchinyorwa chino, isu tichatora yakapusa application yatinoisa mumufananidzo, toshandisa nzira dzinoverengeka kukurumidza kuvaka, uye titarise nuances yekuti nzira idzi dzinoshanda sei.

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Isu tine ruzivo rwakanaka mukugadzira nekutsigira midhiya mawebhusaiti: TASI, The Bell, "New Newspaper", utongi hwegutsaruzhinji… Nguva pfupi yapfuura takawedzera portfolio yedu nekuburitsa webhusaiti yechigadzirwa Chiyeuchidzo. Uye nepo maficha matsva akakurumidza kuwedzerwa uye tsikidzi dzekare dzakagadziriswa, kunonoka kutumira kwakava dambudziko hombe.

Isu tinoendesa kuGitLab. Isu tinounganidza mifananidzo, toisundira kuGitLab Registry uye tigoiburitsa kuti igadzire. Chinhu chakareba pane iyi rondedzero kuunganidza mifananidzo. Semuenzaniso: pasina optimization, imwe neimwe yekumashure kuvaka yakatora maminetsi gumi nemana.

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Pakupedzisira, zvakava pachena kuti hatichakwanisa kurarama seizvi, uye takagara pasi kuti tione kuti sei mifananidzo yakanga ichitora nguva yakareba kuti iunganidzwe. Somugumisiro, takakwanisa kuderedza nguva yegungano kusvika kumasekonzi 30!

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Kune ichi chinyorwa, kuti chisasungirwe kune Yekuyeuchidza nharaunda, ngatitarisei muenzaniso wekuunganidza isina chinhu Angular application. Saka, ngatigadzirirei application yedu:

ng n app

Wedzera PWA kwairi (tiri kufambira mberi):

ng add @angular/pwa --project app

Ipo miriyoni npm mapakeji ari kutorwa pasi, ngationei kuti mufananidzo wedocker unoshanda sei. Docker inopa kugona kurongedza maapplication uye nekuamhanyisa munzvimbo yakasarudzika inonzi mudziyo. Nekuda kwekuzviparadzanisa nevamwe, unogona kumhanyisa midziyo yakawanda panguva imwe chete pane imwe server. Midziyo yakareruka kupfuura machina chaiwo nekuti anomhanya akananga pane system kernel. Kuti timhanye mudziyo une application yedu, isu chekutanga tinoda kugadzira mufananidzo watinozorongedza zvese zvinodiwa kuti application yedu ishande. Chaizvoizvo, mufananidzo ikopi yefaira system. Semuenzaniso, tora iyo Dockerfile:

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

A Dockerfile seti yemirairo; Nekuita imwe neimwe yadzo, Docker inochengetedza shanduko kune iyo faira system uye nekuifukidza pane yakapfuura. Chikwata chega chega chinogadzira rayo. Uye mufananidzo wakapedzwa ndiwo mitsara yakabatanidzwa pamwe chete.

Chii chakakosha kuziva: yega yega Docker layer inogona cache. Kana pasina chachinja kubva pakuvaka kwekupedzisira, saka pane kuita murairo, docker inotora yakagadzirira-yakagadzirwa layer. Sezvo kuwedzera kukuru kwekumhanya kwekuvaka kuchave nekuda kwekushandiswa kwecache, kana kuyera kukurumidza kwekuvaka isu tichateerera zvakananga kuvaka chifananidzo chine cache yakagadzirira. Saka, nhanho nhanho:

  1. Isu tinodzima iyo mifananidzo munharaunda kuitira kuti yapfuura kumhanya kusakanganisa bvunzo.
    docker rmi $(docker images -q)
  2. Isu tinoparura kuvaka kekutanga.
    time docker build -t app .
  3. Isu tinoshandura iyo src/index.html faira - tinotevedzera basa remugadziri.
  4. Tinomhanya kuvaka kechipiri.
    time docker build -t app .

Kana iyo nharaunda yekuvaka mifananidzo yakagadziriswa nemazvo (zvimwe pane izvo pazasi), ipapo kana kuvaka kwatanga, Docker achange atove neboka remacache pabhodhi. Basa redu nderekudzidza kushandisa cache kuitira kuti chivakwa chiende nekukurumidza sezvinobvira. Sezvo isu tiri kufungidzira kuti kumhanya chivakwa chisina cache chinongoitika kamwe chete - kekutanga chaiko - isu tinokwanisa kufuratira kuti kunonoka kwekutanga kwaive kwakadii. Mukuedzwa, kumhanya kwechipiri kwekuvaka kunokosha kwatiri, apo cache inenge yatodziya uye isu takagadzirira kubika keke yedu. Nekudaro, mamwe matipi anozokanganisawo yekutanga kuvaka.

Ngatiise iyo Dockerfile yakatsanangurwa pamusoro mufaira reprojekiti uye titange kuvaka. Zvese zvinyorwa zvakapfupikiswa kuti zvive nyore kuverenga.

$ 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

Isu tinoshandura zviri mukati src/index.html uye tomhanya kechipiri.

$ 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 uone kana isu tine mufananidzo, mhanya murairo docker images:

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

Asati avaka, docker inotora mafaera ese ari mumamiriro azvino uye anoatumira kune daemon yayo Sending build context to Docker daemon 409MB. Mamiriro ekuvaka anotsanangurwa seyekupedzisira nharo kune kuvaka command. Kwatiri, iri ndiro razvino dhairekitori - ".", - uye Docker inokweva zvese zvatinazvo mufolda iyi. 409 MB yakawanda: ngatifungei kuti tingaigadzirisa sei.

Kuderedza mamiriro ezvinhu

Kuti kuderedze chirevo, pane zvingasarudzwa zviviri. Kana kuti isa mafaera ese anodiwa kuungana mune imwe folda uye unongedza iyo docker mamiriro kune iyi folda. Izvi zvingave zvisiri nyore nguva dzose, saka zvinokwanisika kutsanangura kunze: izvo zvisingafanirwe kudhonzerwa muchirevo. Kuti uite izvi, isa .dockerignore faira mupurojekiti uye ratidza izvo zvisingadiwi pakuvaka:

.git
/node_modules

uye mhanya kuvaka zvakare:

$ 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 iri nani kupfuura 409 MB. Isu takadzikisawo saizi yemufananidzo kubva 1.74 kusvika 1.38 GB:

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

Ngatiedzei kuderedza saizi yemufananidzo zvakare.

Isu tinoshandisa Alpine

Imwe nzira yekuchengetedza pahukuru hwemufananidzo ndeye kushandisa diki mubereki mufananidzo. Chifananidzo chevabereki ndicho chifananidzo pachikonzero icho mufananidzo wedu wakagadzirirwa. Mutsara wepasi unotsanangurwa nemurairo FROM muDockerfile. Kwatiri isu, tiri kushandisa Ubuntu-based image iyo yatove ine nodejs yakaiswa. Uye inorema...

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

... inenge gigabyte. Unogona kuderedza zvakanyanya vhoriyamu uchishandisa mufananidzo wakavakirwa paAlpine Linux. Alpine iLinux idiki kwazvo. Iyo docker mufananidzo we nodejs yakavakirwa paalpine inorema chete 88.5 MB. Saka ngatitsive mufananidzo wedu unorarama mudzimba:

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

Taifanira kuisa zvimwe zvinhu zvinodiwa kuvaka application. Ehe, Angular haivake isina Python Β―(Β°_o)/Β―

Asi saizi yemufananidzo yakadonha kusvika 150 MB:

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

Ngatiende kumberi.

Multistage assembly

Hazvisi zvese zviri mumufananidzo ndizvo zvatinoda mukugadzira.

$ 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

Nekubatsirwa kwe docker run app ls -lah takaparura mudziyo unoenderana nemufananidzo wedu app uye akaita murayiro mairi ls -lah, mushure maizvozvo mudziyo wakapedza basa rawo.

Mukugadzira tinongoda folda dist. Muchiitiko ichi, mafaira neimwe nzira anoda kupiwa kunze. Iwe unogona kumhanya imwe sevha yeHTTP pane nodejs. Asi tichaita kuti zvive nyore. Fembera izwi rechiRussian rine mavara mana "y". Rudyi! Ynzhynyksy. Ngatitorei mufananidzo ne nginx, isa folda mairi dist uye diki config:

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

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

Multi-stage kuvaka ichatibatsira kuita zvese izvi. Ngatichinjei yedu 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 .

Iye zvino tine mirairo miviri FROM muDockerfile, imwe neimwe yadzo inomhanya nhanho yekuvaka yakasiyana. Takadana wekutanga builder, asi kutanga kubva kune yekupedzisira KUBVA, mufananidzo wedu wekupedzisira uchagadzirwa. Yekupedzisira nhanho ndeyekukopa iyo artifact yegungano redu mune yapfuura nhanho mumufananidzo wekupedzisira ne nginx. Saizi yemufananidzo yadzikira zvakanyanya:

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

Ngatimhanyei mudziyo nemufananidzo wedu uye tive nechokwadi chekuti zvese zvinoshanda:

docker run -p8080:80 app

Tichishandisa iyo -p8080:80 sarudzo, takatumira port 8080 pamushini wedu wekutambira kuchiteshi 80 mukati memudziyo umo nginx inomhanya. Vhura mubrowser http://localhost:8080/ uye tinoona kushanda kwedu. Zvose zviri kushanda!

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Kuderedza saizi yemufananidzo kubva 1.74 GB kusvika 36 MB kunoderedza zvakanyanya nguva yaunotora kuendesa chikumbiro chako mukugadzira. Asi ngatidzokerei panguva yeassembly.

$ 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

Kushandura kurongeka kwezvikamu

Nhanho dzedu nhatu dzekutanga dzakachengetwa (hint Using cache) Padanho rechina, mafaera ese epurojekiti anokopwa uye padanho rechishanu kutsamira kunoiswa RUN npm ci - kusvika ku47.338s. Sei uchidzoreredza kutsamira nguva dzese kana ichichinja kashoma? Ngatione kuti sei vasina kuchengetwa. Icho chiripo ndechekuti Docker ichatarisa layer ne layer kuti ione kana murairo uye mafaera ane hukama nawo achinja. Padanho rechina, tinokopa mafaera ese epurojekiti yedu, uye pakati pavo, hongu, pane shanduko, saka Docker haingotore dhizaini iyi kubva kucache, asiwo ese anotevera! Ngatiitei shanduko diki kuDockerfile.

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 .

Kutanga, package.json uye package-lock.json zvinokopwa, ipapo dependencies inoiswa, uye chete mushure mekuti purojekiti yese inokopwa. Semagumo:

$ 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 masekonzi panzvimbo 3 maminetsi - zviri nani! Kurongeka kwakaringana kwezvikamu kwakakosha: kutanga tinokopa izvo zvisingashanduki, zvino izvo zvisingawanzo chinja, uye pakupedzisira izvo zvinochinja kazhinji.

Tevere, mazwi mashoma nezve kuunganidza mifananidzo muCI/CD masisitimu.

Kushandisa mifananidzo yapfuura ye cache

Kana tikashandisa imwe mhando yeSaaS mhinduro yekuvaka, ipapo iyo yemunharaunda Docker cache inogona kunge yakachena uye nyowani. Kuti upe docker nzvimbo yekuwana zvidimbu zvakabikwa, mupe mufananidzo wakapfuura wakavakwa.

Ngatitorei muenzaniso wekuvaka application yedu muGitHub Zviito. Isu tinoshandisa iyi 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

Mufananidzo unounganidzwa uye unosundirwa kuGitHub Packages mumaminitsi maviri uye 20 masekondi:

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Zvino ngatichinjei kuvaka kuitira kuti cache ishandiswe zvichibva pamifananidzo yakavakwa yapfuura:

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

Kutanga tinoda kukuudza kuti nei mirairo miviri yakatangwa build. Ichokwadi ndechokuti mumusangano wezvikamu zvakawanda mufananidzo unoguma uchange uri seti yezvikamu kubva padanho rekupedzisira. Muchiitiko ichi, zvidimbu kubva kune zvakapfuura zvinyorwa hazvizoverengerwi mumufananidzo. Naizvozvo, kana uchishandisa mufananidzo wekupedzisira kubva kune yakapfuura kuvaka, Docker haizokwanisa kuwana akagadzirira akaturikidzana ekuvaka mufananidzo ne nodejs (muvaki nhanho). Kuti ugadzirise dambudziko iri, mufananidzo wepakati unogadzirwa $IMAGE_NAME-builder-stage uye inosundirwa kuGitHub Packages kuitira kuti igone kushandiswa mune inotevera kuvaka senge cache sosi.

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Nguva yose yegungano yakaderedzwa kusvika kuminiti imwe nehafu. Hafu yeminiti inopedzerwa kudhonza mifananidzo yapfuura.

Preimaging

Imwe nzira yekugadzirisa dambudziko reiyo Docker cache yakachena ndeyekufambisa mamwe matinji mune imwe Dockerfile, kuivaka zvakasiyana, kuisundira muContainer Registry uye kuishandisa semubereki.

Isu tinogadzira yedu nodejs mufananidzo kuvaka Angular application. Gadzira Dockerfile.node mupurojekiti

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

Isu tinounganidza nekusundidzira mufananidzo weveruzhinji muDocker Hub:

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

Iye zvino muDockerfile yedu huru tinoshandisa mufananidzo wapera:

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

Mumuenzaniso wedu, nguva yekuvaka haina kuderera, asi mifananidzo yakafanovakwa inogona kubatsira kana uine akawanda mapurojekiti uye uchifanira kuisa iwo anotsamira akafanana mune yega yega.

Mamwe matipi ekuti ungakurumidza sei kuvaka Docker mifananidzo. Somuenzaniso, kusvika 30 seconds

Takatarisa nzira dzinoverengeka dzekumhanyisa kuvakwa kwemifananidzo yedocker. Kana iwe uchida kuti kutumirwa kuende nekukurumidza, edza kushandisa izvi muprojekiti yako:

  • kuderedza mamiriro;
  • kushandiswa kwemifananidzo miduku yevabereki;
  • multistage assembly;
  • kushandura kurongeka kwemirairo muDockerfile kuti ishandise zvakanaka cache;
  • kumisikidza cache muCI / CD masisitimu;
  • kugadzirwa kwekutanga kwemifananidzo.

Ndinovimba muenzaniso uchajekesa mashandiro anoita Docker, uye uchakwanisa kunyatso gadzirisa kutumirwa kwako. Kuti utambe nemienzaniso kubva kuchinyorwa, repository yakagadzirwa https://github.com/devopsprodigy/test-docker-build.

Source: www.habr.com

Voeg