Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

Ṣaaju ki ẹya kan to wọle si iṣelọpọ, ni awọn ọjọ wọnyi ti awọn akọrin ti o nipọn ati CI/CD, ọna pipẹ wa lati lọ lati ṣe si awọn idanwo ati ifijiṣẹ. Ni iṣaaju, o le gbe awọn faili titun nipasẹ FTP (ko si ẹnikan ti o ṣe iyẹn mọ, ọtun?), Ati ilana “imuṣiṣẹ” gba iṣẹju-aaya. Bayi o nilo lati ṣẹda ibeere akojọpọ ki o duro de igba pipẹ fun ẹya naa lati de ọdọ awọn olumulo.

Apakan ti ọna yii ni kikọ aworan Docker kan. Nigba miiran apejọ naa gba iṣẹju diẹ, nigbamiran iṣẹju mẹwa, eyiti a ko le pe ni deede. Ninu àpilẹkọ yii, a yoo gba ohun elo ti o rọrun ti a yoo ṣe akopọ sinu aworan kan, lo awọn ọna pupọ lati mu kiko naa yarayara, ati wo awọn nuances ti bi awọn ọna wọnyi ṣe n ṣiṣẹ.

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

A ni iriri to dara ni ṣiṣẹda ati atilẹyin awọn oju opo wẹẹbu media: TASS, Awọn Belii, "Iroyin Tuntun", Republic… Ko gun seyin a ti fẹ wa portfolio nipa dasile kan ọja aaye ayelujara Olurannileti. Ati pe lakoko ti a ti ṣafikun awọn ẹya tuntun ni iyara ati pe awọn idun atijọ ti wa titi, imuṣiṣẹ lọra di iṣoro nla kan.

A ran lọ si GitLab. A gba awọn aworan, Titari wọn si GitLab Registry ki o yi wọn jade si iṣelọpọ. Ohun ti o gunjulo julọ lori atokọ yii jẹ apejọ awọn aworan. Fun apẹẹrẹ: laisi iṣapeye, kikọ ẹhin kọọkan gba iṣẹju 14.

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

Ni ipari, o han gbangba pe a ko le gbe bii eyi mọ, ati pe a joko lati mọ idi ti awọn aworan n gba pipẹ pupọ lati gba. Bi abajade, a ṣakoso lati dinku akoko apejọ si awọn aaya 30!

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

Fun nkan yii, ni ibere ki o má ba so mọ agbegbe Olurannileti, jẹ ki a wo apẹẹrẹ ti apejọ ohun elo Angular ti o ṣofo. Nitorinaa, jẹ ki a ṣẹda ohun elo wa:

ng n app

Ṣafikun PWA si (a jẹ ilọsiwaju):

ng add @angular/pwa --project app

Lakoko ti awọn idii npm miliọnu kan ti n ṣe igbasilẹ, jẹ ki a ro ero bawo ni aworan docker ṣe n ṣiṣẹ. Docker n pese agbara lati ṣajọ awọn ohun elo ati ṣiṣe wọn ni agbegbe ti o ya sọtọ ti a pe ni eiyan kan. Ṣeun si ipinya, o le ṣiṣe ọpọlọpọ awọn apoti ni nigbakannaa lori olupin kan. Awọn apoti jẹ fẹẹrẹfẹ pupọ ju awọn ẹrọ foju nitori wọn nṣiṣẹ taara lori ekuro eto. Lati ṣiṣẹ eiyan pẹlu ohun elo wa, a nilo akọkọ lati ṣẹda aworan kan ninu eyiti a yoo ṣe akopọ ohun gbogbo ti o jẹ pataki fun ohun elo wa lati ṣiṣẹ. Ni pataki, aworan jẹ ẹda ti eto faili. Fun apẹẹrẹ, mu Dockerfile:

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

Dockerfile jẹ eto awọn ilana; Nipa ṣiṣe ọkọọkan wọn, Docker yoo ṣafipamọ awọn ayipada si eto faili ki o bo wọn lori awọn ti tẹlẹ. Kọọkan egbe ṣẹda awọn oniwe-ara Layer. Ati pe aworan ti o pari jẹ awọn fẹlẹfẹlẹ ni idapo pọ.

Ohun ti o ṣe pataki lati mọ: Layer Docker kọọkan le kaṣe. Ti ko ba si nkan ti o yipada lati igba ti o kẹhin, lẹhinna dipo ṣiṣe pipaṣẹ, docker yoo gba Layer ti a ti ṣetan. Niwọn igba ti ilosoke akọkọ ni iyara kikọ yoo jẹ nitori lilo kaṣe, nigba wiwọn iyara kikọ a yoo san akiyesi pataki si kikọ aworan kan pẹlu kaṣe ti a ti ṣetan. Nitorina, ni igbese nipa igbese:

  1. A pa awọn aworan rẹ ni agbegbe ki awọn ṣiṣe iṣaaju ko ni ipa lori idanwo naa.
    docker rmi $(docker images -q)
  2. A ṣe ifilọlẹ ikole fun igba akọkọ.
    time docker build -t app .
  3. A yipada faili src/index.html - a farawe iṣẹ ti olutọpa kan.
  4. A ṣiṣe awọn Kọ a keji akoko.
    time docker build -t app .

Ti agbegbe fun awọn aworan kikọ ba tunto ni deede (diẹ sii lori iyẹn ni isalẹ), lẹhinna nigbati kikọ ba bẹrẹ, Docker yoo ti ni opo awọn caches tẹlẹ lori ọkọ. Iṣẹ-ṣiṣe wa ni lati kọ ẹkọ bi a ṣe le lo kaṣe ki kikọ naa lọ ni yarayara bi o ti ṣee. Niwọn bi a ti n ro pe ṣiṣiṣẹ kọ laisi kaṣe kan ṣẹlẹ lẹẹkan—akoko akọkọ-a le foju foju bawo ni akoko akọkọ ti lọra. Ni awọn idanwo, ṣiṣe keji ti kọ jẹ pataki si wa, nigbati awọn caches ti wa ni igbona tẹlẹ ati pe a ti ṣetan lati ṣe akara oyinbo wa. Sibẹsibẹ, diẹ ninu awọn imọran yoo tun ni ipa lori kikọ akọkọ.

Jẹ ki a fi Dockerfile ti a ṣalaye loke ninu folda ise agbese ki o bẹrẹ kikọ naa. Gbogbo awọn atokọ ti jẹ dipọ fun irọrun kika.

$ 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

A yipada awọn akoonu ti src/index.html ati ṣiṣe ni akoko keji.

$ 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

Lati rii boya a ni aworan, ṣiṣe aṣẹ naa docker images:

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

Ṣaaju ki o to kọ, docker gba gbogbo awọn faili ni ipo ti o wa lọwọlọwọ ati firanṣẹ si daemon rẹ Sending build context to Docker daemon 409MB. Awọn itumọ ọrọ ti wa ni pato bi awọn ti o kẹhin ariyanjiyan to Kọ pipaṣẹ. Ninu ọran wa, eyi ni itọsọna lọwọlọwọ - “.”, - ati Docker fa ohun gbogbo ti a ni ninu folda yii. 409 MB jẹ pupọ: jẹ ki a ronu bi a ṣe le ṣe atunṣe.

Idinku ọrọ-ọrọ

Lati dinku ọrọ-ọrọ, awọn aṣayan meji wa. Tabi fi gbogbo awọn faili ti o nilo fun apejọ sinu folda ọtọtọ ki o tọka aaye docker si folda yii. Eyi le ma rọrun nigbagbogbo, nitorinaa o ṣee ṣe lati pato awọn imukuro: kini ko yẹ ki o fa sinu aaye. Lati ṣe eyi, fi faili .dockerignore sinu iṣẹ akanṣe naa ki o tọka ohun ti ko nilo fun kikọ naa:

.git
/node_modules

ki o si tun kọkọ ṣiṣẹ:

$ 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 jẹ Elo dara ju 409 MB. A tun dinku iwọn aworan lati 1.74 si 1.38 GB:

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

Jẹ ki a gbiyanju lati dinku iwọn aworan naa siwaju.

A lo Alpine

Ona miiran lati fipamọ sori iwọn aworan ni lati lo aworan obi kekere kan. Aworan obi jẹ aworan lori ipilẹ eyiti a ti pese aworan wa. Layer isalẹ jẹ pato nipasẹ aṣẹ FROM ni Dockerfile. Ninu ọran wa, a nlo aworan ti o da lori Ubuntu ti o ti fi sori ẹrọ nodejs tẹlẹ. Ati pe o ṣe iwọn ...

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

... fere kan gigabyte. O le dinku iwọn didun ni pataki nipa lilo aworan ti o da lori Linux Alpine. Alpine jẹ Linux kekere kan. Aworan docker fun nodejs ti o da lori alpine ṣe iwuwo 88.5 MB nikan. Nitorinaa jẹ ki a rọpo aworan iwunlere wa ninu awọn ile:

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

A ni lati fi sori ẹrọ diẹ ninu awọn ohun ti o jẹ pataki lati kọ ohun elo naa. Bẹẹni, Angula ko kọ laisi Python ¯(°_o)/n

Ṣugbọn iwọn aworan naa lọ silẹ si 150 MB:

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

Jẹ ki a lọ paapaa siwaju.

Multistage ijọ

Kii ṣe ohun gbogbo ti o wa ninu aworan jẹ ohun ti a nilo ni iṣelọpọ.

$ 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

Nipasẹ docker run app ls -lah a ṣe ifilọlẹ apoti kan ti o da lori aworan wa app o si ṣe aṣẹ ninu rẹ ls -lah, lẹhin eyi ti eiyan pari iṣẹ rẹ.

Ni iṣelọpọ a nilo folda nikan dist. Ni idi eyi, awọn faili bakan nilo lati fun ni ita. O le ṣiṣe diẹ ninu olupin HTTP lori nodejs. Ṣugbọn a yoo jẹ ki o rọrun. Gboju ọrọ Russian kan ti o ni awọn lẹta mẹrin "y". Ọtun! Ynzhynyksy. Jẹ ki a ya aworan pẹlu nginx, fi folda kan sinu rẹ dist ati atunto kekere kan:

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

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

Itumọ ipele pupọ yoo ran wa lọwọ lati ṣe gbogbo eyi. Jẹ ki a yi Dockerfile wa pada:

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 .

Bayi a ni awọn itọnisọna meji FROM ninu Dockerfile, ọkọọkan wọn n ṣiṣẹ igbesẹ kikọ ti o yatọ. A pe akọkọ builder, ṣugbọn bẹrẹ lati kẹhin LATI, aworan ikẹhin wa yoo ṣetan. Igbesẹ ti o kẹhin ni lati daakọ ohun-ọṣọ ti apejọ wa ni igbesẹ ti tẹlẹ sinu aworan ikẹhin pẹlu nginx. Iwọn aworan naa ti dinku ni pataki:

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

Jẹ ki a ṣiṣẹ apoti pẹlu aworan wa ki o rii daju pe ohun gbogbo ṣiṣẹ:

docker run -p8080:80 app

Lilo aṣayan -p8080: 80, a firanṣẹ ibudo 8080 lori ẹrọ ti o gbalejo wa si ibudo 80 inu apoti nibiti nginx nṣiṣẹ. Ṣii ni ẹrọ aṣawakiri http://localhost:8080/ ati pe a rii ohun elo wa. Ohun gbogbo n ṣiṣẹ!

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

Dinku iwọn aworan lati 1.74 GB si 36 MB dinku ni pataki akoko ti o gba lati fi ohun elo rẹ ranṣẹ si iṣelọpọ. Ṣugbọn jẹ ki a pada si akoko apejọ.

$ 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

Yiyipada aṣẹ ti awọn fẹlẹfẹlẹ

Awọn igbesẹ mẹta akọkọ wa ti wa ni ipamọ (itọkasi Using cache). Ni igbesẹ kẹrin, gbogbo awọn faili ise agbese ti wa ni daakọ ati ni ipele karun ti awọn igbẹkẹle ti fi sori ẹrọ RUN npm ci - bi 47.338s. Kini idi ti awọn igbẹkẹle fi sori ẹrọ ni gbogbo igba ti wọn ba yipada pupọ ṣọwọn? Jẹ ká ro ero idi ti won ni won ko cache. Ojuami ni pe Docker yoo ṣayẹwo Layer nipasẹ Layer lati rii boya aṣẹ ati awọn faili ti o ni nkan ṣe pẹlu rẹ ti yipada. Ni igbesẹ kẹrin, a daakọ gbogbo awọn faili ti iṣẹ akanṣe wa, ati laarin wọn, dajudaju, awọn ayipada wa, nitorina Docker kii ṣe nikan ko gba Layer yii lati kaṣe, ṣugbọn tun gbogbo awọn ti o tẹle! Jẹ ki a ṣe awọn ayipada kekere si 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 .

Ni akọkọ, package.json ati package-lock.json ti daakọ, lẹhinna ti fi awọn igbẹkẹle sori ẹrọ, ati pe lẹhin iyẹn nikan ni a daakọ gbogbo iṣẹ akanṣe. Nitorina na:

$ 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 aaya dipo ti 3 iṣẹju - Elo dara! Ilana ti o tọ ti awọn ipele jẹ pataki: akọkọ a daakọ ohun ti ko yipada, lẹhinna kini awọn iyipada ṣọwọn, ati nikẹhin kini awọn iyipada nigbagbogbo.

Nigbamii, awọn ọrọ diẹ nipa iṣakojọpọ awọn aworan ni awọn eto CI/CD.

Lilo awọn aworan ti tẹlẹ fun kaṣe

Ti a ba lo diẹ ninu iru ojutu SaaS fun kikọ, lẹhinna kaṣe Docker agbegbe le jẹ mimọ ati tuntun. Lati fun docker ni aaye lati gba awọn ipele ti a yan, fun u ni aworan ti a kọ tẹlẹ.

Jẹ ki a gba apẹẹrẹ ti kikọ ohun elo wa ni Awọn iṣe GitHub. A lo yi konfigi

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

Aworan naa ti ṣajọpọ ati titari si Awọn akopọ GitHub ni iṣẹju meji ati iṣẹju-aaya 20:

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

Bayi jẹ ki a yi itumọ pada ki a lo kaṣe kan ti o da lori awọn aworan ti a kọ tẹlẹ:

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

Ni akọkọ a nilo lati sọ fun ọ idi ti awọn aṣẹ meji ṣe ifilọlẹ build. Otitọ ni pe ni apejọ multistage kan, aworan abajade yoo jẹ awọn ipele ti awọn ipele ti o kẹhin. Ni idi eyi, awọn fẹlẹfẹlẹ lati awọn ipele ti tẹlẹ kii yoo wa ninu aworan naa. Nitorinaa, nigba lilo aworan ikẹhin lati kọ tẹlẹ, Docker kii yoo ni anfani lati wa awọn fẹlẹfẹlẹ ti o ṣetan lati kọ aworan naa pẹlu awọn nodejs (ipele oluṣe). Lati yanju iṣoro yii, a ṣẹda aworan agbedemeji $IMAGE_NAME-builder-stage ati pe a titari si Awọn idii GitHub ki o le ṣee lo ni kikọ ti o tẹle bi orisun kaṣe kan.

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

Lapapọ akoko apejọ ti dinku si iṣẹju kan ati idaji. Idaji iṣẹju ni a lo lati fa awọn aworan ti tẹlẹ soke.

Iṣaju iṣaju

Ọnà miiran lati yanju iṣoro ti kaṣe Docker mimọ ni lati gbe diẹ ninu awọn fẹlẹfẹlẹ sinu Dockerfile miiran, kọ ọ lọtọ, Titari rẹ sinu Iforukọsilẹ Apoti ati lo bi obi kan.

A ṣẹda aworan nodejs tiwa lati kọ ohun elo Angular kan. Ṣẹda Dockerfile.node ninu iṣẹ akanṣe

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

A gba ati Titari aworan ti gbogbo eniyan ni Docker Hub:

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

Bayi ni Dockerfile akọkọ wa a lo aworan ti o pari:

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

Ninu apẹẹrẹ wa, akoko kikọ ko dinku, ṣugbọn awọn aworan ti a ti kọ tẹlẹ le wulo ti o ba ni awọn iṣẹ akanṣe pupọ ati pe o ni lati fi sori ẹrọ awọn igbẹkẹle kanna ni ọkọọkan wọn.

Diẹ ninu awọn imọran lori bi o ṣe le mu iyara kikọ awọn aworan Docker. Fun apẹẹrẹ, to 30 aaya

A wo awọn ọna pupọ fun iyara kikọ awọn aworan docker. Ti o ba fẹ ki imuṣiṣẹ naa yarayara, gbiyanju lilo eyi ninu iṣẹ akanṣe rẹ:

  • idinku ipo;
  • lilo awọn aworan obi kekere;
  • apejọ multistage;
  • yiyipada aṣẹ ti awọn ilana ni Dockerfile lati ṣe lilo daradara ti kaṣe;
  • eto soke a kaṣe ni CI / CD awọn ọna šiše;
  • alakoko ẹda ti awọn aworan.

Mo nireti pe apẹẹrẹ yoo jẹ ki o ṣe alaye bi Docker ṣe n ṣiṣẹ, ati pe iwọ yoo ni anfani lati tunto imuṣiṣẹ rẹ ni aipe. Lati le ṣere pẹlu awọn apẹẹrẹ lati nkan naa, a ti ṣẹda ibi ipamọ kan https://github.com/devopsprodigy/test-docker-build.

orisun: www.habr.com

Fi ọrọìwòye kun