Leideanna maidir le Dugairí: Glan do mheaisín dramhphoist

Leideanna maidir le Dugairí: Glan do mheaisín dramhphoist

Hey Habr! Cuirim i láthair d'aistriúchán ar an alt "Leideanna Docker: Glan Suas Do Mheaisín Áitiúil" an t-údar Luc Giúistís.

Sa lá atá inniu beimid ag caint faoi conas a úsáideann Docker spás diosca an mheaisín óstach, agus déanfaimid amach freisin conas an spás seo a shaoradh ó scraps na n-íomhánna agus na gcoimeádán neamhúsáidte.


Leideanna maidir le Dugairí: Glan do mheaisín dramhphoist

Tomhaltas iomlán

Is rud iontach é Docker, is dócha nach bhfuil mórán daoine in amhras faoi inniu. Díreach cúpla bliain ó shin, thug an táirge seo bealach iomlán nua dúinn chun aon timpeallacht a thógáil, a sheachadadh agus a reáchtáil, rud a ligeann dúinn acmhainní LAP agus RAM a shábháil go suntasach. Chomh maith leis seo (agus do roinnt beidh sé seo an rud is tábhachtaí) Docker lig dúinn a shimpliú thar a bheith agus a aontú le bainistíocht saolré ár dtimpeallachtaí táirgthe.

Mar sin féin, tagann na taitneamhachtaí seo go léir den saol nua-aimseartha ar phraghas. Nuair a dhéanaimid coimeádáin a rith, ár n-íomhánna féin a íoslódáil nó a chruthú, agus éiceachórais chasta a úsáid, ní mór dúinn íoc. Agus íocaimid, i measc rudaí eile, le spás diosca.

Más rud é nár smaoinigh tú riamh ar an méid spáis a thógann Docker ar do mheaisín, b'fhéidir go gcuirfeadh aschur an ordaithe seo iontas ort:

$ docker system df

Leideanna maidir le Dugairí: Glan do mheaisín dramhphoist

Taispeánann sé seo úsáid diosca Docker i gcomhthéacsanna éagsúla:

  • íomhánna – méid iomlán na n-íomhánna a íoslódáladh ó stórtha íomhánna agus a tógadh ar do chóras;
  • coimeádáin – méid iomlán an spáis diosca a úsáideann coimeádáin reatha (a chiallaíonn toirt iomlán na sraitheanna inléite-scríofa de na coimeádáin go léir);
  • toirteanna áitiúla – an méid stórála áitiúil a chuirtear ar choimeádáin;
  • taisce a thógáil – comhaid shealadacha ginte ag an bpróiseas tógála íomhá (ag baint úsáide as an uirlis BuildKit, atá ar fáil ag tosú le leagan Docker 18.09).

Geall liom tar éis an aistrithe simplí seo go bhfuil fonn ort do dhiosca truflais a ghlanadh agus ghigibheart lómhara a thabhairt ar ais beo (nóta: go háirithe má íocann tú cíos ar na ghigibheart seo gach mí).

Úsáid diosca ag coimeádáin

Gach uair a chruthaíonn tú coimeádán ar an meaisín óstach, cruthaítear roinnt comhad agus eolairí san eolaire /var/lib/docker, agus is fiú na nithe seo a leanas a thabhairt faoi deara ina measc:

  • Eolaire /var/lib/docker/containers/container_ID – nuair a bhíonn an tiománaí logála caighdeánach á úsáid, seo an áit a shábhálfar logaí imeachta i bhformáid JSON. Is minic a fhágann logaí ró-mhionsonraithe, chomh maith le logaí nach léann aon duine nó nach ndéanann aon duine a phróiseáil ar bhealach eile, go n-éiríonn dioscaí lán.
  • San eolaire /var/lib/docker/overlay2 tá na sraitheanna léite-scríofa coimeádán (is é overlay2 an rogha tiománaí i bhformhór na ndáiltí Linux). Má stórálann an coimeádán sonraí ina chóras comhaid, is san eolaire seo a chuirfear é.

Samhlóimid córas ar a bhfuil Docker pristine suiteáilte, nach raibh baint aige riamh le coimeádáin a sheoladh nó íomhánna a thógáil. Féachfaidh a thuairisc úsáide spás diosca 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

Seolfaimid roinnt coimeádán, mar shampla, NGINX:

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

Cad a tharlaíonn don diosca:

  • áitíonn íomhánna 126 MB, is é seo an NGINX céanna a sheol muid sa choimeádán;
  • coimeádáin suas 2 beart ridiculous.

$ 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

Ag breithiúnas leis an gconclúid, níl aon spás againn fós a d'fhéadfaimis a shaoradh. Ós rud é go bhfuil 2 beart go hiomlán suaibhreosach, déanaimis a shamhlú gur scríobh ár NGINX gan choinne áit éigin 100 Meigeavata sonraí agus chruthaigh sé test.img comhad den mhéid seo go díreach taobh istigh féin.

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

Déanaimis scrúdú arís ar úsáid spáis diosca an ósta. Feicfimid go bhfuil 100 Meigeavata ag an gcoimeádán (coimeádáin) ann.

$ 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

Sílim go bhfuil d'inchinn fiosrach ag déanamh iontais cheana féin cá bhfuil ár gcomhad test.img suite. Lorgaimis é:

$ 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

Gan dul isteach i sonraí, is féidir linn a thabhairt faoi deara go bhfuil an comhad test.img suite go háisiúil ag an leibhéal léite-scríobh, arna rialú ag an tiománaí overlay2. Má stopaimid ár gcoimeádán, inseoidh an t-óstach dúinn gur féidir, i bprionsabal, an spás seo a shaoradh:

# 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

Conas is féidir linn é seo a dhéanamh? Tríd an gcoimeádán a scriosadh, is éard a bheidh i gceist leis an spás comhfhreagrach a ghlanadh ag an leibhéal inléite-scríofa.

Leis an ordú seo a leanas, is féidir leat na coimeádáin suiteáilte go léir a bhaint i gceann thit swoop agus do dhiosca a ghlanadh de gach comhad inléite-scríofa a chruthaigh siad:

$ 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, scaoileamar 104,9 Meigeavata tríd an gcoimeádán a scriosadh. Ach ós rud é nach n-úsáideann muid an íomhá a íoslódáladh roimhe seo a thuilleadh, is iarrthóir é freisin chun ár n-acmhainní a scriosadh 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

Nóta: Chomh fada agus atá an íomhá in úsáid ag coimeádán amháin ar a laghad, ní bheidh tú in ann an cleas seo a úsáid.

Níl éifeacht ag an bhfo-ordú prune a d'úsáideamar thuas ach ar choimeádáin stoptha. Más mian linn ní hamháin coimeádáin stoptha ach freisin atá ag rith a scriosadh, ba cheart dúinn ceann de na horduithe seo a úsáid:

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

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

Nótaí taobh: má úsáideann tú an paraiméadar -rm nuair a thosaíonn tú coimeádán, ansin nuair a stopann sé, saorfar an spás diosca go léir a bhí ann.

Ag baint úsáide as íomhánna diosca

Cúpla bliain ó shin, bhí méid íomhá de na céadta meigibheart go hiomlán gnáth: íomhá Ubuntu mheá 600 meigibheart, agus íomhá Microsoft .Net mheá roinnt ghigibheart. Sna laethanta achrannacha sin, d’fhéadfadh go mbeadh tionchar mór ag baint le híoslódáil íomhá amháin ar do spás diosca saor in aisce, fiú má bhí tú ag roinnt leibhéil idir íomhánna. Inniu - moladh mór - is lú i bhfad meáchan na n-íomhánna, ach mar sin féin, is féidir leat na hacmhainní atá ar fáil a líonadh go tapa mura ndéanann tú roinnt réamhchúraimí.

Tá roinnt cineálacha íomhánna ann nach bhfuil le feiceáil go díreach ag an úsáideoir deiridh:

  • íomhánna idirmheánacha, ar a mbonn a bhailítear íomhánna eile - ní féidir iad a scriosadh má úsáideann tú coimeádáin atá bunaithe ar na híomhánna “eile” seo;
  • is íomhánna idirmheánacha iad íomhánna dangling nach ndéanann aon cheann de na coimeádáin reatha tagairt dóibh - is féidir iad a scriosadh.
  • Leis an ordú seo a leanas is féidir leat a sheiceáil le haghaidh íomhánna dangling ar do chóras:

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

Is féidir leat iad a bhaint ar an mbealach seo a leanas:

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

Is féidir linn an fo-ordú prune a úsáid freisin:

$ 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

Más mian linn go tobann na híomhánna go léir a scriosadh go hiomlán (agus gan a bheith díreach ag crochadh) le hordú amháin, is féidir linn é seo a dhéanamh:

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

Úsáid diosca de réir toirte

Úsáidtear toirteanna chun sonraí a stóráil lasmuigh de chóras comhaid an choimeádáin. Mar shampla, más mian linn torthaí iarratais a shábháil chun iad a úsáid ar bhealach éigin eile. Sampla coitianta is ea bunachair shonraí.

Seolfaimid coimeádán MongoDB, cuirfimid imleabhar taobh amuigh den choimeádán, agus cuirfimid cúltaca bunachar sonraí ar ais uaidh (tá sé ar fáil againn sa chomhad 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

Beidh na sonraí suite ar an meaisín ósta san eolaire /var/lib/docker/volumes. Ach cén fáth nach bhfuil tú ag leibhéal léite-scríofa an choimeádáin? Mar gheall ar Dockerfile íomhá MongoDB, sainmhínítear an eolaire / data/db (áit a stórálann MongoDB a chuid sonraí de réir réamhshocraithe) mar imleabhar.

Leideanna maidir le Dugairí: Glan do mheaisín dramhphoist

Nóta taoibh: úsáideann go leor íomhánna a chaithfidh sonraí a tháirgeadh méideanna chun na sonraí sin a stóráil.

Nuair a imrímid go leor le MongoDB agus stopann (nó b'fhéidir fiú scriosadh) an coimeádán, ní scriosfar an toirt. Leanfaidh sé ar aghaidh ag glacadh lenár spás diosca luachmhar go dtí go scriosfaimid go sainráite é le hordú mar seo:

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

Bhuel, nó is féidir linn an fo-ordú prune atá ar eolas againn cheana féin a úsáid:

$ 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:~$

Bain úsáid as diosca le haghaidh íomhá a thógáil taisce

In Docker 18.09, tá roinnt athruithe déanta ar an bpróiseas cruthaithe íomhá a bhuíochas leis an uirlis BuildKit. Méadaíonn an rud seo luas an phróisis agus déanann sé stóráil sonraí agus bainistíocht slándála a bharrfheabhsú. Anseo ní bhreithneoidh muid sonraí uile na huirlise iontach seo; ní dhíreoimid ach ar an gcaoi a dtéann sé i ngleic le saincheisteanna a bhaineann le húsáid spás diosca.

Ligean le rá go bhfuil feidhmchlár Node.Js go hiomlán simplí againn:

  • cuireann an comhad index.js tús le freastalaí HTTP simplí a fhreagraíonn le líne do gach iarratas a fhaightear:
  • sainmhíníonn an comhad package.json na spleáchais, agus ní úsáidtear ach expressjs chun an freastalaí HTTP a rith:

$ 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"
      }
    }

Breathnaíonn an Dockerfile chun an íomhá a thógáil 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"]

Déanaimis an íomhá a thógáil ar an ngnáthbhealach, gan BuildKit a úsáid:

$ docker build -t app:1.0 .

Má dhéanaimid seiceáil ar úsáid spáis diosca, is féidir linn a fheiceáil nach bhfuil ach an buníomhá (nód:13-alpach) agus an íomhá ceann scríbe (aip: 1.0) ag glacadh spáis:

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

Déanaimis an dara leagan dár bhfeidhmchlár a thógáil, ag baint úsáide as BuildKit. Chun seo a dhéanamh, níl le déanamh againn ach an athróg DOCKER_BUILDKIT a shocrú go 1:

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

Má dhéanaimid seiceáil ar úsáid an diosca anois, feicfidh muid go bhfuil an taisce tógála (buid-cache) i gceist anois:

$ 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

Chun é a ghlanadh, bain úsáid as an ordú seo 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

Soiléir ar fad!

Mar sin, d'fhéachamar ar spás diosca a bhí áitithe ag coimeádáin, íomhánna agus toirteanna a ghlanadh. Cuidíonn an fo-ordú prune linn leis seo. Ach is féidir é a úsáid freisin ag leibhéal an chórais docker, agus glanfaidh sé gach rud is féidir leis:

$ 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]

Más rud é ar chúis éigin go bhfuil spás diosca á shábháil agat ar mheaisín a ritheann Docker, ba cheart go mbeadh sé ina nós ag rith an ordaithe seo go tréimhsiúil.

Foinse: will.com

Add a comment