Docker Mazano: Bvisa muchina wako wejunk

Docker Mazano: Bvisa muchina wako wejunk

Mhoro, Habr! Ndinokupa kutariswa kweshanduro yechinyorwa "Docker Mazano: Chenesa Muchina Wako Wenzvimbo" munyori Luc Juggery.

Nhasi tichataura nezve mashandisiro anoita Docker nzvimbo yedhisiki yemuchina wemuchina, uye isu tichaonawo nzira yekusunungura iyi nzvimbo kubva kune zvimedu zvemifananidzo isina kushandiswa uye midziyo.


Docker Mazano: Bvisa muchina wako wejunk

Total kushandiswa

Docker chinhu chinotonhorera, pamwe vanhu vashoma vanopokana nhasi. Makore mashoma apfuura, chigadzirwa ichi chakatipa nzira nyowani yekuvaka, kuendesa uye kumhanya chero nharaunda, ichitibvumira kuchengetedza zvakanyanya CPU uye RAM zviwanikwa. Pamusoro peizvi (uye kune vamwe ichi chichava chinhu chakakosha) Docker akatibvumidza kurerutsa zvinoshamisa uye nekubatanidza hupenyu hwekutenderera kwenzvimbo dzedu dzekugadzira.

Zvisinei, zvose izvi zvinofadza zvehupenyu hwemazuva ano zvinouya pamutengo. Patinomhanyisa midziyo, kudhawunirodha kana kugadzira yedu pachedu mifananidzo, uye nekuisa yakaoma ecosystem, isu tinofanirwa kubhadhara. Uye isu tinobhadhara, pakati pezvimwe zvinhu, nedhisiki nzvimbo.

Kana usati wambofunga nezve inguva yakawanda sei iyo Docker inotora pamushini wako, unogona kushamisika zvisingafadzi nekubuda kwemurairo uyu:

$ docker system df

Docker Mazano: Bvisa muchina wako wejunk

Izvi zvinoratidza Docker's disk kushandiswa mumamiriro akasiyana:

  • mifananidzo - saizi yakazara yemifananidzo yakatorwa kubva kumifananidzo repositori uye yakavakirwa pane yako system;
  • midziyo - iyo yakazara dhisiki nzvimbo inoshandiswa nekumhanyisa midziyo (zvinoreva huwandu hwehuwandu hwekuverenga-kunyora zvidimbu zvemidziyo yese);
  • mavhoriyamu emunharaunda - huwandu hwenzvimbo yekuchengetedza yakasungirirwa kumidziyo;
  • kuvaka cache - mafaira enguva pfupi anogadzirwa nemufananidzo wekuvaka maitiro (uchishandisa iyo BuildKit chishandiso, inowanikwa kutanga neDocker vhezheni 18.09).

Ini ndinobheja kuti mushure mekutamisa uku kuri nyore iwe unofarira kuchenesa dhisiki yako yemarara uye kuunza akakosha gigabytes kuhupenyu (chinyorwa: kunyanya kana iwe uchibhadhara rendi yeiyi gigabytes mwedzi wega wega).

Kushandiswa kwedhisiki nemidziyo

Pese paunogadzira mudziyo pamushini wekutambira, akati wandei mafaera uye madhairekitori anogadzirwa mu / var/lib/docker dhairekitori, pakati pezvinotevera zvakakodzera kucherechedza:

  • Dhairekitori /var/lib/docker/containers/container_ID - paunenge uchishandisa mutyairi wekutema matanda, apa ndipo panochengetwa matanda echiitiko muJSON fomati. Kunyanya kutsanangurwa matanda, pamwe chete nematanda ayo hapana anoverenga kana neimwe nzira maitiro, anowanzoita kuti disks azare.
  • Iyo /var/lib/docker/overlay2 dhairekitori ine mudziyo wekuverenga-nyora maseru (overlay2 ndiye anofarirwa mutyairi mune akawanda Linux kugoverwa). Kana mudziyo ukachengeta data mune yayo faira system, saka iri mune ino dhairekitori iyo ichaiswa.

Ngatimbofungidzirai sisitimu inoisirwa pristine Docker, isina kumbobvira yabatanidzwa mukuvhura midziyo kana kuvaka mifananidzo. Yayo disk nzvimbo yekushandisa report ichaita seizvi:

$ 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

Ngatitangei imwe mudziyo, semuenzaniso, NGINX:

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

Chii chinoitika kune disk:

  • mifananidzo inogara 126 MB, iyi ndiyo imwechete NGINX yatakatangisa mumudziyo;
  • midziyo inotora inosekesa 2 bytes.

$ 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

Tichitarisa nemhedziso, hatisati tave nenzvimbo yatingakwanise kusunungura. Sezvo 2 mabheti ari zvachose frivolous, ngatimbofungidzira kuti NGINX yedu isingatarisirwi yakanyora pane imwe nzvimbo 100 Megabytes yedata uye yakagadzira faira test.img yeiyi saizi mukati mayo pachayo.

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

Ngationgororei dhisiki nzvimbo yekushandisa pane host zvakare. Tichaona kuti mudziyo (midziyo) inogara 100 Megabytes ipapo.

$ 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

Ndinofunga huropi hwako hunobvunza huri kutoshamisika kuti test.img file yedu iripi. Ngatizvitsvage:

$ 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

Pasina kupinda mune zvakadzama, tinogona kuona kuti test.img faira iri nyore kuwanikwa padanho rekuverenga-kunyora, rinodzorwa neanodarika mutyairi. Kana tikamisa mudziyo wedu, muenzi anotiudza kuti nzvimbo iyi inogona, mumutemo, kusunungurwa:

# 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

Tingazviita sei? Nekudzima mudziyo, izvo zvinosanganisira kuchenesa nzvimbo inoenderana padanho rekuverenga-kunyora.

Nemurairo unotevera, unogona kubvisa midziyo yese yakaiswa mune imwechete yakadonha uye bvisa dhisiki yako yeese kuverenga-kunyora mafaera akagadzirwa navo:

$ 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

Saka, isu takasunungura 104,9 Megabytes nekudzima mudziyo. Asi sezvo isu tisisashandise iyo yakambodhawunirwa mufananidzo, inovawo mumiriri wekudzima nekusunungura zviwanikwa zvedu:

$ 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

Ongorora: Chero bedzi mufananidzo wacho uchishandiswa neinenge chigaba chimwe chete, haugone kushandisa hunyengeri uhwu.

Iyo prune subcommand yatakashandisa pamusoro inongova nemhedzisiro pamidziyo yakamiswa. Kana isu tichida kudzima kwete kungomira chete asiwo kumhanya midziyo, isu tinofanirwa kushandisa imwe yeiyi mirairo:

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

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

Side manotsi: kana iwe ukashandisa iyo -rm parameter paunenge uchitanga mudziyo, ipapo kana yamira, iyo yese dhisiki nzvimbo yayakatora ichasunungurwa.

Kushandisa disk mifananidzo

Makore mashoma apfuura, saizi yemufananidzo wemazana akati wandei megabytes yaive yakajairika: mufananidzo weUbuntu wairema 600 megabytes, uye Microsoft .Net mufananidzo wairema magigabytes akati wandei. Mumazuva iwayo ane shaggy, kudhawunirodha mufananidzo mumwe chete kunogona kutora hombe pane yako yemahara disk space, kunyangwe iwe wanga uchigovana mazinga pakati pemifananidzo. Nhasi - kurumbidzwa ngakuve kune mukuru - mifananidzo inorema zvishoma, asi kunyange zvakadaro, unogona kukurumidza kuzadza zviwanikwa kana iwe ukasatora matanho ekuzvidzivirira.

Kune akati wandei marudzi emifananidzo asingaonekwe zvakananga kumushandisi wekupedzisira:

  • mifananidzo yepakati, pahwaro hweiyo mimwe mifananidzo inounganidzwa - haigone kubviswa kana ukashandisa midziyo yakavakirwa pane iyi "mamwe" mifananidzo;
  • mifananidzo yakarembera mifananidzo yepakati isingataurwe nechero yemidziyo inomhanya - inogona kudzimwa.
  • Nemurairo unotevera unogona kutarisa mifananidzo yakarembera pane yako system:

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

Unogona kuvabvisa nenzira inotevera:

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

Isu tinogona zvakare kushandisa iyo prune subcommand:

$ 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

Kana tikangoerekana tada kudzima mifananidzo yese zvachose (uye kwete kungorembera) nemurairo mumwe chete, saka tinogona kuita izvi:

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

Kushandiswa kwedhisiki nemavhoriyamu

Mavhoriyamu anoshandiswa kuchengetedza data kunze kweiyo mudziyo faira system. Semuenzaniso, kana isu tichida kuchengetedza zvawanikwa zvekushandisa kuitira kuti tizvishandise neimwe nzira. Muenzaniso wakajairika ndeye databases.

Ngatitangei chigaba cheMongoDB, toisa vhoriyamu kunze kwemudziyo, uye todzoreredza dhatabhesi rekuchengetedza kubva kwairi (tinayo iripo mu bck.json faira):

# 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

Iyo data ichave iri pamushini wekutambira mune /var/lib/docker/vhoriyamu dhairekitori. Asi wadii payero yekuverenga-yekunyora yemudziyo? Nekuti muDockerfile yemufananidzo weMongoDB, iyo /data/db dhairekitori (uko MongoDB inochengeta data rayo nekukasira) inotsanangurwa sevhoriyamu.

Docker Mazano: Bvisa muchina wako wejunk

Padivi chinyorwa: mifananidzo yakawanda inofanirwa kuburitsa data inoshandisa mavhoriyamu kuchengetedza iyo data.

Kana isu tikatamba zvakakwana neMongoDB tomira (kana pamwe kudzima) mudziyo, vhoriyamu haizodzimwa. Icharamba ichitora yedu yakakosha dhisiki nzvimbo kudzamara taidzima pachena nemurairo wakadai:

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

Zvakanaka, kana isu tinogona kushandisa iyo prune subcommand yatove kujaira kwatiri:

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

Kushandisa dhisiki yemufananidzo kuvaka cache

MuDocker 18.09, maitiro ekugadzira mufananidzo aita dzimwe shanduko nekuda kweBuildKit chishandiso. Ichi chinhu chinowedzera kukurumidza kwemaitiro uye inogonesa kuchengetedza data uye kuchengetedza manejimendi. Pano isu hatizotarise zvese zvese zvechishandiso chinoshamisa ichi; isu tichangotarisa kuti inogadzirisa sei nyaya dzekushandisa disk nzvimbo.

Ngatiti isu tine yakapusa Node.Js application:

  • iyo index.js faira inotanga iri nyore HTTP server inopindura nemutsara kune yega yega chikumbiro chinogamuchirwa:
  • iyo package.json faira inotsanangura zvinotsamira, izvo chete expressjs inoshandiswa kumhanyisa sevha yeHTTP:

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

Iyo Dockerfile yekuvaka mufananidzo inoita seizvi:

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

Ngativake mufananidzo nenzira yakajairika, tisingashandisi BuildKit:

$ docker build -t app:1.0 .

Kana tikatarisa kushandiswa kwedhisiki nzvimbo, tinogona kuona kuti chete mufananidzo wepasi (node: 13-alpine) uye mufananidzo wekuenda (app: 1.0) uri kutora nzvimbo:

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

Ngativake vhezheni yechipiri yechishandiso chedu, tichishandisa BuildKit. Kuti tiite izvi, isu tinongoda kuseta iyo DOCKER_BUILDKIT kusiyanisa kune 1:

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

Kana isu zvino tichitarisa kushandiswa kwe diski, tichaona kuti cache yekuvaka (buid-cache) ikozvino yabatanidzwa ipapo:

$ 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

Kuti uibvise, shandisa murairo unotevera:

$ 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

Bvisa zvese!

Saka, takatarisa pakuchenesa dhisiki nzvimbo inogarwa nemidziyo, mifananidzo uye mavhoriyamu. Iyo prune subcommand inotibatsira neizvi. Asi inogona zvakare kushandiswa pane docker system level, uye ichachenesa zvese zvainogona:

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

Kana nekuda kwechimwe chikonzero uri kuchengetedza dhisiki nzvimbo pamushini unomhanya Docker, saka nguva nenguva uchimhanyisa uyu murairo unofanirwa kuve tsika.

Source: www.habr.com

Voeg