Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

Tupu njirimara abanye na mmepụta, n'ụbọchị ndị a nke ndị na-egwu egwu mgbagwoju anya na CI/CD, e nwere ụzọ dị anya isi na ntinye aka na ule na nnyefe. Na mbụ, ị nwere ike bulite faịlụ ọhụrụ site na FTP (ọ dịghị onye na-eme nke ahụ ọzọ, nri?), na usoro "nkwanye" were sekọnd. Ugbu a ịkwesịrị ịmepụta arịrịọ njikọ wee chere ogologo oge maka njirimara ahụ iru ndị ọrụ.

Akụkụ nke ụzọ a na-ewu ihe oyiyi Docker. Mgbe ụfọdụ mgbakọ ahụ na-ewe nkeji, mgbe ụfọdụ iri nkeji, bụ́ nke a na-apụghị ịkpọ nke ọma. N'isiokwu a, anyị ga-ewere ngwa dị mfe nke anyị ga-etinye n'ime ihe oyiyi, tinye ọtụtụ ụzọ iji mee ka ụlọ ahụ dị ngwa, ma lelee nuances nke ụzọ ndị a si arụ ọrụ.

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

Anyị nwere ahụmịhe dị mma n'ịmepụta na ịkwado webụsaịtị mgbasa ozi: TASS, The Bell, "Akwụkwọ akụkọ ọhụrụ", Republic… Ọ bụghị ogologo oge gara aga, anyị gbasaa Pọtụfoliyo anyị site n'ịhapụ weebụsaịtị ngwaahịa Ncheta. Ma ka agbakwunyere atụmatụ ọhụrụ ngwa ngwa yana edozikwa ahụhụ ochie, ntinye ngwa ngwa ghọrọ nnukwu nsogbu.

Anyị na-ebuga na GitLab. Anyị na-anakọta onyonyo, kwaba ha na ndekọ GitLab wee bupụ ha na mmepụta. Ihe kachasị ogologo na ndepụta a bụ ikpokọta ihe oyiyi. Dịka ọmụmaatụ: na-enweghị njikarịcha, ụlọ azụ azụ ọ bụla were nkeji iri na anọ.

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

N'ikpeazụ, ọ bịara doo anya na anyị apụghịzi ịdị ndụ otú a, anyị wee nọdụ ala chọpụta ihe mere ihe oyiyi ahụ ji ewe ogologo oge iji nakọta. N'ihi ya, anyị jisiri ike belata oge mgbakọ ahụ na 30 sekọnd!

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

Maka edemede a, ka a ghara ijikọta ya na gburugburu ebe ncheta, ka anyị lelee ihe atụ nke ikpokọta ngwa Angular efu. Yabụ, ka anyị mepụta ngwa anyị:

ng n app

Tinye PWA na ya (anyị na-aga n'ihu):

ng add @angular/pwa --project app

Ka a na-ebudata ngwugwu nde npm, ka anyị chọpụta ka onyonyo docker si arụ ọrụ. Docker na-enye ikike ịkwakọ ngwa ma mee ya na ebe dịpụrụ adịpụ nke a na-akpọ akpa. N'ihi ikewapụ, ị nwere ike na-agba ọtụtụ akpa n'otu oge n'otu sava. Ngwongwo dị ọkụ karịa igwe mebere n'ihi na ha na-agba ọsọ na kernel sistemụ. Iji jiri ngwa anyị na-ebu akpa, anyị ga-ebu ụzọ mepụta onyonyo nke anyị ga-etinye ihe niile dị mkpa maka ngwa anyị iji na-agba ọsọ. N'ezie, onyonyo bụ nnomi nke sistemụ faịlụ. Dịka ọmụmaatụ, were Dockerfile:

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

Dockerfile bụ usoro ntuziaka; Site n'ime nke ọ bụla n'ime ha, Docker ga-echekwa mgbanwe na sistemụ faịlụ wee kpuchie ha na ndị gara aga. Otu ọ bụla na-emepụta oyi akwa nke ya. Na emechara oyiyi bụ n'ígwé jikọtara ọnụ.

Ihe dị mkpa ịmara: Docker oyi akwa ọ bụla nwere ike cache. Ọ bụrụ na ọ nweghị ihe gbanwere kemgbe ụlọ ikpeazụ, mgbe ahụ kama ime iwu ahụ, docker ga-ewere oyi akwa dị njikere. Ebe ọ bụ na nnukwu mmụba na-ewu ngwa ngwa ga-abụ n'ihi iji cache, mgbe ị na-atụle ọsọ ọsọ, anyị ga-aṅa ntị kpọmkwem iji wuo ihe oyiyi na ebe nchekwa dị njikere. Yabụ, nzọụkwụ site nzọụkwụ:

  1. Anyị na-ehichapụ foto na mpaghara ka ọsọ ndị gara aga ghara imetụta ule ahụ.
    docker rmi $(docker images -q)
  2. Anyị na-amalite ihe owuwu ahụ maka oge mbụ.
    time docker build -t app .
  3. Anyị na-agbanwe faịlụ src/index.html - anyị na-eṅomi ọrụ nke mmemme.
  4. Anyị na-arụ ọrụ ahụ ugboro abụọ.
    time docker build -t app .

Ọ bụrụ na ahaziri gburugburu ebe obibi maka ihe onyonyo n'ụzọ ziri ezi (karịa na nke dị n'okpuru), mgbe ahụ, mgbe ụlọ ahụ malitere, Docker ga-enwelarị ụyọkọ cache n'ime ụgbọ. Ọrụ anyị bụ ịmụta ka esi eji cache eme ihe ka ụlọ ahụ wee gaa ngwa ngwa o kwere mee. Ebe anyị na-eche na ịrụ ụlọ na-enweghị ebe nchekwa na-eme naanị otu ugboro — nke mbụ — anyị nwere ike ileghara etu oge mbụ ahụ si dị nwayọ. Na ule, nke abụọ na-agba ọsọ nke ụlọ ahụ dị anyị mkpa, mgbe cache na-ekpo ọkụ na anyị dị njikere ime achịcha anyị. Agbanyeghị, ụfọdụ ndụmọdụ ga-emetụtakwa ihe owuwu nke mbụ.

Ka anyị tinye Dockerfile akọwara n'elu na nchekwa ọrụ wee bido ihe nrụpụta. Ejikọkọla ndepụta niile maka ịdị mfe ọgụgụ.

$ 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

Anyị na-agbanwe ọdịnaya nke src/index.html wee mee ya nke ugboro abụọ.

$ 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

Iji hụ ma ọ bụrụ na anyị nwere onyonyo a, gbaa iwu ahụ docker images:

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

Tupu wuo ụlọ, docker na-ewere faịlụ niile dị ugbu a wee ziga ha na daemon ya Sending build context to Docker daemon 409MB. A kọwapụtara ọnọdụ ihe nrụpụta dị ka arụmụka ikpeazụ na iwu iwu ụlọ. N'ọnọdụ anyị, nke a bụ akwụkwọ ndekọ aha ugbu a - ".", - na Docker na-adọkpụrụ ihe niile anyị nwere na folda a. 409 MB dị ọtụtụ: ka anyị chee echiche otu esi edozi ya.

Na-ebelata ihe ndị gbara ya gburugburu

Iji belata ihe gbara ya gburugburu, enwere nhọrọ abụọ. Ma ọ bụ tinye faịlụ niile achọrọ maka mgbakọ n'ime folda dị iche wee tụọ ọnọdụ docker na nchekwa a. Nke a nwere ike ọ gaghị adị mma mgbe niile, ya mere ọ ga-ekwe omume ịkọwapụta ihe ndị ọzọ: ihe na-ekwesịghị ịdọrọ n'ime ọnọdụ. Iji mee nke a, tinye faịlụ .dockerignore na oru ngo ma gosi ihe na-adịghị mkpa maka ihe owuwu:

.git
/node_modules

ma megharịa ihe nrụpụta ahụ ọzọ:

$ 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 dị mma karịa 409 MB. Anyị belatara nha onyonyo site na 1.74 ruo 1.38 GB:

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

Ka anyị gbalịa ibelata nha onyonyo n'ihu.

Anyị na-eji Alpine

Ụzọ ọzọ ị ga-esi chekwaa na nha onyonyo bụ iji obere onyonyo nne na nna. Ihe oyiyi nne na nna bụ ihe oyiyi na ndabere nke a na-akwado ihe oyiyi anyị. A na-akọwapụta oyi akwa ala site na iwu ahụ FROM na Dockerfile. N'ọnọdụ anyị, anyị na-eji ihe oyiyi dabere na Ubuntu nke etinyelarị nodejs. Ma ọ tụrụ ...

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

... fọrọ nke nta ka a gigabyte. Ị nwere ike belata ụda nke ukwuu site na iji onyonyo dabere na Alpine Linux. Alpine bụ obere Linux. Onyonyo docker maka nodejs dabere na alpine tụrụ naanị 88.5 MB. Ya mere, ka anyị dochie anya ihe oyiyi anyị dị ndụ n'ime ụlọ:

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

Anyị kwesịrị ịwụnye ihe ụfọdụ dị mkpa iji wuo ngwa ahụ. Ee, Angular anaghị arụ ọrụ na-enweghị Python ¯(°_o)/n

Mana nha onyonyo dara na 150 MB:

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

Ka anyị gaa n'ihu.

Mgbakọ multistage

Ọ bụghị ihe niile dị na oyiyi ahụ bụ ihe anyị chọrọ na mmepụta.

$ 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

Site n'enyemaka nke docker run app ls -lah anyị wepụtara akpa dabere na onyonyo anyị app ma mee iwu ahụ n'ime ya ls -lah, mgbe nke ahụ gasịrị, akpa ahụ rụchara ọrụ ya.

Na mmepụta anyị chọrọ naanị folda dist. N'okwu a, a ga-enye faịlụ ndị ahụ n'ụzọ ụfọdụ. Ị nwere ike ịgba ọsọ ụfọdụ sava HTTP na nodejs. Mana anyị ga-eme ka ọ dị mfe. Chee otu okwu Russian nwere mkpụrụedemede anọ "y". Right! Ynzhynyksy. Ka anyị were nginx were foto were, tinye folda n'ime ya dist na obere nhazi:

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

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

Nrụpụta ọtụtụ ọkwa ga-enyere anyị aka ime ihe a niile. Ka anyị gbanwee Dockerfile anyị:

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 .

Ugbu a, anyị nwere ntụziaka abụọ FROM na Dockerfile, onye ọ bụla n'ime ha na-agba ọsọ dị iche iche wuo usoro. Anyị kpọrọ nke mbụ builder, mana malite na nke ikpeazụ SITE, a ga-akwado foto ikpeazụ anyị. Nzọụkwụ ikpeazụ bụ iji nginx detuo ihe ochie nke ọgbakọ anyị na nzọụkwụ gara aga n'ime onyonyo ikpeazụ. Ogo onyonyo a ebelatala nke ukwuu:

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

Ka anyị jiri ihe onyonyo anyị mee akpa ahụ wee hụ na ihe niile na-arụ ọrụ:

docker run -p8080:80 app

N'iji nhọrọ -p8080: 80, anyị zigara ọdụ ụgbọ mmiri 8080 na igwe nnabata anyị na ọdụ ụgbọ mmiri 80 n'ime akpa ebe nginx na-agba. Mepee na ihe nchọgharị http://localhost:8080/ ma anyị na-ahụ ngwa anyị. Ihe niile na-arụ ọrụ!

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

Mbelata nha onyonyo site na 1.74 GB gaa na 36 MB na-ebelata nke ukwuu oge ọ na-ewe iji wepụta ngwa gị na nrụpụta. Ma ka anyị laghachi azụ n'oge mgbakọ.

$ 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

Ịgbanwe usoro nke n'ígwé

Akpadoro nzọụkwụ atọ mbụ anyị (ndụmọdụ Using cache). Na nzọụkwụ nke anọ, a na-edepụtaghachi faịlụ ọrụ niile ma na ntinye nke ise etinyere RUN npm ci - ihe dị ka 47.338s. Kedu ihe kpatara ịwụnye ndabere mgbe ọ bụla ma ọ bụrụ na ha na-agbanwe adịkarịghị? Ka anyị chọpụta ihe kpatara na echekwaghị ha. Isi ihe bụ na Docker ga-elele oyi akwa site na oyi akwa iji hụ ma iwu na faịlụ ndị metụtara ya agbanweela. Na nzọụkwụ nke anọ, anyị na-eṅomi faịlụ niile nke ọrụ anyị, na n'ime ha, n'ezie, e nwere mgbanwe, ya mere Docker ọ bụghị nanị na-ewepụ oyi akwa a na cache, kamakwa niile sochirinụ! Ka anyị mee obere mgbanwe na 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 .

Nke mbụ, package.json na pack-lock.json na-e depụtaghachi ya, mgbe ahụ, etinyere ihe ndabere, na naanị mgbe nke ahụ gasịrị, a na-eṅomi ọrụ ahụ dum. N'ihi ya:

$ 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 sekọnd kama nkeji 3 - ka mma! Usoro ziri ezi nke n'ígwé dị mkpa: mbụ anyị na-eṅomi ihe na-adịghị agbanwe agbanwe, mgbe ahụ ihe na-agbanwe adịkarịghị, na n'ikpeazụ ihe na-agbanwe mgbe.

Na-esote, okwu ole na ole gbasara ịchịkọta onyonyo na sistemụ CI/CD.

Iji onyonyo gara aga maka cache

Ọ bụrụ na anyị na-eji ụdị ngwọta SaaS maka ihe owuwu ahụ, mgbe ahụ cache Docker mpaghara nwere ike ịdị ọcha ma dị ọhụrụ. Iji nye docker ebe ọ ga-esi nweta akwa akwa, nye ya ihe oyiyi e wuru na mbụ.

Ka anyị were ọmụmaatụ iwulite ngwa anyị na GitHub Actions. Anyị na-eji nhazi a

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

A na-achịkọta onyonyo a wee kwaga na ngwugwu GitHub n'ime nkeji abụọ na sekọnd iri abụọ:

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

Ugbu a, ka anyị gbanwee ihe owuwu ahụ ka a na-eji cache dabere na onyonyo arụgoro na mbụ:

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

Mbụ anyị kwesịrị ịgwa gị ihe mere eji malite iwu abụọ build. Nke bụ eziokwu bụ na na mgbakọ multistage ihe oyiyi ga-esi na ya pụta ga-abụ nhazi nke ọkwa site na njedebe ikpeazụ. N'okwu a, a gaghị etinye n'ígwé si n'ígwé ndị gara aga na foto a. Ya mere, mgbe ị na-eji onyonyo ikpeazụ sitere na ụlọ gara aga, Docker agaghị enwe ike ịchọta ọkwa dị njikere iji wuo ihe oyiyi ahụ na nodejs (ogbo onye nrụpụta). Iji dozie nsogbu a, a na-emepụta ihe oyiyi etiti $IMAGE_NAME-builder-stage a na-akwaga ya na ngwugwu GitHub ka e wee jiri ya mee ihe na-esote dị ka ebe nchekwa.

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

E wedara ngụkọta oge mgbakọ ahụ ka ọ bụrụ otu nkeji na ọkara. A na-eji ọkara nkeji na-ebuli foto ndị gara aga.

Ịhụ ụzọ

Ụzọ ọzọ ị ga-esi dozie nsogbu nke oghere Docker dị ọcha bụ ịkwaga ụfọdụ n'ígwé n'ime Dockerfile ọzọ, wuo ya iche, tinye ya n'ime ndekọ ndekọ ma jiri ya dịka nne na nna.

Anyị na-emepụta foto nodejs nke anyị iji wuo ngwa Angular. Mepụta Dockerfile.node n'ime oru ngo a

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

Anyị na-anakọta ma kpalie onyonyo ọha na Docker Hub:

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

Ugbu a na isi Dockerfile anyị, anyị na-eji foto emechara:

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

N'ihe atụ anyị, oge a na-ewu ụlọ ebelataghị, ma ihe oyiyi ndị e wuru tupu oge eruo nwere ike ịba uru ma ọ bụrụ na ị nwere ọtụtụ ọrụ ma tinye otu ịdabere na nke ọ bụla n'ime ha.

Ndụmọdụ ụfọdụ maka otu esi eme ngwa ngwa iwulite onyonyo Docker. Dịka ọmụmaatụ, ruo 30 sekọnd

Anyị lere anya n'ọtụtụ ụzọ iji mee ka iwulite onyonyo docker ọsọ ọsọ. Ọ bụrụ na ịchọrọ ka nbunye ahụ gaa ngwa ngwa, nwaa iji nke a na ọrụ gị:

  • ibelata ọnọdụ;
  • iji obere ihe oyiyi nne na nna;
  • mgbakọ multistage;
  • na-agbanwe usoro ntuziaka dị na Dockerfile iji jiri cache mee ihe nke ọma;
  • ịtọ ntọala cache na sistemụ CI / CD;
  • mmalite okike ihe oyiyi.

Enwere m olileanya na ihe atụ a ga-eme ka ọ dokwuo anya ka Docker si arụ ọrụ, ma ị ga-enwe ike ịhazi nke ọma nke mbugharị gị. Iji jiri ihe atụ si n'akụkọ ahụ gwuo egwu, e mepụtala ebe nchekwa https://github.com/devopsprodigy/test-docker-build.

isi: www.habr.com

Tinye a comment