Docker Tips: Clear your machine of junk

Docker Tips: Clear your machine of junk

Salve, Habr! Tibi operam tuam praebeo translationem articuli "Docker Tips: Clean Up Your Local Machine" author Luc Juggery.

Hodie loquemur quomodo Docker utatur disco spatio machinae hosticae, et etiam exprimemus quomodo hoc spatium a fragmentis imaginum et vasorum insuetarum liberet.


Docker Tips: Clear your machine of junk

Totalis consummatio

Docker frigidum est, probabiliter pauci hodie dubitant. Paucis abhinc annis, hoc opus dedit nobis viam penitus novam aedificandi, liberandi ac currendi omnem ambitum, nobis permittentes signanter salvare facultates CPU et RAM. Praeter haec (et aliquot hoc erit potissimum) Docker nobis incredibilem simpliciorem reddere et augere vitae nostrae ambitus productionis administrationem permisit.

Sed haec omnia gratuita veniunt vitae hodiernae delitiae. Cum vasa currimus, imagines nostras vel download vel creamus et oecosystemata complexa explicamus, reddere debemus. Et nos, inter alia, cum orbis tractus solvimus.

Si numquam cogitasti quantum spatii Docker machinam tuam in actu aggreditur, incommode mirari potes per praecepti huius commentationem:

$ docker system df

Docker Tips: Clear your machine of junk

Inde usus disci Docker in variis adiunctis ostendit:

  • imagines - magnitudo imaginum quae ex repositoriis imaginum receptae sunt et in systemate tuo constructae;
  • continentia - summa totius orbis tractus adhibitis vasis currendo (significatio totalis voluminis lecti-scribe stratorum omnium vasorum);
  • volumina localia β€” volumen repono locorum continentium insidet;
  • constructum cache - lima temporaria ab imaginis processu aedificationis generata (cum instrumento BuildKit utens, praesto cum Docker versione 18.09).

Opto ut post hanc simplicem translationem studeas purgamenta purgamentorum tuorum mundare et gigabytas pretiosas ad vitam reducere (nota: praesertim si pro his gigabytis singulis mensibus reddas).

Orbis usus per continentia

Quotienscumque vas in machinam exercitum creas, plura scrinia et directoria in directorio /var/lib/docker creantur, inter quas sequentia notatu digna sunt:

  • Indicis /var/lib/docker/continentes/continens_ID - cum exactoris logging vexillum utens, hoc eventum est ubi res acta in forma JSON salvantur. Nimia tigna accurata, ac tigna quae nemo legit vel aliter processus, saepe discos ad plenum efficiunt.
  • Directorium /var/lib/docker/ostratum2 continens continens lectu-scribas stratis continet (explicare 2 est praelatus exactor in distributionibus plurimis Linux). Si continens thesauros notitias in schedula sua, in hoc directorio ponetur.

Rationem cogitemus qua pristinus Docker inauguratus est, qui numquam in vasis aut imaginibus aedificandis implicatus est. Usus eius orbis tractus fama sic erit:

$ 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

Continens aliquod demus, exempli gratia, NGINX:

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

Quod accidit in disco;

  • imagines occupant 126 MB, hoc idem est NGINX quod in continente deducimus;
  • continentia ridicula sumenda 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

Ex conclusione iudicantes, nullum adhuc spatium habemus quod liberare possemus. Cum 2 bytes omnino frivola sit, cogitemus inopinanter NGINX nostrum C megabytes notitiarum alicubi scripsisse et tabellam test.img huius magnitudinis intra se prorsus creasse.

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

Examinemus orbis tractus usus in hospite iterum. Videbimus continens Megabytes 100 ibi obtinere.

$ 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

Puto iam cerebrum curiosum tuum admirari ubi fasciculus test.img noster sita est. Intueamur eum:

$ 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

Sine in details ire, notare possumus documentum test.img fasciculum commode in gradu lectu-scribe, a rectore laminis moderatum. Si continens nostrum cessamus, hospes indicabit nobis spatium hoc in principio liberari posse;

# 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

Quomodo hoc? Delendo continens, quod spatium correspondentes in gradu lectu scribentis involvit.

Praecepto sequenti, omnia vasa installed in uno impetu delapsa removere potes et disco tuo omnium limariorum lectu-scriptorum ab eis creatarum purgare:

$ 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

Ita nos liberavimus 104,9 continens delendo Megabyten. Sed quoniam iam imagine receptae antea non utimur, candidatus etiam fit nostras facultates delendae ac liberandae;

$ 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: Quamdiu imago saltem uno vase in usu est, hac stropha uti non poteris.

Puta sub praecepto supra adhibita tantum effectum habet in vasis obstructis. Si velimus delere non solum omissus sed etiam vascula currentia, unum ex his praeceptis utendum est:

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

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

Partis notas: si modulo -rm uteris cum a continente incipiens, tum cum sistit, omne spatium orbis, quod occupavit, liberabitur.

Imagines per orbem

Paucis abhinc annis, imago magnitudinis plurium centum megabytarum omnino normalis erat: imago Ubuntu DC megabytarum ponderavit et imago Microsoft .Net imago pluribus gigabytis appendebatur. In diebus illis hirsutis, una tantum imago deprimens magnum portorium in libero orbis spatio capere potuit, etiamsi gradus inter imagines communicare possetis. Hodie - laus magnorum - imagines multo minus ponderant, sed etiam sic, celeriter facultates suppeditantes implere potes, si aliquid cautum non es.

Imaginum plura genera sunt quae ad finem utentis directe non apparent;

  • imagines mediae, ex quibus aliae imagines colliguntur - deleri non possunt, si vasculis in his imaginibus "aliarum" uteris;
  • imagines pendentes sunt imagines mediae quae non referenced ab aliquo continentium currentium - deleri possunt.
  • Cum hoc imperio potes imagines in systemate tuo pendentias inspicias:

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

Eas hoc modo auferre potes.

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

Potest etiam uti submando putabis;

$ 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

Si repente omnes imagines uno imperio (non tantum pendentes) delere volumus, tunc id facere possumus;

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

Orbis usus in voluminibus

Volumina adhibentur ad congregem data extra systema fasciculi continentis. sicut si alio modo uti velimus salvare applicationem. Exemplum commune databases est.

MongoDB continens demus, extra volumen conscende ad continentem, et ab eo tergum database restitue (in promptu habemus in pagina 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

Notitia super machinam castrorum in indice /var/lib/docker/volumulis collocabitur. Sed quidni ad lecti-tationem gradationem continentis? Quia in Dockerfile de MongoDB imaginis, directorium /data/db (ubi MongoDB notitias suas per defaltam recondit) volumen definitur.

Docker Tips: Clear your machine of junk

Parte nota: multae imagines producere debent volumina quae data usui sunt ad reponendas notitias.

Cum MongoDB satis ludimus et desinamus (vel fortasse etiam delere) continens, volumen non delebitur. Perget spatium orbis pretiosum tollere donec id explicite delemus cum mandato huius modi:

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

Bene, vel submandato pute uti possumus, quod iam est familiare nobis;

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

Per orbem ad imaginem constructum cache

In Docker 18.09, imaginis processus creationis nonnullas mutationes per instrumentum aedificationis subiit. Haec res auget celeritatem processus et optimizes notitiae repositionis et securitatis procuratio. Hic singula instrumenta mirabilis huius instrumenti non considerabimus, tantum intendunt quomodo quaestiones orbis tractus uti alloquitur.

Dicamus nos habere applicationem omnino simplicem Node.Js:

  • index.js fasciculus incipit a servo simplici HTTP qui respondet cum linea cuilibet petitioni acceptae:
  • fasciculus sarcina.json clientelas definit, quarum tantum expressjs usus est ut servo HTTP curreret:

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

Dockerfile ad aedificandum imaginem similis est:

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

more solito imaginem aedificemus sine BuildKit utendo:

$ docker build -t app:1.0 .

Si usus orbis tractus coercemus, videre possumus imaginem solam basim (nodi: 13-alpinam) et imaginem destinatum (app: 1.0) spatium prehendere;

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

Secundam versionem applicationis nostrae aedificemus, utendo BuildKit. Ad hoc solum opus est ut DOCKER_BUILDKIT variabilis ad 1:

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

Si usus orbis nunc reprimimus, videbimus cella fabricandi (buid-cache) nunc ibi implicari;

$ 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

Ad cuius evidentiam, hoc utere mandato;

$ 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

Dele omnia!

Itaque inspeximus spatium orbis redigito occupatum vasis, imaginibus et voluminibus. Hoc subactum putamen nos adiuvat. Sed potest etiam in sphaeristerio systematis adhiberi, et omnia mundare quae potest;

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

Si ob aliquam causam orbis tractus machinae currens Docker servas, tunc temporis spatium currens hoc mandatum habitus fieri debet.

Source: www.habr.com