Ndụmọdụ Docker: Kpochapụ igwe junk gị

Ndụmọdụ Docker: Kpochapụ igwe junk gị

Hey Habr! M na-egosi gị ntụgharị asụsụ nke akụkọ ahụ "Ndụmọdụ Docker: Hichaa igwe mpaghara gị" onye ode akwukwo Luc Juggery.

Taa, anyị ga-ekwu maka otu Docker si eji oghere diski nke igwe nnabata, anyị ga-achọpụtakwa ka a ga-esi wepụ oghere a na mpempe ihe oyiyi na arịa ndị a na-ejighị.


Ndụmọdụ Docker: Kpochapụ igwe junk gị

Mkpokọta oriri

Docker bụ ihe dị mma, ikekwe mmadụ ole na ole na-enwe obi abụọ taa. Naanị afọ ole na ole gara aga, ngwaahịa a nyere anyị ụzọ ọhụrụ iji wuo, nyefee na ịgba ọsọ gburugburu ebe obibi ọ bụla, na-enye anyị ohere ịchekwa CPU na RAM nke ọma. Na mgbakwunye na nke a (ma maka ụfọdụ nke a ga-abụ ihe kachasị mkpa), Docker ekwela ka anyị mee ka ọ dị mfe ma jikọta njikwa ndụ ndụ nke gburugburu mmepụta anyị na-eji.

Otú ọ dị, ihe ụtọ ndị a nile nke ndụ ọgbara ọhụrụ na-abịa n'ọnụ ahịa. Mgbe anyị na-agba ọsọ arịa, budata ma ọ bụ mepụta onyonyo nke anyị, wee tinye ihe dị mgbagwoju anya, anyị ga-akwụ ụgwọ. Na anyị na-akwụ ụgwọ, n'etiti ihe ndị ọzọ, na ohere diski.

Ọ bụrụ na ọ dịtụghị mgbe ị chere maka ohere Docker na-ewe n'ezie na igwe gị, nsonaazụ nke iwu a nwere ike iju gị anya:

$ docker system df

Ndụmọdụ Docker: Kpochapụ igwe junk gị

Nke a na-egosi ojiji diski Docker n'ọnọdụ dị iche iche:

  • onyogho – mkpokọta nha onyonyo ebudatara site na ebe nchekwa onyonyo ma wuo na sistemụ gị;
  • arịa - ngụkọta ohere diski eji arịa na-agba ọsọ (nke pụtara mkpokọta ọnụ ọgụgụ nke agụ akwụkwọ nke arịa niile);
  • mpịakọta mpaghara - olu nke ebe nchekwa ebe a na-etinye na arịa;
  • wuo cache – faịlụ nwa oge sitere na usoro iwulite onyonyo (iji ngwa BuildKit, dị malite na ụdị Docker 18.09).

M nzọ na mgbe a dị mfe nyefe na ị na-achọsi ike ihicha gị disk nke ihe mkpofu na-eme ka dị oké ọnụ ahịa gigabytes azụ ndụ (mara: karịsịa ma ọ bụrụ na ị na-akwụ ụgwọ ụlọ maka gigabytes ndị a kwa ọnwa).

Ojiji diski site na arịa

Oge ọ bụla ị mepụtara akpa na igwe nnabata, a na-emepụta ọtụtụ faịlụ na akwụkwọ ndekọ aha na / var/lib/docker, n'ime nke a kwesịrị iburu n'uche:

  • Akwụkwọ ndekọ /var/lib/docker/containers/container_ID – mgbe ị na-eji ọkọlọtọ ndekọ ndekọ, nke a bụ ebe a na-echekwa ndekọ ihe omume na usoro JSON. Ndekọ ndekọ zuru oke, yana ndekọ na-enweghị onye na-agụ ma ọ bụ na-eme ihe ọzọ, na-emekarị ka diski zuru ezu.
  • Akwụkwọ ndekọ / var/lib/docker/overlay2 nwere akpa agụ-ede n'ígwé (overlay2 bụ ọkacha mmasị ọkwọ ụgbọ ala n'ọtụtụ nkesa Linux). Ọ bụrụ na akpa ahụ na-echekwa data na sistemụ faịlụ ya, ọ bụ na ndekọ a ka a ga-etinye ya.

Ka anyị were echiche usoro etinyere Docker pristine, nke etinyebeghị aka n'iwepụta arịa ma ọ bụ ihe onyonyo. Akụkọ ojiji oghere diski ya ga-adị ka nke a:

$ 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

Ka anyị malite ụfọdụ akpa, dịka ọmụmaatụ, NGINX:

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

Kedu ihe na-eme diski:

  • ihe oyiyi na-eburu 126 MB, nke a bụ otu NGINX nke anyị malitere n'ime akpa;
  • arịa na-eburu 2 bytes na-akpa ọchị.

$ 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

N'ikpe ikpe site na nkwubi okwu, anyị enwebeghị ohere ọ bụla anyị nwere ike ịtọhapụ. Ebe ọ bụ na 2 bytes bụ ihe na-adịghị mma, ka anyị were ya na NGINX anyị na-atụghị anya ya dere ebe 100 Megabytes nke data ma mepụta faịlụ test.img nke kpọmkwem nha a n'ime onwe ya.

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

Ka anyị lelee ojiji oghere diski na onye ọbịa ọzọ. Anyị ga-ahụ na akpa (containers) nwere 100 Megabytes n'ebe ahụ.

$ 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

Echere m na ụbụrụ gị na-ajụ ajụjụ na-eche ebe faịlụ test.img anyị dị. Ka anyị chọọ ya:

$ 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

Na-abanyeghị n'ime nkọwa, anyị nwere ike ịhụ na test.img faịlụ na-adaba adaba na-agụ-dee larịị, na-achịkwa overlay2 ọkwọ ụgbọala. Ọ bụrụ na anyị akwụsị akpa anyị, onye ọbịa ga-agwa anyị na ohere a nwere ike, n'ụkpụrụ, enwere onwe ya:

# 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

Olee otú anyị ga-esi mee nke a? Site na ihichapụ akpa ahụ, nke ga-agụnye ikpochapụ oghere kwekọrọ na ọkwa-agụ.

Site n'iwu a, ị nwere ike wepu akpa niile arụnyere n'otu oge wee kpochapụ diski gị faịlụ niile na-agụ agụ nke ha mepụtara:

$ 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

Yabụ, anyị tọhapụrụ 104,9 Megabytes site na ihichapụ akpa ahụ. Mana ebe anyị anaghịzi eji onyonyo ebudatara na mbụ, ọ na-aghọkwa onye ndoro-ndoro maka ihichapụ na ịtọhapụ akụrụngwa anyị:

$ 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

Mara: Ọ bụrụhaala na ejiri opekata mpe otu akpa ejiri onyonyo a, ị gaghị enwe ike iji aghụghọ a.

Iwu nke prune anyị ji n'elu nwere naanị mmetụta na akpa ndị kwụsịrị. Ọ bụrụ na anyị chọrọ ihichapụ ọ bụghị naanị akwụsịre kamakwa ọ na-agba ọsọ, anyị kwesịrị iji otu n'ime iwu ndị a:

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

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

Ihe ndetu akụkụ: ọ bụrụ na ị na-eji paramita -rm mgbe ị na-amalite akpa, mgbe ahụ mgbe ọ kwụsịrị, ohere diski niile ọ nwere ga-atọhapụ.

Iji onyonyo diski

Afọ ole na ole gara aga, nha onyonyo nke ọtụtụ narị megabytes dị nnọọ mma: ihe onyonyo Ubuntu tụrụ megabytes 600, ihe onyonyo Microsoft .Net tụrụ ọtụtụ gigabytes. N'ụbọchị ndị ahụ jọgburu onwe ya, nbudata naanị otu onyonyo nwere ike ibute nnukwu ohere na diski efu gị, ọbụlagodi na ị na-ekerịta ọkwa n'etiti onyonyo. Taa - otuto dịịrị ndị ukwu - ihe oyiyi dị ntakịrị, ma n'agbanyeghị nke ahụ, ị ​​nwere ike mejupụta ngwa ngwa dịnụ ma ọ bụrụ na ị kpacharaghị anya.

Enwere ụdị onyonyo dị iche iche nke onye ọrụ njedebe anaghị ahụ anya ozugbo:

  • onyonyo etiti, na ndabere nke anakọtara onyonyo ndị ọzọ - enweghị ike ihichapụ ha ma ọ bụrụ na ị na-eji arịa dabere na onyonyo “ndị ọzọ” ndị a;
  • onyonyo na-agbagọ bụ onyonyo etiti nke arịa ọ bụla na-agba ọsọ na-edoghị ya anya - enwere ike ihichapụ ha.
  • Site n'iwu na-esonụ ị nwere ike ịlele maka onyonyo na-ada ada na sistemụ gị:

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

Ị nwere ike wepụ ha n'ụzọ ndị a:

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

Anyị nwekwara ike iji subcommand prune:

$ 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

Ọ bụrụ na anyị chọrọ na mberede ihichapụ ihe oyiyi niile kpamkpam (ma ọ bụghị naanị na-akụda) na otu iwu, mgbe ahụ anyị nwere ike ime nke a:

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

Ojiji diski site na mpịakọta

A na-eji mpịakọta echekwa data na mpụga sistemụ faịlụ akpa. Dịka ọmụmaatụ, ọ bụrụ na anyị chọrọ ịchekwa nsonaazụ ngwa ka anyị jiri ha mee ihe n'ụzọ ọzọ. Otu ihe atụ a na-ahụkarị bụ ọdụ data.

Ka anyị wepụta akpa MongoDB, bulie olu mpụga na akpa ahụ, wee weghachi ndabere nchekwa data sitere na ya (anyị nwere ya na faịlụ 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

Data ga-adị na igwe nnabata na / var/lib/docker/ mpịakọta ndekọ. Mana gịnị kpatara na ọ bụghị n'ọkwa ọgụgụ-agụ nke akpa ahụ? N'ihi na na Dockerfile nke onyonyo MongoDB, ndekọ / data/db (ebe MongoDB na-echekwa data ya na ndabara) ka akọwara dị ka olu.

Ndụmọdụ Docker: Kpochapụ igwe junk gị

Ihe ndetu akụkụ: ọtụtụ onyonyo ga-emepụta data na-eji mpịakọta echekwa data ahụ.

Mgbe anyị jiri MongoDB gwuo nke ọma wee kwụsị (ma ọ bụ ikekwe ihichapụ) akpa ahụ, agaghị ehichapụ olu ahụ. Ọ ga-aga n'ihu na-eburu oghere diski anyị dị oke ọnụ ahịa ruo mgbe anyị ji iwu dị ka nke a ihichapụ ya nke ọma:

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

Ọfọn, ma ọ bụ anyị nwere ike iji subcommand prune nke anyị maara nke ọma:

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

Iji diski maka ịmepụta cache onyonyo

Na Docker 18.09, usoro okike ihe onyonyo emeela mgbanwe ụfọdụ site na ngwa BuildKit. Ihe a na-abawanye ọsọ nke usoro ahụ ma na-ebuli nchekwa data na njikwa nchekwa. N'ebe a, anyị agaghị atụle nkọwa niile nke ngwá ọrụ a magburu onwe ya; anyị ga-elekwasị anya naanị n'otú o si akọwa okwu nke iji ohere diski.

Ka anyị kwuo na anyị nwere ngwa Node.Js dị mfe:

  • faịlụ index.js na-amalite sava HTTP dị mfe nke na-eji ahịrị na-aza arịrịọ ọ bụla natara:
  • faịlụ ngwugwu.json na-akọwa ihe ndabere, nke naanị expressjs na-eji mee ihe nkesa HTTP:

$ 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 maka iwulite onyonyo a dị ka nke a:

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

Ka anyị wuo onyonyo a n'ụzọ a na-emebu, na-ejighi BuildKit:

$ docker build -t app:1.0 .

Ọ bụrụ na anyị lelee ojiji oghere diski, anyị nwere ike ịhụ na ọ bụ naanị onyonyo ntọala (ọnụ: 13-alpine) na ebe ebe onyonyo (ngwa: 1.0) na-eweghara oghere:

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

Ka anyị wulite ụdị nke abụọ nke ngwa anyị, na-eji BuildKit. Iji mee nke a, naanị anyị kwesịrị ịtọ mgbanwe DOCKER_BUILDKIT ka ọ bụrụ 1:

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

Ọ bụrụ na anyị lelee ojiji diski ugbu a, anyị ga-ahụ na ihe nrụpụta ụlọ (buid-cache) etinyela aka ebe ahụ:

$ 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

Iji kpochapụ ya, jiri iwu a:

$ 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

Kpochapụ ihe niile!

Yabụ, anyị lere anya na-ehichapụ oghere diski nke arịa, onyonyo na mpịakọta ji. Iwu nke prune na-enyere anyị aka na nke a. Mana enwere ike iji ya na ọkwa docker, ọ ga-ehichapụ ihe niile ọ nwere ike:

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

Ọ bụrụ n'ihi ihe ụfọdụ ị na-echekwa ohere diski na igwe na-agba Docker, mgbe ahụ ịme iwu a kwa oge kwesịrị ịbụ àgwà.

isi: www.habr.com

Tinye a comment