Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Mus tèid feart a-steach gu cinneasachadh, anns na làithean seo de orcastra iom-fhillte agus CI / CD, tha slighe fhada ri dhol bho ghealladh gu deuchainnean agus lìbhrigeadh. Roimhe sin, b’ urrainn dhut faidhlichean ùra a luchdachadh suas tro FTP (chan eil duine a’ dèanamh sin tuilleadh, ceart?), Agus thug am pròiseas “cleachdadh” diogan. A-nis feumaidh tu iarrtas co-aonaidh a chruthachadh agus feitheamh ùine mhòr airson am feart a ruighinn luchd-cleachdaidh.

Tha pàirt den t-slighe seo a’ togail ìomhaigh Docker. Aig amannan mairidh an co-chruinneachadh mionaidean, uaireannan deichean de mhionaidean, rud nach urrainn a bhith air a ghairm àbhaisteach. San artaigil seo, gabhaidh sinn tagradh sìmplidh a bheir sinn a-steach do ìomhaigh, cuiridh sinn grunn dhòighean an sàs gus an togail a luathachadh, agus bheir sinn sùil air na nuances air mar a tha na dòighean sin ag obair.

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Tha eòlas math againn ann a bhith a’ cruthachadh agus a’ toirt taic do làraich-lìn mheadhanan: TASS, An Clag, "Pàipear-naidheachd Ùr", Poblachd… O chionn ghoirid leudaich sinn ar cùram-roinne le bhith a’ leigeil a-mach làrach-lìn toraidh Cuimhneachan. Agus ged a chaidh feartan ùra a chuir ris gu sgiobalta agus seann bhiteagan a chàradh, thàinig cleachdadh slaodach gu bhith na dhuilgheadas mòr.

Bidh sinn gan cleachdadh gu GitLab. Bidh sinn a’ tional ìomhaighean, gan putadh gu Clàr GitLab agus gan sgaoileadh a-mach gu cinneasachadh. Is e an rud as fhaide air an liosta seo dealbhan a chruinneachadh. Mar eisimpleir: às aonais optimization, thug gach togail backend 14 mionaidean.

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Aig a’ cheann thall, dh’fhàs e soilleir nach b’ urrainn dhuinn a bhith beò mar seo tuilleadh, agus shuidh sinn sìos gus faighinn a-mach carson a thug na h-ìomhaighean cho fada ri chruinneachadh. Mar thoradh air an sin, chaidh againn air an ùine cruinneachaidh a lughdachadh gu 30 diogan!

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Airson an artaigil seo, gus nach bi sinn ceangailte ri àrainneachd Reminder, leig dhuinn sùil a thoirt air eisimpleir de bhith a’ cruinneachadh tagradh falamh Angular. Mar sin, cruthaichidh sinn an tagradh againn:

ng n app

Cuir PWA ris (tha sinn adhartach):

ng add @angular/pwa --project app

Fhad ‘s a thathas a’ luchdachadh sìos millean pasgan npm, leig dhuinn faighinn a-mach mar a tha ìomhaigh an docker ag obair. Tha Docker a’ toirt seachad comas air tagraidhean a phacadh agus an ruith ann an àrainneachd iomallach ris an canar soitheach. Taing do aonaranachd, faodaidh tu mòran shoithichean a ruith aig an aon àm air aon fhrithealaiche. Tha soithichean tòrr nas aotroime na innealan brìgheil oir bidh iad a’ ruith gu dìreach air kernel an t-siostaim. Gus soitheach a ruith leis an tagradh againn, feumaidh sinn an toiseach ìomhaigh a chruthachadh anns am bi sinn a’ pacadh a h-uile dad a tha riatanach airson an tagradh againn a ruith. Gu bunaiteach, tha ìomhaigh na leth-bhreac den t-siostam faidhle. Mar eisimpleir, gabh an Dockerfile:

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

Is e seata stiùiridh a th’ ann an Dockerfile; Le bhith a’ dèanamh gach aon dhiubh, sàbhalaidh Docker na h-atharrachaidhean air an t-siostam faidhle agus cuiridh iad thairis iad air an fheadhainn a bh’ ann roimhe. Bidh gach sgioba a 'cruthachadh a ìre fhèin. Agus tha an ìomhaigh chrìochnaichte na shreathan air an cur còmhla.

Na tha cudromach fios a bhith agad: faodaidh gach còmhdach Docker tasgadan. Mura h-eil dad air atharrachadh bhon togail mu dheireadh, an àite an àithne a chuir an gnìomh, gabhaidh an docker còmhdach deiseil. Leis gum bi am prìomh àrdachadh ann an astar togail mar thoradh air cleachdadh an tasgadan, nuair a bhios sinn a’ tomhas astar togail bheir sinn aire shònraichte do bhith a’ togail ìomhaigh le tasgadan deiseil. Mar sin, ceum air cheum:

  1. Sguabaidh sinn às na h-ìomhaighean gu h-ionadail gus nach toir ruith roimhe seo buaidh air an deuchainn.
    docker rmi $(docker images -q)
  2. Bidh sinn a’ cur air bhog an togail airson a’ chiad uair.
    time docker build -t app .
  3. Bidh sinn ag atharrachadh am faidhle src/index.html - bidh sinn ag atharrais air obair prògramadair.
  4. Bidh sinn a’ ruith an togail an dàrna turas.
    time docker build -t app .

Ma tha an àrainneachd airson ìomhaighean togail air a rèiteachadh gu ceart (barrachd air sin gu h-ìosal), an uairsin nuair a thòisicheas an togail, bidh dòrlach de caches air bòrd aig Docker mu thràth. Is e an obair againn a bhith ag ionnsachadh mar a chleachdas tu an tasgadan gus an tèid an togail cho luath ‘s a ghabhas. Leis gu bheil sinn a’ gabhail ris nach tachair a bhith a’ ruith togalach gun tasgadan ach aon turas – a’ chiad uair – mar sin is urrainn dhuinn dearmad a dhèanamh air cho slaodach sa bha a’ chiad turas sin. Ann an deuchainnean, tha an dàrna ruith den togail cudromach dhuinn, nuair a tha na caches air am blàthachadh mu thràth agus gu bheil sinn deiseil airson ar cèic a bhèicearachd. Ach, bheir cuid de mholaidhean buaidh cuideachd air a’ chiad togail.

Nach cuir sinn an Dockerfile a tha air a mhìneachadh gu h-àrd ann am pasgan a’ phròiseict agus tòisichidh sinn air an togail. Chaidh na liostaichean uile a dhlùthadh airson a bhith furasta an leughadh.

$ 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

Bidh sinn ag atharrachadh susbaint src/index.html agus ga ruith an dàrna turas.

$ 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

Gus faicinn a bheil an ìomhaigh againn, ruith an àithne docker images:

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

Mus tèid a thogail, bidh docker a’ toirt a h-uile faidhle sa cho-theacsa gnàthach agus gan cur chun deamhan aige Sending build context to Docker daemon 409MB. Tha an co-theacsa togail air a shònrachadh mar an argamaid mu dheireadh don àithne togail. Anns a’ chùis againn, is e seo an eòlaire gnàthach - “.”, - agus bidh Docker a’ slaodadh a h-uile rud a th’ againn sa phasgan seo. Tha 409 MB tòrr: smaoinichidh sinn air mar a chuireas sinn ceart e.

A 'lùghdachadh a' cho-theacsa

Gus an co-theacsa a lughdachadh, tha dà roghainn ann. No cuir a h-uile faidhle a tha a dhìth airson co-chruinneachadh ann am pasgan air leth agus comharraich co-theacs an docker don phasgan seo. Is dòcha nach bi seo an-còmhnaidh goireasach, agus mar sin tha e comasach eisgeachdan a shònrachadh: dè nach bu chòir a shlaodadh a-steach don cho-theacsa. Gus seo a dhèanamh, cuir am faidhle .dockerignore sa phròiseact agus comharraich na tha a dhìth airson an togail:

.git
/node_modules

agus ruith an togail a rìs :

$ 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

Tha 607.2 KB tòrr nas fheàrr na 409 MB. Lùghdaich sinn cuideachd meud an ìomhaigh bho 1.74 gu 1.38 GB:

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

Feuchaidh sinn ri meud an ìomhaigh a lughdachadh tuilleadh.

Bidh sinn a’ cleachdadh Alpach

Is e dòigh eile air sàbhaladh air meud ìomhaigh ìomhaigh bheag phàrant a chleachdadh. Is e ìomhaigh phàrantan an ìomhaigh air a bheil an ìomhaigh againn air ullachadh. Tha an ìre ìosal air a shònrachadh leis an àithne FROM ann an Dockerfile. Anns a ’chùis againn, tha sinn a’ cleachdadh ìomhaigh stèidhichte air Ubuntu aig a bheil nodejs air a chuir a-steach mu thràth. Agus tha cuideam air ...

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

... cha mhòr gigabyte. Faodaidh tu an tomhas-lìonaidh a lughdachadh gu mòr le bhith a’ cleachdadh ìomhaigh stèidhichte air Alpine Linux. 'S e Linux glè bheag a th' ann an Alpach. Tha an ìomhaigh docker airson nodejs stèidhichte air alpach le cuideam dìreach 88.5 MB. Mar sin cuireamaid an àite ar n-ìomhaigh bheothail anns na taighean:

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

Dh'fheumadh sinn cuid de rudan a stàladh a tha riatanach airson an aplacaid a thogail. Tha, cha bhith Angular a’ togail às aonais Python ¯(°_o)/¯

Ach thuit meud an ìomhaigh gu 150 MB:

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

Rachamaid eadhon nas fhaide.

Co-chruinneachadh ioma-ìre

Chan e a h-uile dad a tha san ìomhaigh a tha a dhìth oirnn ann an cinneasachadh.

$ 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

Le cuideachadh bho docker run app ls -lah chuir sinn air bhog soitheach stèidhichte air an ìomhaigh againn app agus rinn e an àithne a ta innte ls -lah, às deidh sin chuir an soitheach crìoch air an obair aige.

Ann an riochdachadh chan fheum sinn ach pasgan dist. Anns a 'chùis seo, feumaidh na faidhlichean a bhith air an toirt seachad taobh a-muigh. Faodaidh tu cuid de fhrithealaiche HTTP a ruith air nodejs. Ach nì sinn e nas fhasa. Dèan tomhas air facal Ruiseanach anns a bheil ceithir litrichean “y”. Deas! Annzhynyksy. Gabhamaid ìomhaigh le nginx, cuir pasgan ann dist agus rèiteachadh beag:

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

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

Cuidichidh togail ioma-ìre sinn gus seo uile a dhèanamh. Nach atharraich sinn ar 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 .

A-nis tha dà stiùireadh againn FROM anns an Dockerfile, bidh gach fear dhiubh a’ ruith ceum togail eadar-dhealaichte. Dh'ainmich sinn a 'chiad fhear builder, ach a 'tòiseachadh bhon fhear mu dheireadh BHO, bidh an ìomhaigh dheireannach againn air ullachadh. Is e an ceum mu dheireadh leth-bhreac a dhèanamh de artifact ar co-chruinneachadh anns a’ cheum roimhe sin a-steach don ìomhaigh dheireannach le nginx. Tha meud an ìomhaigh air a dhol sìos gu mòr:

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

Rachamaid an soitheach leis an ìomhaigh againn agus dèan cinnteach gu bheil a h-uile càil ag obair:

docker run -p8080:80 app

A’ cleachdadh an roghainn -p8080:80, chuir sinn air adhart port 8080 air an inneal aoigheachd againn gu port 80 taobh a-staigh an t-soithich far a bheil nginx a’ ruith. Fosgail ann am brabhsair http://localhost:8080/ agus chì sinn ar tagradh. Tha a h-uile dad ag obair!

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Le bhith a’ lughdachadh meud ìomhaigh bho 1.74 GB gu 36 MB gu mòr a’ lughdachadh na h-ùine a bheir e gus an tagradh agad a lìbhrigeadh gu cinneasachadh. Ach rachamaid air ais gu àm co-chruinneachaidh.

$ 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

Ag atharrachadh òrdugh nan sreathan

Chaidh a’ chiad trì ceumannan againn a thasgadh (sanas Using cache). Aig a 'cheathramh ceum, tha na faidhlichean pròiseict uile air an lethbhreacadh agus aig a' chòigeamh ceum tha eisimeileachd air an stàladh RUN npm ci - cho mòr ri 47.338s. Carson ath-stàlaich eisimeileachd gach turas ma dh’ atharraicheas iad glè ainneamh? Feuch an obraich sinn a-mach carson nach deach an tasgadh. Is e a’ phuing gum bi Docker a ’sgrùdadh còmhdach le còmhdach gus faicinn a bheil an àithne agus na faidhlichean co-cheangailte ris air atharrachadh. Aig a 'cheathramh ceum, bidh sinn a' dèanamh lethbhreac de na faidhlichean uile den phròiseact againn, agus nam measg, gu dearbh, tha atharrachaidhean ann, agus mar sin chan e a-mhàin gu bheil Docker a 'toirt an ìre seo bhon tasgadan, ach cuideachd a h-uile gin às dèidh sin! Dèanamaid atharrachaidhean beaga air an 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 .

An toiseach, thèid pack.json agus package-lock.json a chopaigeadh, an uairsin thèid eisimeileachd a chuir a-steach, agus dìreach às deidh sin thèid am pròiseact gu lèir a chopaigeadh. Mar thoradh:

$ 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 diogan an àite 3 mionaidean - fada nas fheàrr! Tha an òrdugh ceart de shreathan cudromach: an toiseach bidh sinn a 'dèanamh lethbhreac de na rudan nach eil ag atharrachadh, an uairsin dè a bhios ag atharrachadh gu tric, agus mu dheireadh dè a bhios ag atharrachadh gu tric.

An ath rud, beagan fhaclan mu bhith a’ cruinneachadh ìomhaighean ann an siostaman CI/CD.

A’ cleachdadh ìomhaighean roimhe airson tasgadan

Ma chleachdas sinn fuasgladh SaaS de sheòrsa air choreigin airson an togail, is dòcha gum bi an tasgadan Docker ionadail glan agus ùr. Gus àite a thoirt don docadair airson na sreathan bèicearachd fhaighinn, thoir dha an ìomhaigh a chaidh a thogail roimhe.

Gabhamaid eisimpleir de bhith a’ togail ar tagradh ann an Gnìomhan GitHub. Cleachdaidh sinn an rèiteachadh seo

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

Tha an ìomhaigh air a chruinneachadh agus air a phutadh gu Pacaidean GitHub ann an dà mhionaid agus 20 diog:

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

A-nis atharraichidh sinn an togalach gus am bi tasgadan air a chleachdadh stèidhichte air ìomhaighean a chaidh a thogail roimhe:

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

An toiseach feumaidh sinn innse dhut carson a tha dà àithne air an cur air bhog build. Is e an fhìrinn gur ann an co-chruinneachadh ioma-ìre a bhios an ìomhaigh mar thoradh air seata de shreathan bhon ìre mu dheireadh. Anns a 'chùis seo, cha tèid sreathan bho shreathan roimhe a thoirt a-steach don ìomhaigh. Mar sin, nuair a bhios tu a’ cleachdadh an ìomhaigh dheireannach bho thogalach a bh’ ann roimhe, cha bhith e comasach dha Docker sreathan deiseil a lorg gus an ìomhaigh a thogail le nodejs (ìre togail). Gus an duilgheadas seo fhuasgladh, thèid ìomhaigh eadar-mheadhanach a chruthachadh $IMAGE_NAME-builder-stage agus air a phutadh gu Pacaidean GitHub gus an gabh a chleachdadh ann an togail às deidh sin mar stòr tasgadan.

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Chaidh an ùine cruinneachaidh iomlan a lughdachadh gu mionaid gu leth. Bithear a’ caitheamh leth-mhionaid a’ togail dhealbhan roimhe.

Ro-shealladh

Is e dòigh eile air fuasgladh fhaighinn air duilgheadas tasgadan Docker glan cuid de na sreathan a ghluasad gu Dockerfile eile, a thogail air leth, a phutadh a-steach don Chlàr Container agus a chleachdadh mar phàrant.

Bidh sinn a’ cruthachadh ar n-ìomhaigh nodejs fhèin gus tagradh Angular a thogail. Cruthaich Dockerfile.node sa phròiseact

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

Bidh sinn a’ cruinneachadh agus a’ putadh ìomhaigh phoblach ann an Docker Hub:

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

A-nis nar prìomh Dockerfile bidh sinn a’ cleachdadh an ìomhaigh chrìochnaichte:

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

Anns an eisimpleir againn, cha do lughdaich an ùine togail, ach faodaidh ìomhaighean ro-thogte a bhith feumail ma tha mòran phròiseactan agad agus gum feum thu na h-aon eisimeileachd a chuir a-steach anns gach fear dhiubh.

Beagan mholaidhean air mar as urrainn dhut togail dhealbhan Docker a luathachadh. Mar eisimpleir, suas ri 30 diogan

Choimhead sinn air grunn dhòighean airson togail dhealbhan docker a luathachadh. Ma tha thu airson gun tèid an cleachdadh gu sgiobalta, feuch seo a chleachdadh sa phròiseact agad:

  • lùghdachadh co-theacsa;
  • cleachdadh ìomhaighean beaga phàrantan;
  • co-chruinneachadh ioma-ìre;
  • ag atharrachadh òrdugh an stiùiridh anns an Dockerfile gus feum èifeachdach a dhèanamh den tasgadan;
  • stèidheachadh tasgadan ann an siostaman CI/CD;
  • cruthachadh ìomhaighean ro-làimh.

Tha mi an dòchas gun dèan an eisimpleir e nas soilleire mar a tha Docker ag obair, agus gum bi e comasach dhut do chleachdadh a rèiteachadh mar as fheàrr. Gus cluich leis na h-eisimpleirean bhon artaigil, chaidh stòr-tasgaidh a chruthachadh https://github.com/devopsprodigy/test-docker-build.

Source: www.habr.com

Cuir beachd ann