Ṣ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ṣẹ.
A ni iriri to dara ni ṣiṣẹda ati atilẹyin awọn oju opo wẹẹbu media:
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.
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!
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:
- 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)
- A ṣe ifilọlẹ ikole fun igba akọkọ.
time docker build -t app .
- A yipada faili src/index.html - a farawe iṣẹ ti olutọpa kan.
- 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
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:
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.
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.
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
orisun: www.habr.com