Molaidhean Docker: Glan an inneal agad de sgudal

Molaidhean Docker: Glan an inneal agad de sgudal

Hi Habr! Bidh mi a’ toirt d’ aire eadar-theangachadh an artaigil "Molaidhean Docker: Glan suas an inneal ionadail agad" ùghdar Luc Juggery.

An-diugh bruidhnidh sinn mu mar a bhios Docker a ’cleachdadh àite diosc an inneal aoigheachd, agus bidh sinn cuideachd a’ faighinn a-mach mar as urrainn dhut an àite seo a shaoradh bho chriomagan ìomhaighean agus soithichean nach deach a chleachdadh.


Molaidhean Docker: Glan an inneal agad de sgudal

Caitheamh iomlan

Is e rud fionnar a th’ ann an Docker, is dòcha nach eil mòran dhaoine teagmhach mu dheidhinn an-diugh. Dìreach beagan bhliadhnaichean air ais, thug an toradh seo dòigh gu tur ùr dhuinn airson àrainneachd sam bith a thogail, a lìbhrigeadh agus a ruith, a ’toirt cothrom dhuinn goireasan CPU agus RAM a shàbhaladh gu mòr. A bharrachd air an seo (agus dha cuid is e seo an rud as cudromaiche) tha Docker air leigeil leinn riaghladh cuairt-beatha ar n-àrainneachdan cinneasachaidh a dhèanamh nas sìmplidhe agus aonachadh.

Ach, thig na toileachasan sin de bheatha an latha an-diugh aig prìs. Nuair a bhios sinn a’ ruith shoithichean, a’ luchdachadh sìos no a’ cruthachadh na h-ìomhaighean againn fhèin, agus a’ cleachdadh eag-shiostaman iom-fhillte, feumaidh sinn pàigheadh. Agus bidh sinn a’ pàigheadh, am measg rudan eile, le àite diosc.

Mura smaoinich thu a-riamh dè an ìre de rùm a bheir Docker air an inneal agad, is dòcha gun cuir thu iongnadh mì-thlachdmhor le toradh an àithne seo:

$ docker system df

Molaidhean Docker: Glan an inneal agad de sgudal

Tha seo a’ sealltainn cleachdadh diosc Docker ann an diofar cho-theacsan:

  • ìomhaighean - meud iomlan nan ìomhaighean a chaidh a luchdachadh sìos bho stòran ìomhaighean agus a chaidh a thogail air an t-siostam agad;
  • soithichean - an àireamh iomlan de dh’ àite diosc a bhios a ’ruith shoithichean (a’ ciallachadh an àireamh iomlan de shreathan leughaidh-sgrìobhaidh de na soithichean gu lèir);
  • meudan ionadail - na tha de stòradh ionadail air a chuir air soithichean;
  • tog tasgadan - faidhlichean sealach air an cruthachadh leis a’ phròiseas togail ìomhaighean (a ’cleachdadh an inneal BuildKit, ri fhaighinn a’ tòiseachadh le dreach Docker 18.09).

Cuiridh mi geall às deidh a’ ghluasaid shìmplidh seo gu bheil thu airson do dhiosca sgudail a ghlanadh agus gigabytes luachmhor a thoirt air ais beò (nota: gu sònraichte ma phàigheas tu màl airson na gigabytes sin gach mìos).

Cleachdadh diosc le soithichean

Gach uair a chruthaicheas tu soitheach air an inneal aoigheachd, thèid grunn fhaidhlichean agus eòlairean a chruthachadh anns an eòlaire / var / lib / docker, am measg sin is fhiach na leanas a thoirt fa-near:

  • Directory /var/lib/docker/containers/container_ID - nuair a bhios tu a’ cleachdadh an draibhear logaidh àbhaisteach, seo far a bheil logaichean tachartais air an sàbhaladh ann an cruth JSON. Bidh logaichean ro mhionaideach, a bharrachd air logaichean nach bi duine a’ leughadh no a’ pròiseasadh eile, gu tric ag adhbhrachadh gum bi diosgan làn.
  • Anns an eòlaire / var / lib / docker / overlay2 tha na sreathan leughaidh-sgrìobhaidh container (is e overlay2 an draibhear as fheàrr leotha anns a’ mhòr-chuid de sgaoilidhean Linux). Ma tha an soitheach a’ stòradh dàta san t-siostam faidhle aige, is ann san eòlaire seo a thèid a chuir.

Smaoinichidh sinn air siostam air a bheil Docker pristine air a chuir a-steach, nach robh a-riamh an sàs ann a bhith a’ cur air bhog shoithichean no a’ togail ìomhaighean. Bidh an aithisg cleachdadh àite diosc aige a’ coimhead mar seo:

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         0          0          0B         0B
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

Nach cuir sinn air bhog cuid de shoitheach, mar eisimpleir, NGINX:

$ docker container run --name www -d -p 8000:80 nginx:1.16

Dè thachras don diosc:

  • tha ìomhaighean ann an 126 MB, is e seo an aon NGINX a chuir sinn air bhog anns a’ ghobhar;
  • bidh soithichean a’ toirt suas 2 bytes gòrach.

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          1          126M       0B (0%)
Containers     1          1          2B         0B (0%)
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

A’ breithneachadh leis a’ cho-dhùnadh, chan eil àite againn fhathast a b’ urrainn dhuinn a shaoradh. Leis gu bheil 2 bytes gu tur suarach, smaoinichidh sinn gun do sgrìobh an NGINX againn ris nach robh dùil an àiteigin 100 Megabytes de dhàta agus chruthaich e faidhle test.img den dearbh mheud seo na bhroinn fhèin.

$ docker exec -ti www 
  dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]

Dèanamaid sgrùdadh a-rithist air cleachdadh àite diosc air an òstair. Chì sinn gu bheil an soitheach (soithichean) ann an 100 Megabytes an sin.

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          1          126M       0B (0%)
Containers     1          1          104.9MB    0B (0%)
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

Tha mi a ’smaoineachadh gu bheil an eanchainn fiosrachail agad mu thràth a’ faighneachd càite a bheil am faidhle test.img againn suidhichte. Feuch gun coimhead sinn air a shon:

$ find /var/lib/docker -type f -name test.img
/var/lib/docker/overlay2/83f177...630078/merged/test.img
/var/lib/docker/overlay2/83f177...630078/diff/test.img

Gun a bhith a’ dol a-steach gu mion-fhiosrachadh, is urrainn dhuinn a thoirt fa-near gu bheil am faidhle test.img ann an àite freagarrach aig an ìre leughaidh-sgrìobhaidh, fo smachd an draibhear overlay2. Ma stadas sinn ar soitheach, innsidh an t-òstair dhuinn gum faodar an t-àite seo a shaoradh, ann am prionnsabal:

# Stopping the www container
$ docker stop www

# Visualizing the impact on the disk usage
$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          1          126M       0B (0%)
Containers     1          0          104.9MB    104.9MB (100%)
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

Ciamar as urrainn dhuinn seo a dhèanamh? Le bhith a’ cuir às don ghobhar, a bheir a-steach a bhith a’ glanadh an àite fhreagarrach aig an ìre leughaidh-sgrìobhaidh.

Leis an àithne a leanas, faodaidh tu a h-uile inneal stàlaichte a thoirt air falbh ann an aon thuit swoop agus do diosc a ghlanadh de gach faidhle leughaidh-sgrìobhaidh a chruthaich iad:

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5e7f8e5097ace9ef5518ebf0c6fc2062ff024efb495f11ccc89df21ec9b4dcc2

Total reclaimed space: 104.9MB

Mar sin, shaor sinn 104,9 Megabytes le bhith a’ cuir às don ghobhar. Ach leis nach bi sinn a’ cleachdadh an ìomhaigh a chaidh a luchdachadh sìos roimhe seo, bidh e cuideachd na thagraiche airson na goireasan againn a dhubhadh às agus a shaoradh:

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         1          0          126M       126M (100%)
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

Nota: Cho fad 's a tha an ìomhaigh ga chleachdadh le co-dhiù aon soitheach, chan urrainn dhut an cleas seo a chleachdadh.

Chan eil buaidh aig an fho-òrdugh prune a chleachd sinn gu h-àrd ach air soithichean stad. Ma tha sinn airson cuir às chan ann a-mhàin air stad ach cuideachd a’ ruith shoithichean, bu chòir dhuinn aon de na h-òrdughan sin a chleachdadh:

# Historical command
$ docker rm -f $(docker ps –aq)

# More recent command
$ docker container rm -f $(docker container ls -aq)

Notaichean taobh: ma chleachdas tu am paramadair -rm nuair a thòisicheas tu air soitheach, an uairsin nuair a stadas e, thèid a h-uile àite diosc anns an robh e a shaoradh.

A’ cleachdadh dealbhan diosc

O chionn beagan bhliadhnaichean, bha meud ìomhaigh de cheudan megabytes gu tur àbhaisteach: bha ìomhaigh Ubuntu le cuideam 600 megabytes, agus ìomhaigh Microsoft .Net le cuideam grunn gigabytes. Anns na làithean gruamach sin, dh’ fhaodadh luchdachadh sìos dìreach aon ìomhaigh cìs mhòr a thoirt air an àite diosc an-asgaidh agad, eadhon ged a bhiodh tu a’ roinn ìrean eadar ìomhaighean. An-diugh - moladh gu mòr - tha cuideam mòran nas lugha air ìomhaighean, ach a dh’ aindeoin sin, faodaidh tu na goireasan a tha rim faighinn a lìonadh gu sgiobalta mura gabh thu beagan rabhadh.

Tha grunn sheòrsaichean de dhealbhan ann nach fhaicear gu dìreach don neach-cleachdaidh deireannach:

  • ìomhaighean eadar-mheadhanach, air a bheil ìomhaighean eile air an cruinneachadh - chan urrainnear an toirt air falbh ma chleachdas tu soithichean stèidhichte air na h-ìomhaighean “eile” sin;
  • tha ìomhaighean crochte nan ìomhaighean eadar-mheadhanach nach eil air an ainmeachadh le gin de na soithichean ruith - faodar an toirt às.
  • Leis an àithne a leanas faodaidh tu sgrùdadh a dhèanamh airson ìomhaighean crochte air an t-siostam agad:

$ docker image ls -f dangling=true
REPOSITORY  TAG      IMAGE ID         CREATED             SIZE
none      none   21e658fe5351     12 minutes ago      71.3MB

Faodaidh tu an toirt air falbh san dòigh a leanas:

$ docker image rm $(docker image ls -f dangling=true -q)

Faodaidh sinn cuideachd an subcommand prune a chleachdadh:

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cda
deleted: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5cc
deleted: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347
deleted: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197
deleted: sha256:5945bb6e12888cf320828e0fd00728947104da82e3eb4452f

Total reclaimed space: 12.9kB

Ma tha sinn gu h-obann airson na h-ìomhaighean uile a dhubhadh às gu tur (agus chan ann dìreach a’ crochadh) le aon àithne, is urrainn dhuinn seo a dhèanamh:

$ docker image rm $(docker image ls -q)

Cleachdadh diosc a rèir meud

Bithear a’ cleachdadh leabhraichean gus dàta a stòradh taobh a-muigh siostam faidhle a’ ghobhar. Mar eisimpleir, ma tha sinn airson toraidhean tagraidh a shàbhaladh gus an cleachdadh ann an dòigh air choireigin eile. Is e eisimpleir cumanta stòran-dàta.

Nach cuir sinn inneal MongoDB air bhog, cuir a-steach tomhas-lìonaidh taobh a-muigh an t-soithich, agus cuir cùl-taic stòr-dàta air ais bhuaithe (tha e ri fhaighinn san fhaidhle bck.json):

# Running a mongo container
$ docker run --name db -v $PWD:/tmp -p 27017:27017 -d mongo:4.0

# Importing an existing backup (from a huge bck.json file)
$ docker exec -ti db mongoimport 
  --db 'test' 
  --collection 'demo' 
  --file /tmp/bck.json 
  --jsonArray

Bidh an dàta suidhichte air an inneal aoigheachd anns an eòlaire / var/lib/docker/volumes. Ach carson nach ann aig ìre leughaidh-sgrìobhaidh an t-soithich? Air sgàth 's ann an Dockerfile an ìomhaigh MongoDB, tha an eòlaire / data / db (far a bheil MongoDB a' stòradh an dàta aige gu bunaiteach) air a mhìneachadh mar leabhar.

Molaidhean Docker: Glan an inneal agad de sgudal

Nòta taobh: bidh mòran ìomhaighean a dh’ fheumas dàta a thoirt gu buil a’ cleachdadh meudan gus an dàta sin a stòradh.

Nuair a chluicheas sinn gu leòr le MongoDB agus stad (no is dòcha eadhon cuir às) an soitheach, cha tèid an tomhas-lìonaidh a dhubhadh às. Leanaidh e air adhart a’ gabhail an àite diosc prìseil againn gus an cuir sinn às gu soilleir e le àithne mar seo:

$ docker volume rm $(docker volume ls -q)

Uill, no faodaidh sinn an fo-òrdugh prune a chleachdadh air a bheil sinn eòlach mu thràth:

$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
d50b6402eb75d09ec17a5f57df4ed7b520c448429f70725fc5707334e5ded4d5
8f7a16e1cf117cdfddb6a38d1f4f02b18d21a485b49037e2670753fa34d115fc
599c3dd48d529b2e105eec38537cd16dac1ae6f899a123e2a62ffac6168b2f5f
...
732e610e435c24f6acae827cd340a60ce4132387cfc512452994bc0728dd66df
9a3f39cc8bd0f9ce54dea3421193f752bda4b8846841b6d36f8ee24358a85bae
045a9b534259ec6c0318cb162b7b4fca75b553d4e86fc93faafd0e7c77c79799
c6283fe9f8d2ca105d30ecaad31868410e809aba0909b3e60d68a26e92a094da

Total reclaimed space: 25.82GB
luc@saturn:~$

A 'cleachdadh diosg airson tasglann togail dhealbhan

Ann an Docker 18.09, tha am pròiseas cruthachadh ìomhaighean air a dhol tro atharrachaidhean mar thoradh air an inneal BuildKit. Bidh an rud seo ag àrdachadh astar a ’phròiseis agus a’ dèanamh an fheum as fheàrr de stòradh dàta agus riaghladh tèarainteachd. An seo cha bheachdaich sinn air a h-uile mion-fhiosrachadh mun inneal iongantach seo; cha chuir sinn fòcas ach air mar a dhèiligeas e ri cùisean cleachdadh àite diosc.

Canaidh sinn gu bheil tagradh Node.Js gu tur sìmplidh againn:

  • bidh am faidhle index.js a’ tòiseachadh frithealaiche HTTP sìmplidh a fhreagras le loidhne airson gach iarrtas a gheibhear:
  • tha am faidhle package.json a’ mìneachadh nan eisimeileachd, agus chan eil ach expressjs air a chleachdadh gus am frithealaiche HTTP a ruith:

$ cat index.js
var express = require('express');
var util    = require('util');
var app = express();
app.get('/', function(req, res) {
  res.setHeader('Content-Type', 'text/plain');
  res.end(util.format("%s - %s", new Date(), 'Got Request'));
});
app.listen(process.env.PORT || 80);

$ cat package.json
    {
      "name": "testnode",
      "version": "0.0.1",
      "main": "index.js",
      "scripts": {
        "start": "node index.js"
      },
      "dependencies": {
        "express": "^4.14.0"
      }
    }

Tha an Dockerfile airson an ìomhaigh a thogail a’ coimhead mar seo:

FROM node:13-alpine
COPY package.json /app/package.json
RUN cd /app && npm install
COPY . /app/
WORKDIR /app
EXPOSE 80
CMD ["npm", "start"]

Togamaid an ìomhaigh san dòigh àbhaisteach, gun a bhith a’ cleachdadh BuildKit:

$ docker build -t app:1.0 .

Ma nì sinn sgrùdadh air cleachdadh àite diosc, chì sinn nach eil ach an ìomhaigh bhunaiteach (nód: 13-alpach) agus an ìomhaigh targaid (app: 1.0) a’ gabhail àite:

TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         2          0          109.3MB    109.3MB (100%)
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    0          0          0B         0B

Togamaid an dàrna dreach den tagradh againn, a’ cleachdadh BuildKit. Gus seo a dhèanamh, chan fheum sinn ach an caochladair DOCKER_BUILDKIT a shuidheachadh gu 1:

$ DOCKER_BUILDKIT=1 docker build -t app:2.0 .

Ma nì sinn sgrùdadh air cleachdadh diosc a-nis, chì sinn gu bheil an tasgadan togail (buid-cache) a-nis an sàs ann:

$ docker system df
TYPE           TOTAL      ACTIVE     SIZE       RECLAIMABLE
Images         2          0          109.3MB    109.3MB (100%)
Containers     0          0          0B         0B
Local Volumes  0          0          0B         0B
Build Cache    11         0          8.949kB    8.949kB

Gus a ghlanadh, cleachd an òrdugh a leanas:

$ docker builder prune
WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y
Deleted build cache objects:
rffq7b06h9t09xe584rn4f91e
ztexgsz949ci8mx8p5tzgdzhe
3z9jeoqbbmj3eftltawvkiayi

Total reclaimed space: 8.949kB

Glan a h-uile!

Mar sin, choimhead sinn air a bhith a’ glanadh àite diosc anns an robh soithichean, ìomhaighean agus leabhraichean. Bidh an subcommand prune gar cuideachadh le seo. Ach faodar a chleachdadh cuideachd aig ìre siostam docker, agus glanaidh e a h-uile dad as urrainn dha:

$ docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N]

Ma tha thu airson adhbhar air choireigin a’ sàbhaladh àite diosc air an inneal Docker agad, bu chòir an àithne seo a ruith bho àm gu àm a bhith na chleachdadh.

Source: www.habr.com

Cuir beachd ann