Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

Kafin fasalin ya fara samarwa, a cikin kwanakin nan na hadaddun mawaƙa da CI/CD, akwai hanya mai nisa da za a bi daga ƙaddamarwa zuwa gwaje-gwaje da bayarwa. A baya can, zaku iya loda sabbin fayiloli ta hanyar FTP (babu wanda ya sake yin hakan, daidai?), Kuma tsarin “aikawa” ya ɗauki daƙiƙa. Yanzu kuna buƙatar ƙirƙirar buƙatar haɗuwa kuma ku jira dogon lokaci don fasalin ya isa ga masu amfani.

Wani ɓangare na wannan hanyar shine gina hoton Docker. Wani lokaci taron yana ɗaukar mintuna, wani lokacin kuma minti goma, wanda da wuya a kira shi al'ada. A cikin wannan labarin, za mu ɗauki aikace-aikace mai sauƙi wanda za mu haɗa shi cikin hoto, amfani da hanyoyi da yawa don hanzarta ginin, kuma mu dubi ƙayyadaddun yadda waɗannan hanyoyin ke aiki.

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

Muna da gogewa mai kyau wajen ƙirƙira da tallafawa gidajen yanar gizo na kafofin watsa labarai: TASS, A Bell, "Sabuwar Jarida", Jamhuriyar… Ba da dadewa mun fadada fayil ɗin mu ta hanyar sakin gidan yanar gizon samfur Mai tuni. Kuma yayin da aka ƙara sabbin abubuwa cikin sauri kuma an gyara tsofaffin kwari, jinkirin turawa ya zama babbar matsala.

Muna tura zuwa GitLab. Muna tattara hotuna, tura su zuwa GitLab Registry kuma mu fitar da su don samarwa. Abu mafi tsayi akan wannan jerin shine hada hotuna. Misali: ba tare da ingantawa ba, kowane ginin baya yana ɗaukar mintuna 14.

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

A ƙarshe, ya bayyana a fili cewa ba za mu iya rayuwa haka ba, kuma mun zauna don gano dalilin da yasa hotunan suka dauki lokaci mai tsawo ana tattarawa. A sakamakon haka, mun sami damar rage lokacin taron zuwa 30 seconds!

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

Don wannan labarin, don kar a ɗaure shi da muhallin Tunatarwa, bari mu kalli misali na haɗa aikace-aikacen Angular mara komai. Don haka, bari mu ƙirƙiri aikace-aikacen mu:

ng n app

Ƙara PWA gare shi (muna ci gaba):

ng add @angular/pwa --project app

Yayin da ake zazzage fakitin npm miliyan, bari mu gano yadda hoton docker ke aiki. Docker yana ba da damar haɗa aikace-aikacen da gudanar da su a cikin keɓantaccen yanayi da ake kira akwati. Godiya ga keɓewa, zaku iya gudanar da kwantena da yawa lokaci guda akan sabar ɗaya. Kwantena sun fi na'urori masu haske da yawa saboda suna aiki kai tsaye akan kernel na tsarin. Don gudanar da akwati tare da aikace-aikacenmu, da farko muna buƙatar ƙirƙirar hoto wanda za mu tattara duk abin da ya dace don aikace-aikacenmu ya gudana. Ainihin, hoto kwafin tsarin fayil ne. Misali, ɗauki Dockerfile:

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

Dockerfile saitin umarni ne; Ta yin kowannensu, Docker zai adana canje-canje zuwa tsarin fayil kuma ya rufe su a kan waɗanda suka gabata. Kowace ƙungiya ta ƙirƙira nata Layer. Kuma hoton da aka gama shine yadudduka hade tare.

Abin da ke da mahimmanci a sani: kowane Layer Docker yana iya cache. Idan babu wani abu da ya canza tun ginin na ƙarshe, to, maimakon aiwatar da umarnin, docker zai ɗauki shirin da aka yi. Tun da babban haɓakar haɓakar haɓakawa zai kasance saboda amfani da cache, lokacin auna saurin ginin za mu mai da hankali musamman don gina hoto tare da cache da aka shirya. Don haka, mataki-mataki:

  1. Muna share hotuna a gida don kada ayyukan da suka gabata su yi tasiri a gwajin.
    docker rmi $(docker images -q)
  2. Mun ƙaddamar da ginin a karon farko.
    time docker build -t app .
  3. Muna canza fayil ɗin src/index.html - muna kwaikwayon aikin mai shirye-shirye.
  4. Muna gudanar da ginin a karo na biyu.
    time docker build -t app .

Idan an daidaita yanayin ginin hotuna daidai (ƙari akan wancan a ƙasa), to lokacin da ginin ya fara, Docker zai riga ya sami tarin caches akan jirgin. Ayyukanmu shine koyon yadda ake amfani da cache domin ginin ya tafi da sauri. Tun da muna ɗauka cewa gudanar da ginin ba tare da cache ba sau ɗaya kawai yakan faru - a karon farko - don haka za mu iya yin watsi da yadda wancan lokacin ya yi jinkirin. A cikin gwaje-gwaje, gudu na biyu na ginin yana da mahimmanci a gare mu, lokacin da caches sun riga sun dumi kuma muna shirye don yin burodin mu. Koyaya, wasu shawarwari kuma zasu shafi ginin farko.

Bari mu sanya Dockerfile da aka kwatanta a sama a cikin babban fayil ɗin aikin kuma fara ginin. An tattara duk jeri don sauƙin karantawa.

$ 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

Muna canza abubuwan da ke cikin src/index.html kuma muna gudanar da shi a karo na biyu.

$ 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

Don ganin ko muna da hoton, gudanar da umarni docker images:

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

Kafin ginawa, docker yana ɗaukar duk fayilolin da ke cikin mahallin yanzu kuma ya aika su zuwa gamon sa Sending build context to Docker daemon 409MB. An ƙayyade mahallin ginin azaman hujja ta ƙarshe zuwa umarnin ginin. A cikin yanayinmu, wannan shine kundin adireshi na yanzu - “.”, - kuma Docker yana jan duk abin da muke da shi a cikin wannan babban fayil ɗin. 409 MB yana da yawa: bari muyi tunanin yadda ake gyara shi.

Rage mahallin

Don rage mahallin, akwai zaɓuɓɓuka biyu. Ko sanya duk fayilolin da ake buƙata don haɗawa a cikin babban fayil daban kuma nuna mahallin docker zuwa wannan babban fayil ɗin. Wannan bazai dace da kowane lokaci ba, don haka yana yiwuwa a ƙayyade keɓancewa: abin da bai kamata a ja shi cikin mahallin ba. Don yin wannan, sanya fayil ɗin .dockerignore a cikin aikin kuma nuna abin da ba a buƙata don ginin:

.git
/node_modules

kuma sake gudanar da ginin:

$ 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 ya fi 409 MB. Mun kuma rage girman hoton daga 1.74 zuwa 1.38 GB:

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

Mu yi kokarin rage girman hoton a kara.

Muna amfani da Alpine

Wata hanyar ajiyewa akan girman hoton ita ce amfani da ƙaramin hoton iyaye. Hoton iyaye shine hoton da aka shirya hoton mu. An ƙayyade Layer na ƙasa ta umarnin FROM a cikin Dockerfile. A cikin yanayinmu, muna amfani da hoton tushen Ubuntu wanda riga an shigar da nodejs. Kuma yana auna...

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

... kusan gigabyte. Kuna iya rage ƙarar sosai ta amfani da hoto dangane da Alpine Linux. Alpine ƙaramin Linux ne. Hoton docker don nodejs dangane da tsayin tsayi yana auna 88.5 MB kawai. Don haka bari mu maye gurbin hotonmu mai rai a cikin gidaje:

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

Dole ne mu shigar da wasu abubuwan da suka zama dole don gina aikace-aikacen. Ee, Angular baya ginawa ba tare da Python ¯(°_o)/n

Amma girman hoton ya ragu zuwa 150 MB:

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

Mu kara gaba.

Multistage taro

Ba duk abin da ke cikin hoton ba shine abin da muke bukata a samarwa.

$ 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

Tare da taimakon docker run app ls -lah mun kaddamar da kwantena bisa ga hotonmu app kuma ya aiwatar da umarnin a cikinsa ls -lah, bayan da kwandon ya kammala aikinsa.

A cikin samarwa muna buƙatar babban fayil kawai dist. A wannan yanayin, fayilolin ko ta yaya suna buƙatar a ba su waje. Kuna iya gudanar da wasu sabar HTTP akan nodejs. Amma za mu sauƙaƙa. Yi tsammani kalmar Rashanci mai haruffa huɗu "y". Dama! Ynzhynyksy. Bari mu ɗauki hoto tare da nginx, sanya babban fayil a ciki dist da ƙaramin tsari:

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

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

Gina matakai da yawa zai taimake mu mu yi duk wannan. Bari mu canza Dockerfile ɗin mu:

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 .

Yanzu muna da umarni guda biyu FROM a cikin Dockerfile, kowannensu yana aiwatar da matakan ginawa daban. Mun kira na farko builder, amma farawa daga ƙarshe DAGA, za a shirya hoton mu na ƙarshe. Mataki na ƙarshe shine kwafi kayan tarihi na taronmu a matakin baya zuwa hoton ƙarshe tare da nginx. Girman hoton ya ragu sosai:

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

Bari mu gudanar da akwati tare da hoton mu kuma tabbatar da cewa komai yana aiki:

docker run -p8080:80 app

Yin amfani da zaɓi na -p8080: 80, mun tura tashar jiragen ruwa 8080 akan na'ura mai masaukinmu zuwa tashar jiragen ruwa 80 a cikin akwati inda nginx ke gudana. Bude a browser http://localhost:8080/ kuma muna ganin aikace-aikacen mu. Komai yana aiki!

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

Rage girman hoton daga 1.74 GB zuwa 36 MB yana rage lokacin da ake ɗauka don isar da aikace-aikacen ku zuwa samarwa. Amma mu koma lokacin taro.

$ 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

Canza tsari na yadudduka

Matakan mu na farko an adana su (alamu Using cache). A mataki na huɗu, ana kwafi duk fayilolin aikin kuma a mataki na biyar ana shigar da abubuwan dogaro RUN npm ci - har zuwa 47.338s. Me yasa sake shigar da abubuwan dogaro kowane lokaci idan suna canzawa da wuya? Bari mu gano dalilin da yasa ba a adana su ba. Ma'anar ita ce Docker zai duba Layer ta Layer don ganin ko umarnin da fayilolin da ke hade da shi sun canza. A mataki na hudu, muna kwafi duk fayilolin aikinmu, kuma daga cikinsu, ba shakka, akwai canje-canje, don haka Docker ba wai kawai ya ɗauki wannan Layer daga cache ba, har ma duk masu biyo baya! Bari mu yi wasu ƙananan canje-canje ga 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 .

Na farko, package.json da pack-lock.json ana kwafi, sannan ana shigar da abubuwan dogaro, kuma bayan haka ne aka kwafi gabaɗayan aikin. Saboda:

$ 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 seconds maimakon 3 mintuna - yafi kyau! Daidaitaccen tsari na yadudduka yana da mahimmanci: da farko muna kwafin abin da ba ya canzawa, sannan abin da ke canzawa da wuya, kuma a ƙarshe abin da ke canzawa sau da yawa.

Na gaba, ƴan kalmomi game da haɗa hotuna a cikin tsarin CI/CD.

Amfani da hotuna na baya don cache

Idan muka yi amfani da wani nau'in bayani na SaaS don ginawa, to, cache Docker na gida na iya zama mai tsabta da sabo. Don ba docker wuri don samun yaduddukan gasa, ba shi hoton da aka gina a baya.

Bari mu ɗauki misali na gina aikace-aikacen mu a GitHub Actions. Muna amfani da wannan tsarin

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

Hoton an haɗa shi kuma an tura shi zuwa GitHub Packages a cikin mintuna biyu da daƙiƙa 20:

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

Yanzu bari mu canza ginin don a yi amfani da cache bisa ga abubuwan da aka gina a baya:

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

Da farko muna buƙatar gaya muku dalilin da yasa aka ƙaddamar da umarni biyu build. Gaskiyar ita ce, a cikin taro na multistage hoton da aka samu zai zama saitin yadudduka daga mataki na ƙarshe. A wannan yanayin, yadudduka daga yadudduka na baya ba za a haɗa su cikin hoton ba. Don haka, lokacin amfani da hoton ƙarshe daga ginin da ya gabata, Docker ba zai iya samun shirye-shiryen yadudduka don gina hoton tare da nodejs (matakin ginin gini). Domin magance wannan matsala, an ƙirƙiri hoto na tsaka-tsaki $IMAGE_NAME-builder-stage kuma ana tura shi zuwa GitHub Packages ta yadda za a iya amfani da shi a wani gini na gaba azaman tushen cache.

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

An rage jimlar lokacin taron zuwa minti ɗaya da rabi. An shafe rabin minti daya ana cire hotunan da suka gabata.

Gabatarwa

Wata hanyar da za a magance matsalar cache Docker mai tsabta ita ce matsar da wasu daga cikin yadudduka zuwa wani Dockerfile, gina shi daban, tura shi cikin Registry Container kuma amfani da shi azaman iyaye.

Mun ƙirƙiri namu hoton nodejs don gina aikace-aikacen Angular. Ƙirƙiri Dockerfile.node a cikin aikin

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

Muna tattarawa da tura hoton jama'a a Docker Hub:

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

Yanzu a cikin babban Dockerfile muna amfani da hoton da aka gama:

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

A cikin misalinmu, lokacin ginawa bai ragu ba, amma hotunan da aka riga aka gina na iya zama da amfani idan kuna da ayyuka da yawa kuma dole ne ku shigar da abubuwan dogaro iri ɗaya a cikin kowannensu.

Wasu nasihu kan yadda ake saurin gina hotunan Docker. Misali, har zuwa 30 seconds

Mun duba hanyoyi da yawa don hanzarta gina hotunan docker. Idan kuna son tura aikin ya yi sauri, gwada amfani da wannan a cikin aikin ku:

  • rage mahallin;
  • amfani da ƙananan hotuna na iyaye;
  • taro multistage;
  • canza tsari na umarni a cikin Dockerfile don yin ingantaccen amfani da cache;
  • kafa cache a cikin tsarin CI / CD;
  • na farko na hotuna.

Ina fatan misalin zai bayyana yadda Docker ke aiki, kuma za ku sami damar daidaita aikinku da kyau. Don yin wasa tare da misalan labarin, an ƙirƙiri wurin ajiya https://github.com/devopsprodigy/test-docker-build.

source: www.habr.com

Add a comment