የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

አንድ ባህሪ ወደ ምርት ከመግባቱ በፊት፣ በዚህ ውስብስብ ኦርኬስትራዎች እና CI/ሲዲ ቀናት ውስጥ፣ ወደ ፈተና እና ማድረስ ብዙ ይቀራሉ። ከዚህ ቀደም አዲስ ፋይሎችን በኤፍቲፒ በኩል መስቀል ይችላሉ (ከእንግዲህ ማንም ይህን አያደርግም, ትክክል?) እና "የማሰማራት" ሂደቱ ሰከንዶች ወስዷል. አሁን የውህደት ጥያቄ መፍጠር እና ባህሪው ተጠቃሚዎችን እስኪደርስ ድረስ ረጅም ጊዜ መጠበቅ አለብዎት።

የዚህ መንገድ አካል የዶከር ምስል መገንባት ነው። አንዳንድ ጊዜ ስብሰባው ለደቂቃዎች፣ አንዳንዴም ለአስር ደቂቃዎች የሚቆይ ሲሆን ይህም መደበኛ ተብሎ ሊጠራ አይችልም። በዚህ ጽሑፍ ውስጥ ወደ ምስል የምንጠቀልልበትን ቀላል መተግበሪያን እንወስዳለን, ግንባታውን ለማፋጠን ብዙ ዘዴዎችን እንተገብራለን, እና እነዚህ ዘዴዎች እንዴት እንደሚሠሩ ያሉትን ልዩነቶች እንመለከታለን.

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

የሚዲያ ድር ጣቢያዎችን በመፍጠር እና በመደገፍ ረገድ ጥሩ ልምድ አለን። TASS, The Bell, "አዲስ ጋዜጣ", ሬፑብሊክ… ከጥቂት ጊዜ በፊት የምርት ድር ጣቢያን በመልቀቅ ፖርትፎሊዮችንን አስፋፍተናል አስታዋሽ. እና አዳዲስ ባህሪያት በፍጥነት ሲጨመሩ እና የቆዩ ስህተቶች ተስተካክለው ሳለ, ቀርፋፋ ማሰማራት ትልቅ ችግር ሆኗል.

ወደ GitLab አሰማርተናል። ምስሎችን እንሰበስባለን ፣ ወደ GitLab Registry እንገፋቸዋለን እና ወደ ምርት እንልካቸዋለን። በዚህ ዝርዝር ውስጥ በጣም ረጅሙ ነገር ምስሎችን መሰብሰብ ነው. ለምሳሌ፡ ያለ ማመቻቸት፣ እያንዳንዱ የኋላ ግንባታ 14 ደቂቃ ወስዷል።

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

በመጨረሻም, እኛ እንደዚህ መኖር እንደማንችል ግልጽ ሆነ, እና ምስሎቹ ለመሰብሰብ ለምን ያህል ጊዜ እንደወሰዱ ለማወቅ ተቀመጥን. በውጤቱም, የስብሰባውን ጊዜ ወደ 30 ሰከንድ መቀነስ ችለናል!

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

ለዚህ መጣጥፍ፣ ከማስታወሻ አካባቢ ጋር ላለመተሳሰር፣ ባዶ የAngular መተግበሪያን የመገጣጠም ምሳሌን እንመልከት። ስለዚህ መተግበሪያችንን እንፍጠር፡-

ng n app

PWA ያክሉበት (እድገት እየሄድን ነው)፦

ng add @angular/pwa --project app

አንድ ሚሊዮን npm ጥቅሎች እየወረዱ ሳለ፣ የዶክተር ምስል እንዴት እንደሚሰራ እንወቅ። ዶከር አፕሊኬሽኖችን የማሸግ እና ኮንቴነር በሚባል ገለልተኛ አካባቢ ውስጥ የማስኬድ ችሎታን ይሰጣል። ለማግለል ምስጋና ይግባውና በአንድ አገልጋይ ላይ ብዙ ኮንቴይነሮችን በአንድ ጊዜ ማሄድ ይችላሉ። ኮንቴይነሮች በቀጥታ በሲስተም ከርነል ላይ ስለሚሰሩ ከቨርቹዋል ማሽኖች በጣም ቀላል ናቸው። ኮንቴይነርን ከመተግበሪያችን ጋር ለማስኬድ በመጀመሪያ ለመተግበሪያችን ሥራ አስፈላጊ የሆኑትን ሁሉንም ነገሮች የምንሸፍንበት ምስል መፍጠር አለብን። በመሠረቱ, ምስል የፋይል ስርዓቱ ቅጂ ነው. ለምሳሌ Dockerfileን ይውሰዱ፡-

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

Dockerfile የመመሪያዎች ስብስብ ነው; እያንዳንዳቸውን በመሥራት, Docker ለውጦቹን በፋይል ስርዓቱ ላይ ያስቀምጣቸዋል እና በቀድሞዎቹ ላይ ይሸፍኗቸዋል. እያንዳንዱ ቡድን የራሱን ንብርብር ይፈጥራል. እና የተጠናቀቀው ምስል አንድ ላይ የተጣመሩ ንብርብሮች ናቸው.

ማወቅ አስፈላጊ የሆነው: እያንዳንዱ Docker ንብርብር መሸጎጫ ይችላል. ከመጨረሻው ግንባታ በኋላ ምንም ነገር ካልተቀየረ ትዕዛዙን ከመተግበር ይልቅ ዶክተሩ ዝግጁ የሆነ ንብርብር ይወስዳል። በግንባታ ፍጥነት ውስጥ ዋናው መጨመር በመሸጎጫው አጠቃቀም ምክንያት ስለሚሆን የግንባታ ፍጥነትን ስንለካ በተለይ ዝግጁ በሆነ መሸጎጫ ምስል ለመገንባት ትኩረት እንሰጣለን. ስለዚህ, ደረጃ በደረጃ:

  1. የቀደሙት ሩጫዎች በሙከራው ላይ ተጽዕኖ እንዳያሳድሩ ምስሎቹን በአካባቢው እንሰርዛለን።
    docker rmi $(docker images -q)
  2. ግንባታውን ለመጀመሪያ ጊዜ እንጀምራለን.
    time docker build -t app .
  3. የ src / index.html ፋይልን እንለውጣለን - የፕሮግራም አድራጊውን ስራ እንኮርጃለን.
  4. ግንባታውን ለሁለተኛ ጊዜ እናካሂዳለን.
    time docker build -t app .

ምስሎችን ለመገንባት አካባቢው በትክክል ከተዋቀረ (ከዚህ በታች ባለው ላይ የበለጠ) ፣ ከዚያ ግንባታው ሲጀመር Docker ቀድሞውኑ ብዙ መሸጎጫዎች በቦርዱ ላይ ይኖራቸዋል። የእኛ ተግባር ግንባታው በተቻለ ፍጥነት እንዲሠራ መሸጎጫውን እንዴት እንደሚጠቀሙ መማር ነው። ግንባታን ያለ መሸጎጫ ማስኬድ አንድ ጊዜ ብቻ ነው-ለመጀመሪያ ጊዜ ነው ብለን ስለገመትን፣የመጀመሪያው ጊዜ ምን ያህል ቀርፋፋ እንደነበር ችላ ማለት እንችላለን። በፈተናዎች ውስጥ, የግንባታው ሁለተኛ ሩጫ ለእኛ አስፈላጊ ነው, መሸጎጫዎች ቀድሞውኑ ሲሞቁ እና ኬክን ለማብሰል ዝግጁ ስንሆን. ይሁን እንጂ አንዳንድ ምክሮች በመጀመሪያው ግንባታ ላይም ተጽዕኖ ይኖራቸዋል.

ከላይ የተገለጸውን Dockerfile በፕሮጀክት ማህደር ውስጥ እናስቀምጠው እና ግንባታውን እንጀምር። ሁሉም ዝርዝሮች ለንባብ ምቾት ተጨምረዋል።

$ 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

የ src/index.html ይዘቶችን እንለውጣለን እና ለሁለተኛ ጊዜ እናስኬደዋለን።

$ 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

ምስሉ እንዳለን ለማየት ትዕዛዙን ያሂዱ docker images:

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

ዶከር ከመገንባቱ በፊት አሁን ባለው አውድ ውስጥ ያሉትን ሁሉንም ፋይሎች ወስዶ ወደ ዲሞን ይልካል። Sending build context to Docker daemon 409MB. የግንባታው አውድ ለግንባታ ትዕዛዝ የመጨረሻው መከራከሪያ ሆኖ ተገልጿል. በእኛ ሁኔታ ፣ ይህ የአሁኑ ማውጫ ነው - “.” ፣ - እና Docker በዚህ አቃፊ ውስጥ ያለንን ሁሉ ይጎትታል። 409 ሜባ ብዙ ነው፡ እንዴት ማስተካከል እንዳለብን እናስብ።

አውድ በመቀነስ

ዐውደ-ጽሑፉን ለመቀነስ, ሁለት አማራጮች አሉ. ወይም ለመገጣጠም የሚያስፈልጉትን ሁሉንም ፋይሎች በተለየ አቃፊ ውስጥ አስቀምጡ እና የመትከያ አውድ ወደዚህ አቃፊ ይጠቁሙ። ይህ ሁልጊዜ ምቹ ላይሆን ይችላል, ስለዚህ ልዩ ሁኔታዎችን መግለጽ ይቻላል: ወደ አውድ መጎተት የማይገባው. ይህንን ለማድረግ የ.dockerignore ፋይልን በፕሮጀክቱ ውስጥ ያስቀምጡ እና ለግንባታው የማይፈለጉትን ያመልክቱ።

.git
/node_modules

እና ግንባታውን እንደገና ያሂዱ:

$ 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 ኪባ ከ 409 ሜባ በጣም የተሻለ ነው. እንዲሁም የምስሉን መጠን ከ1.74 ወደ 1.38 ጊባ ቀንሰነዋል፡-

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

የምስሉን መጠን የበለጠ ለመቀነስ እንሞክር.

አልፓይን እንጠቀማለን

በምስል መጠን ላይ ለማስቀመጥ ሌላኛው መንገድ ትንሽ የወላጅ ምስል መጠቀም ነው. የወላጅነት ምስል የእኛ ምስል በተዘጋጀበት መሰረት ምስል ነው. የታችኛው ንብርብር በትእዛዙ ይገለጻል FROM በ Dockerfile ውስጥ. በእኛ ሁኔታ፣ አስቀድሞ nodejs የተጫነውን በኡቡንቱ ላይ የተመሰረተ ምስል እየተጠቀምን ነው። እና ይመዝናል ...

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

... አንድ ጊጋባይት ማለት ይቻላል። በአልፓይን ሊኑክስ ላይ የተመሰረተ ምስል በመጠቀም ድምጹን በእጅጉ መቀነስ ይችላሉ. አልፓይን በጣም ትንሽ ሊኑክስ ነው። በአልፕይን ላይ የተመሰረተ የ nodejs ዶከር ምስል 88.5 ሜባ ብቻ ይመዝናል። ስለዚህ በቤቶቹ ውስጥ ያለውን ሕያው ምስል እንተካው፡-

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

አፕሊኬሽኑን ለመገንባት አስፈላጊ የሆኑ አንዳንድ ነገሮችን መጫን ነበረብን። አዎ፣ አንግል ያለ ፓይዘን (°_o)/ǹ አይገነባም።

ነገር ግን የምስሉ መጠን ወደ 150 ሜባ ዝቅ ብሏል፡-

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

የበለጠ እንሂድ።

ባለብዙ ደረጃ ስብሰባ

በምስሉ ውስጥ ያለው ሁሉም ነገር በምርት ውስጥ የሚያስፈልገን አይደለም.

$ 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

በ እገዛ docker run app ls -lah በምስላችን መሰረት መያዣ አስነሳን app እና ትዕዛዙን በውስጡ አከናውኗል ls -lah, ከዚያ በኋላ መያዣው ሥራውን አጠናቀቀ.

በምርት ውስጥ አቃፊ ብቻ ያስፈልገናል dist. በዚህ አጋጣሚ ፋይሎቹ እንደምንም ውጭ መሰጠት አለባቸው። አንዳንድ የኤችቲቲፒ አገልጋይ በ nodejs ላይ ማሄድ ይችላሉ። ግን ቀላል እናደርገዋለን። አራት ሆሄያት ያለው “y” የሚለውን የሩስያ ቃል ገምት። ቀኝ! Ynzhynyksy. ከ nginx ጋር ምስል እንውሰድ, በውስጡ አቃፊ እናስቀምጥ dist እና ትንሽ ቅንብር;

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

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

ባለብዙ-ደረጃ ግንባታ ይህንን ሁሉ ለማድረግ ይረዳናል. የእኛን 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 .

አሁን ሁለት መመሪያዎች አሉን FROM በ Dockerfile ውስጥ እያንዳንዳቸው የተለየ የግንባታ ደረጃ ያካሂዳሉ። የመጀመሪያውን ደወልን። builder, ነገር ግን ከመጨረሻው FROM ጀምሮ, የእኛ የመጨረሻው ምስል ይዘጋጃል. የመጨረሻው እርምጃ የስብሰባችንን ቅርስ በቀደመው ደረጃ ወደ መጨረሻው ምስል በ nginx መቅዳት ነው። የምስሉ መጠን በከፍተኛ ሁኔታ ቀንሷል፡-

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

መያዣውን በምስላችን እናስኬደው እና ሁሉም ነገር እንደሚሰራ ያረጋግጡ።

docker run -p8080:80 app

የ -p8080:80 አማራጭን በመጠቀም፣ 8080 ወደብ በአስተናጋጅ ማሽናችን ላይ nginx ወደሚሰራበት መያዣ ውስጥ ወደ 80 ወደብ አስተላልፈናል። በአሳሽ ውስጥ ክፈት http://localhost:8080/ እና የእኛን መተግበሪያ እናያለን. ሁሉም ነገር እየሰራ ነው!

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

የምስሉን መጠን ከ1.74 ጂቢ ወደ 36 ሜባ መቀነስ ማመልከቻዎን ወደ ምርት ለማድረስ የሚወስደውን ጊዜ በእጅጉ ይቀንሳል። ግን ወደ መሰብሰቢያ ጊዜ እንመለስ።

$ 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

የንብርብሮች ቅደም ተከተል መቀየር

የመጀመሪያዎቹ ሶስት እርምጃዎቻችን ተደብቀዋል (ፍንጭ Using cache). በአራተኛው ደረጃ, ሁሉም የፕሮጀክት ፋይሎች ይገለበጣሉ እና በአምስተኛው ደረጃ ጥገኛዎች ይጫናሉ RUN npm ci - እስከ 47.338s. ጥገኞች በጣም አልፎ አልፎ ከተቀየሩ ለምንድነው እንደገና ይጫኑት? ለምን አልተሸጎጡም የሚለውን እንወቅ። ነጥቡ ዶከር ትዕዛዙ እና ከሱ ጋር የተያያዙ ፋይሎች መለወጣቸውን ለማየት ንብርብር በንብርብር ይፈትሻል። በአራተኛው ደረጃ, ሁሉንም የፕሮጀክታችንን ፋይሎች እንገለበጣለን, እና ከነሱ መካከል, በእርግጥ, ለውጦች አሉ, ስለዚህ Docker ይህን ንብርብር ከመሸጎጫ ብቻ አይወስድም, ግን ሁሉም ተከታይ! በ 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 .

በመጀመሪያ, package.json እና package-lock.json ይገለበጣሉ, ከዚያም ጥገኞች ይጫናሉ, እና ከዚያ በኋላ ሙሉው ፕሮጀክት ይገለበጣል. ከዚህ የተነሳ:

$ 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 ደቂቃዎች ይልቅ 3 ሰከንዶች - በጣም የተሻለ! የንብርብሮች ትክክለኛ ቅደም ተከተል አስፈላጊ ነው በመጀመሪያ የማይለወጥን, ከዚያም አልፎ አልፎ የሚለወጠውን እና በመጨረሻም ብዙውን ጊዜ የሚለወጠውን እንገለበጣለን.

በመቀጠል በ CI/CD ስርዓቶች ውስጥ ምስሎችን ስለመገጣጠም ጥቂት ቃላት።

ለመሸጎጫ ቀዳሚ ምስሎችን መጠቀም

ለግንባታው አንዳንድ ዓይነት የSaaS መፍትሄን ከተጠቀምን የአካባቢው ዶከር መሸጎጫ ንጹህ እና ትኩስ ሊሆን ይችላል። ዶከር የተጋገሩ ንብርብሮችን ለማግኘት ቦታ ለመስጠት, ቀዳሚውን የተሰራውን ምስል ይስጡት.

በ GitHub Actions ውስጥ የእኛን መተግበሪያ የመገንባት ምሳሌ እንውሰድ። ይህንን ውቅረት እንጠቀማለን

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

ምስሉ ተሰብስቦ ወደ GitHub ፓኬጆች በሁለት ደቂቃ ከ20 ሰከንድ ውስጥ ተገፋ።

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

አሁን መሸጎጫ ጥቅም ላይ እንዲውል ግንባታውን እንለውጠው ከዚህ ቀደም በተገነቡ ምስሎች ላይ በመመስረት፡-

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

በመጀመሪያ ሁለት ትዕዛዞች ለምን እንደጀመሩ ልንነግርዎ እንፈልጋለን build. እውነታው ግን በባለብዙ ደረጃ ስብሰባ ውስጥ የተገኘው ምስል ከመጨረሻው ደረጃ የንብርብሮች ስብስብ ይሆናል. በዚህ ሁኔታ, ከቀደምት ንብርብሮች ውስጥ ያሉ ንብርብሮች በምስሉ ውስጥ አይካተቱም. ስለዚህ፣ ካለፈው ግንባታ የመጨረሻውን ምስል ሲጠቀሙ ዶከር ምስሉን በ nodejs (የገንቢ ደረጃ) ለመገንባት ዝግጁ የሆኑ ንብርብሮችን ማግኘት አይችልም። ይህንን ችግር ለመፍታት, መካከለኛ ምስል ይፈጠራል $IMAGE_NAME-builder-stage እና ወደ GitHub Packages ይገፋፋል ስለዚህም በቀጣይ ግንባታ እንደ መሸጎጫ ምንጭ ጥቅም ላይ ሊውል ይችላል።

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

አጠቃላይ የመሰብሰቢያ ጊዜ ወደ አንድ ደቂቃ ተኩል ቀንሷል። የቀደሙ ምስሎችን በማንሳት ግማሽ ደቂቃ ጠፋ።

ቅድመ እይታ

የንፁህ የዶከር መሸጎጫ ችግር ለመፍታት ሌላኛው መንገድ አንዳንድ ንብርብሮችን ወደ ሌላ Dockerfile ማንቀሳቀስ, ለብቻው መገንባት, ወደ ኮንቴይነር መዝገብ ቤት ውስጥ ማስገባት እና እንደ ወላጅ መጠቀም ነው.

የ Angular መተግበሪያን ለመገንባት የራሳችንን nodejs ምስል እንፈጥራለን። በፕሮጀክቱ ውስጥ Dockerfile.node ይፍጠሩ

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

በDocker Hub ውስጥ የህዝብ ምስል እንሰበስባለን እና እንገፋለን፡

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

አሁን በዋናው Dockerfile ውስጥ የተጠናቀቀውን ምስል እንጠቀማለን-

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

በምሳሌአችን, የግንባታው ጊዜ አልቀነሰም, ነገር ግን ብዙ ፕሮጀክቶች ካሉዎት እና በእያንዳንዳቸው ውስጥ ተመሳሳይ ጥገኝነቶችን መጫን ካለባቸው አስቀድመው የተሰሩ ምስሎች ጠቃሚ ሊሆኑ ይችላሉ.

የዶከር ምስሎችን እንዴት ማፋጠን እንደሚቻል አንዳንድ ጠቃሚ ምክሮች። ለምሳሌ, እስከ 30 ሰከንድ ድረስ

የዶክተር ምስሎችን ግንባታ ለማፋጠን ብዙ ዘዴዎችን ተመልክተናል። ማሰማራቱ በፍጥነት እንዲሄድ ከፈለጉ፣ ይህንን በፕሮጀክትዎ ውስጥ ለመጠቀም ይሞክሩ፡

  • አውድ መቀነስ;
  • ትናንሽ የወላጅ ምስሎችን መጠቀም;
  • ባለብዙ ደረጃ ስብሰባ;
  • መሸጎጫውን በብቃት ለመጠቀም በ Dockerfile ውስጥ ያሉትን መመሪያዎች ቅደም ተከተል መለወጥ;
  • በ CI / ሲዲ ስርዓቶች ውስጥ መሸጎጫ ማዘጋጀት;
  • የመጀመሪያ ምስሎች መፍጠር.

ምሳሌው Docker እንዴት እንደሚሰራ የበለጠ ግልጽ እንደሚያደርግ ተስፋ አደርጋለሁ፣ እና እርስዎም የእርስዎን ማሰማራት በተሻለ ሁኔታ ማዋቀር ይችላሉ። ከጽሑፉ ምሳሌዎች ጋር ለመጫወት, ማከማቻ ተፈጥሯል https://github.com/devopsprodigy/test-docker-build.

ምንጭ: hab.com

አስተያየት ያክሉ