Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Pele karolo e qala tlhahiso, matsatsing ana a liletsa tse rarahaneng le CI/CD, ho na le tsela e telele eo u lokelang ho e etsa ho tloha ho boitlamo ho ea litekong le ho fana. Nakong e fetileng, o ne o ka kenya lifaele tse ncha ka FTP (ha ho sa na motho ea etsang joalo, ho joalo?), 'me ts'ebetso ea "deployment" e ile ea nka metsotsoana. Hona joale o hloka ho etsa kopo ea ho kopanya 'me u eme nako e telele hore sebopeho se fihle ho basebelisi.

Karolo ea tsela ena ke ho aha setšoantšo sa Docker. Ka linako tse ling kopano e nka metsotso, ka linako tse ling metsotso e mashome, e leng ntho e ke keng ea bitsoa e tloaelehileng. Sehloohong sena, re tla nka kopo e bonolo eo re tla e kenya setšoantšong, re sebelise mekhoa e mengata ho potlakisa mohaho, le ho sheba mekhoa e mengata ea hore na mekhoa ena e sebetsa joang.

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Re na le boiphihlelo bo botle ba ho theha le ho ts'ehetsa liwebsaete tsa media: TSIETSI, The Bell, "Koranta e Ncha", Rephabliki… Ha se khale re atolositse photefolio ea rona ka ho lokolla sebaka sa marang-rang sa sehlahisoa Khopotso. 'Me le hoja likarolo tse ncha li ile tsa eketsoa ka potlako' me litšitšili tsa khale li lokisoa, ho tsamaisoa butle ho ile ha fetoha bothata bo boholo.

Re kenya letsoho ho GitLab. Re bokella litšoantšo, re li sutumelletsa ho GitLab Registry ebe re li hlahisa tlhahiso. Ntho e telele ka ho fetisisa lethathamong lena ke ho bokella litšoantšo. Mohlala: ntle le ts'ebetso, mohaho o mong le o mong o ka morao o nkile metsotso e 14.

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Qetellong, ho ile ha hlaka hore re ke ke ra hlola re phela ka tsela ena, ’me ra lula fatše ho fumana hore na ke hobane’ng ha litšoantšo li ne li nka nako e telele hakana ho bokella. Ka lebaka leo, re ile ra khona ho fokotsa nako ea kopano hore e be metsotsoana e 30!

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Bakeng sa sengoloa sena, e le hore re se ke ra tlamelloa tikolohong ea Khopotso, a re shebeng mohlala oa ho bokella kopo e se nang letho ea Angular. Kahoo, ha re theheng kopo ea rona:

ng n app

Eketsa PWA ho eona (re ntse re tsoela pele):

ng add @angular/pwa --project app

Ha liphutheloana tsa npm li ntse li jarolloa, ha re boneng hore na setšoantšo sa docker se sebetsa joang. Docker e fana ka bokhoni ba ho paka lits'ebetso le ho li tsamaisa sebakeng se ka thoko se bitsoang setshelo. Ka lebaka la ho itšehla thajana, o ka tsamaisa lijana tse ngata ka nako e le 'ngoe ho seva se le seng. Lijana li bobebe haholo ho feta mechini ea sebele hobane li matha ka kotloloho kernel ea sistimi. Ho tsamaisa setshelo ka ts'ebeliso ea rona, re hloka pele ho theha setšoantšo seo ho sona re tla paka tsohle tse hlokahalang hore kopo ea rona e sebetse. Ha e le hantle, setšoantšo ke kopi ea sistimi ea faele. Ka mohlala, nka Dockerfile:

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

Dockerfile ke sehlopha sa litaelo; Ka ho etsa e 'ngoe le e' ngoe ea tsona, Docker e tla boloka liphetoho ho sistimi ea faele mme e li koahele ho tse fetileng. Sehlopha se seng le se seng se iketsetsa lera la sona. 'Me setšoantšo se phethiloeng ke lihlopha tse kopantsoeng hammoho.

Seo u lokelang ho se tseba: karolo e 'ngoe le e' ngoe ea Docker e ka boloka cache. Haeba ho se letho le fetohileng ho tloha ha ho hahoa ho qetela, joale ho e-na le ho phethahatsa taelo, docker e tla nka lera le entsoeng hantle. Kaha keketseho e kholo ea lebelo la ho haha ​​e tla ba ka lebaka la tšebeliso ea cache, ha re lekanya lebelo la ho haha ​​re tla ela hloko ka ho khetheha ho haha ​​​​setšoantšo se nang le cache e lokiselitsoeng. Kahoo, mohato ka mohato:

  1. Re hlakola litšoantšo sebakeng sa heno e le hore matha a fetileng a se ke a ama tlhahlobo.
    docker rmi $(docker images -q)
  2. Re thakhola moaho khetlo la pele.
    time docker build -t app .
  3. Re fetola faele ea src/index.html - re etsisa mosebetsi oa moqapi.
  4. Re tsamaisa mohaho lekhetlo la bobeli.
    time docker build -t app .

Haeba tikoloho ea ho haha ​​​​lits'oants'o e hlophisitsoe ka nepo (ho feta ka tlase), ha moaho o qala, Docker e tla be e se e na le li-cache tse ngata ka sekepeng. Mosebetsi oa rona ke ho ithuta ho sebelisa cache e le hore moaho o tsamaee kapele kamoo ho ka khonehang. Kaha re nka hore ho tsamaisa moaho ntle le cache ho etsahala hanngoe feela - lekhetlo la pele - ka hona re ka iphapanyetsa hore na lekhetlo la pele le ne le lieha hakae. Litekong, ts'ebetso ea bobeli ea mohaho ke ea bohlokoa ho rona, ha li-cache li se li futhumetse 'me re itokiselitse ho baka kaka ea rona. Leha ho le joalo, litlhahiso tse ling li tla ama mokhoa oa pele oa ho haha.

Ha re keng re behe Dockerfile e hlalositsoeng ka holimo foldareng ea projeke mme re qale ho aha. Mananeo ohle a khutsufalitsoe molemong oa ho bala habonolo.

$ 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

Re fetola litaba tsa src/index.html ebe re e tsamaisa lekhetlo la bobeli.

$ 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

Ho bona hore na re na le setšoantšo, tsamaisa taelo docker images:

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

Pele o haha, docker e nka lifaele tsohle maemong a hajoale ebe e li romella ho daemon ea eona Sending build context to Docker daemon 409MB. Moelelo oa moaho o hlalosoa e le khang ea ho qetela ea taelo ea kaho. Tabeng ea rona, ena ke bukana ea hajoale - ".", - 'me Docker e hula ntho e ngoe le e ngoe eo re nang le eona foldareng ena. 409 MB e ngata: a re nahaneng ka mokhoa oa ho e lokisa.

Ho fokotsa moelelo oa taba

Ho fokotsa maemo, ho na le likhetho tse peli. Kapa beha lifaele tsohle tse hlokahalang bakeng sa ho bokana foldareng e fapaneng 'me u supe moelelo oa docker ho foldareng ena. Sena se kanna sa se be bonolo kamehla, ka hona hoa khoneha ho hlakisa mekhelo: se sa lokelang ho huleloa moelelong. Ho etsa sena, kenya faele ea .dockerignore morerong 'me u bontše se sa hlokahaleng bakeng sa mohaho:

.git
/node_modules

ebe u tsamaisa mohaho hape:

$ 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 e molemo haholo ho feta 409 MB. Re boetse re fokotsa boholo ba setšoantšo ho tloha ho 1.74 ho isa ho 1.38 GB:

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

Ha re leke ho fokotsa boholo ba setšoantšo ho ea pele.

Re sebelisa Alpine

Tsela e 'ngoe ea ho boloka boholo ba setšoantšo ke ho sebelisa setšoantšo se senyenyane sa motsoali. Setšoantšo sa batsoali ke setšoantšo seo setšoantšo sa rona se lokiselitsoeng ho sona. Lera le ka tlase le hlalosoa ke taelo FROM ho Dockerfile. Tabeng ea rona, re sebelisa setšoantšo se thehiloeng ho Ubuntu se seng se na le li-nodejs tse kentsoeng. Mme e boima...

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

... hoo e batlang e le gigabyte. U ka fokotsa molumo haholo ka ho sebelisa setšoantšo se thehiloeng ho Alpine Linux. Alpine ke Linux e nyane haholo. Setšoantšo sa docker bakeng sa li-nodejs tse thehiloeng ho alpine se boima ba 88.5 MB feela. Kahoo a re nkeng sebaka sa setšoantšo sa rona se phelang ka matlung:

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

Re ile ra tlameha ho kenya lintho tse ling tse hlokahalang ho aha kopo. Ee, Angular ha e hahe ntle le Python ¯(°_o)/¯

Empa boholo ba setšoantšo bo theohetse ho 150 MB:

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

Ha re feteleng ho feta moo.

Kopano ea mekhahlelo e mengata

Hase ntho e 'ngoe le e' ngoe e setšoantšong seo re se hlokang tlhahisong.

$ 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

Ka thuso ea docker run app ls -lah re ile ra qala setshelo ho latela setšoantšo sa rona app mme a phetha taelo ho yona ls -lah, ka mor’a moo sejana se ile sa phetha mosebetsi oa sona.

Ka tlhahiso re hloka feela foldara dist. Tabeng ena, lifaele ka tsela e itseng li hloka ho fanoa ka ntle. U ka tsamaisa seva ea HTTP ho li-nodejs. Empa re tla e nolofatsa. Nahana ka lentsoe la Serussia le nang le litlhaku tse 'ne "y". Ho lokile! Ynzhynyksy. Ha re nke setšoantšo ka nginx, kenya foldara ho eona dist le config e nyane:

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

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

Kaho ea mekhahlelo e mengata e tla re thusa ho etsa tsena tsohle. Ha re fetoleng Dockerfile ea rona:

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 .

Hona joale re na le litaelo tse peli FROM ho Dockerfile, e 'ngoe le e' ngoe ea tsona e tsamaisa mohato o fapaneng oa ho aha. Re ile ra bitsa ea pele builder, empa ho tloha ho ea ho qetela HO TŠOA, setšoantšo sa rōna sa ho qetela se tla lokisoa. Mohato oa ho qetela ke ho kopitsa lintho tsa maiketsetso tsa kopano ea rona mohatong o fetileng ho ea setšoantšong sa ho qetela ka nginx. Boholo ba setšoantšo bo fokotsehile haholo:

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

Ha re tsamaise setshelo ka setšoantšo sa rona mme re netefatse hore tsohle lia sebetsa:

docker run -p8080:80 app

Re sebelisa khetho ea -p8080:80, re rometse port 8080 mochining oa rona oa moamoheli ho port 80 ka har'a setshelo moo nginx e mathang teng. Bula ho sebatli http://localhost:8080/ mme re bona kopo ya rona. Tsohle lia sebetsa!

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Ho fokotsa boholo ba setšoantšo ho tloha ho 1.74 GB ho ea ho 36 MB ho fokotsa haholo nako ea ho fana ka kopo ea hau ho tlhahiso. Empa ha re khutleleng nakong ea kopano.

$ 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

Ho fetola tatellano ea lihlopha

Mehato ea rona ea pele e meraro e ne e bolokiloe (hint Using cache). Mohato oa bone, lifaele tsohle tsa morero li kopitsoa 'me mohatong oa bohlano ho itšetlehile ka litšepiso RUN npm ci - hoo e ka bang 47.338s. Hobaneng o kenya litšepe nako le nako haeba li fetoha ka seoelo? A re bone hore na ke hobane'ng ha li sa ka tsa bolokoa. Taba ke hore Docker e tla hlahloba lera ka lera ho bona hore na taelo le lifaele tse amanang le eona li fetohile. Mohato oa bone, re kopitsa lifaele tsohle tsa morero oa rona, 'me har'a tsona, ho na le liphetoho, kahoo Docker ha e nke feela lera lena ho tsoa ho cache, empa le tsohle tse latelang! Ha re etseng liphetoho tse nyane ho 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 .

Ntlha ea pele, package.json le package-lock.json li kopitsoa, ​​ebe ho kenngoa ho itšetlehileng ka eona, 'me feela ka mor'a hore morero oohle o kopitsoe. Ka hoo:

$ 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

Metsotsoana e 46 sebakeng sa metsotso e 3 - e betere haholo! Taelo e nepahetseng ea lihlopha ke ea bohlokoa: pele re kopitsa se sa fetoheng, ebe ke sefe se fetohang ka seoelo, 'me qetellong se fetoha hangata.

Ka mor'a moo, mantsoe a seng makae mabapi le ho bokella litšoantšo ho mekhoa ea CI / CD.

Ho sebelisa litšoantšo tse fetileng bakeng sa cache

Haeba re sebelisa mofuta o mong oa tharollo ea SaaS bakeng sa moaho, joale cache ea lehae ea Docker e kanna ea hloeka ebile e le ncha. Ho fa docker sebaka sa ho fumana likarolo tse halikiloeng, mo fe setšoantšo se hahiloeng se fetileng.

Ha re nke mohlala oa ho aha kopo ea rona ho GitHub Actions. Re sebelisa sesebelisoa sena

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

Setšoantšo se bokelloa ebe se sutumetsoa ho GitHub Packages ka metsotso e 'meli le metsotsoana e 20:

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Joale ha re fetoleng moaho e le hore cache e sebelisoe ho ipapisitse le litšoantšo tse hahiloeng pele:

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

Pele re hloka ho u bolella hore na ke hobane'ng ha litaelo tse peli li hlahisoa build. 'Nete ke hore kopanong ea mekhahlelo e mengata setšoantšo se hlahisoang se tla ba sete sa lihlopha ho tloha sethaleng sa ho qetela. Tabeng ena, lihlopha tse tsoang ho lihlopha tse fetileng li ke ke tsa kenngoa setšoantšong. Ka hona, ha u sebelisa setšoantšo sa ho qetela ho tloha mohahong o fetileng, Docker e ke ke ea khona ho fumana likarolo tse lokiselitsoeng ho haha ​​​​setšoantšo ka li-nodejs (sethala sa mohaho). E le ho rarolla bothata bona, ho etsoa setšoantšo sa bohareng $IMAGE_NAME-builder-stage 'me e sutumelletsoa ho GitHub Packages e le hore e ka sebelisoa mohahong o latelang e le mohloli oa cache.

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Kakaretso ea nako ea kopano e ile ea fokotsoa hore e be motsotso le halofo. Halofo ea motsotso e sebelisoa ho hula litšoantšo tse fetileng.

Ho nahana esale pele

Mokhoa o mong oa ho rarolla bothata ba cache e hloekileng ea Docker ke ho tsamaisa likarolo tse ling ho Dockerfile e 'ngoe, ho e aha ka thoko, ho e sutumelletsa ho Registry ea Container ebe o e sebelisa joalo ka motsoali.

Re iketsetsa setšoantšo sa nodejs ho aha sesebelisoa sa Angular. Theha Dockerfile.node morerong

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

Re bokella le ho sutumelletsa setšoantšo sa sechaba ho Docker Hub:

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

Hona joale ho Dockerfile ea rona ea mantlha re sebelisa setšoantšo se felileng:

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

Mohlala oa rona, nako ea ho haha ​​ha ea ka ea fokotseha, empa litšoantšo tse hahiloeng esale pele li ka ba molemo haeba u na le merero e mengata 'me u tlameha ho kenya litšepiso tse tšoanang ho e' ngoe le e 'ngoe ea tsona.

Malebela a mang a ho potlakisa ho aha litšoantšo tsa Docker. Ka mohlala, ho fihlela metsotsoana e 30

Re shebile mekhoa e 'maloa ea ho potlakisa moaho oa litšoantšo tsa docker. Haeba u batla hore thomello e tsamaee kapele, leka ho sebelisa sena morerong oa hau:

  • ho fokotsa maemo;
  • tšebeliso ea litšoantšo tse nyenyane tsa motsoali;
  • kopano ea mekhahlelo e mengata;
  • ho fetola tatellano ea litaelo ho Dockerfile ho sebelisa cache hantle;
  • ho theha cache ho litsamaiso tsa CI / CD;
  • tlhahiso ea pele ea litšoantšo.

Ke ts'epa hore mohlala o tla hlakisa hore na Docker e sebetsa joang, 'me u tla khona ho hlophisa phepelo ea hau hantle. E le ho bapala ka mehlala e hlahang sehloohong, polokelo e entsoe https://github.com/devopsprodigy/test-docker-build.

Source: www.habr.com

Eketsa ka tlhaloso