Talooyin Docker: Ka nadiifi mashiinkaaga qashinka

Talooyin Docker: Ka nadiifi mashiinkaaga qashinka

Hello, Habr! Waxaan dareenkaaga ku soo bandhigayaa tarjumaad maqaalka "Talooyinka Docker: Nadiifi mashiinka degaankaaga" qoraa Luc Juggery.

Maanta waxaan ka hadli doonaa sida Docker u isticmaalo booska diskka ee mashiinka martida loo yahay, waxaan sidoo kale ogaan doonaa sida meeshan looga xoreeyo qashinka sawirada iyo weelasha aan la isticmaalin.


Talooyin Docker: Ka nadiifi mashiinkaaga qashinka

Wadarta isticmaalka

Docker waa wax fiican, malaha dad yar ayaa maanta shakiya. Dhowr sano ka hor, badeecadani waxay na siisay hab cusub oo aan ku dhisno, gaarsiinno oo aan ku maamulno deegaan kasta, taasoo noo ogolaaneysa inaan si weyn u badbaadino ilaha CPU iyo RAM. Tan waxaa dheer (iyo qaar tani waxay noqon doontaa waxa ugu muhiimsan) Docker wuxuu noo oggolaaday inaan si cajiib ah u fududeyno oo aan u mideyno maaraynta meertada nolosha ee deegaankeena wax soo saarka.

Si kastaba ha ahaatee, dhammaan waxyaalahan farxadda nolosha casriga ah waxay ku yimaadaan qiimo. Marka aan wadno weelasha, soo dejisanno ama samayno sawiro noo gaar ah, oo aan geyno nidaamyo deegaan oo adag, waa in aan lacag bixinaa. Oo waxaan ku bixinnaa, iyo waxyaabo kale, oo leh booska diskka.

Haddii aadan waligaa ka fikirin inta boos ee Docker ay dhab ahaantii ku qaadato mashiinkaaga, waxaa laga yaabaa inaad si xun ula yaabto soo-saarka amarkan:

$ docker system df

Talooyin Docker: Ka nadiifi mashiinkaaga qashinka

Tani waxay ku tusinaysaa isticmaalka saxanka Docker ee xaalado kala duwan:

  • sawirada - wadarta guud ee sawirada laga soo dejiyey goobaha sawirada oo lagu dhisay nidaamkaaga;
  • weelasha - wadarta cadadka booska diskka ee loo isticmaalo weelasha socda (macneheedu waa wadarta guud ee lakabyada wax akhrinta ee dhammaan weelasha);
  • mugga deegaanka - mugga kaydinta maxalliga ah ee lagu dhejiyay weelasha;
  • dhis khasnado - faylasha ku meel gaadhka ah ee ay soo saareen habka dhismaha sawirka (adoo la isticmaalayo BuildKit Tool, oo la heli karo laga bilaabo nooca Docker 18.09).

Waxaan sharxayaa in wareejintan fudud ka dib aad u heelan tahay inaad nadiifiso diskkaaga qashinka oo aad dib u soo noolaato gigabytes qaali ah nolosha (xusuusin: gaar ahaan haddii aad bixiso kirada gigabytes-kan bil kasta).

Isticmaalka saxanka weelasha

Mar kasta oo aad ku abuurto weel mashiinka martida loo yahay, dhowr faylal iyo hagayaal ayaa lagu abuuray buugga /var/lib/docker, kuwaas oo kuwan soo socda ay mudan yihiin in la xuso:

  • Hagaha /var/lib/docker/container/container_ID - marka la isticmaalayo darawalka jarista caadiga ah, tani waa halka diiwaanka dhacdada lagu kaydiyo qaabka JSON. Qoraallada aad u faahfaahsan, iyo sidoo kale diiwaannada aan qofna akhriyin ama si kale u hawlgelin, ayaa inta badan sababa in saxanadu ay buuxsamaan.
  • Tusaha /var/lib/docker/overlay2 waxa uu ka kooban yahay weel wax-akhris-qoraal ah (overlay2 waa darawalka doorbiday inta badan qaybinta Linux). Haddii weelku ku kaydiyo xogta nidaamka faylka, markaa waxay ku jirtaa buuggan in la gelin doono.

Aynu qiyaasno nidaam lagu rakibay Docker-ka saafiga ah, kaas oo aan waligiis ku lug lahayn soo saarista weelasha ama sawirada dhismaha. Warbixinta isticmaalka booska diskooga waxay u ekaan doontaa sidan:

$ 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

Aan soo saarno weel, tusaale ahaan, NGINX:

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

Maxaa ku dhacaya saxanka:

  • sawiradu waxay hayaan 126 MB, tani waa isla NGINX aan ku bilownay weelka;
  • weelasha waxay qaataan 2 bytes oo qosol leh.

$ 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

Marka la eego gabagabada, weli ma hayno meel bannaan oo aan ku xorayn karno. Maaddaama 2 bytes uu yahay mid aan caqli-gal ahayn, aan qiyaasno in NGINX-gayagu uu si lama filaan ah u qoray meel 100 Megabytes ah oo xog ah oo abuuray test file test.img oo ah cabbirkan gudaha laftiisa.

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

Aan dib u baarno isticmaalka booska diskka ee martida loo yahay. Waxaan arki doonaa in weelka (koonteenarada) uu ku jiro 100 megabytes.

$ 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

Waxaan u maleynayaa in maskaxdaada wax weyddiinta ay durba la yaaban tahay halka uu ku yaal faylkayaga test.img. Aan raadino:

$ 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

Anagoon tafaasiil ka bixin, waxaan ogaan karnaa in faylka test.img uu ku habboon yahay inuu ku yaal heerka akhris-qorista, oo uu xakameeyo darawalka dul-dhaafka ah2. Haddii aan joojino weelkayaga, martigeliyaha ayaa noo sheegi doona in meeshan, mabda' ahaan, la xorayn karo:

# 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

Sideen u samayn karnaa tan? Adiga oo tirtiraya weelka, kaas oo keenaya in la nadiifiyo booska u dhigma ee heerka wax-akhriska.

Amarka soo socda, waxaad ka saari kartaa dhammaan weelasha lagu rakibay hal mar oo aad ka nadiifin kartaa diskkaaga dhammaan faylasha wax-akhriska ee ay abuureen:

$ 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

Markaa, waxaanu xoraynay 104,9 megabytes anagoo tirtirnay weelka. Laakin maadaama aynaan sii isticmaalin sawirkii hore loo soo dejiyay, waxay sidoo kale noqonaysaa musharrax tirtirista iyo xoraynta khayraadkeena:

$ 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

Fiiro gaar ah: Ilaa inta sawirka la isticmaalayo ugu yaraan hal weel, ma awoodid inaad isticmaasho khiyaamadan.

Amar-hoosaadka prune ee aan kor ku isticmaalnay ayaa kaliya saameyn ku leh weelasha la joojiyay. Haddii aan rabno in aan tirtirno oo keliya ma joojin laakiin sidoo kale weelasha socda, waa in aan isticmaalno mid ka mid ah amarradan:

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

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

Qoraalada dhinaca: haddii aad isticmaasho -rm parameter marka aad bilaabayso weelka, ka dib marka uu istaago, dhammaan booska diskka ee uu ku jiray waa la xorayn doonaa.

Isticmaalka sawirada diskooga

Dhowr sano ka hor, cabbirka sawirka dhowr boqol oo megabytes ayaa gabi ahaanba ahaa mid caadi ah: sawirka Ubuntu wuxuu culeyskiisu ahaa 600 megabytes, sawirka Microsoft .Net wuxuu culeyskiisu ahaa dhowr gigabytes. Maalmahaas rafaadka badan, soo dejinta hal sawir ayaa wax weyn u dhimi karta booskaaga diskka ee bilaashka ah, xitaa haddii aad la wadaagto heerarka sawirada dhexdooda. Maanta - ammaanta weyn - sawirada ayaa miisaankoodu aad u yar yahay, laakiin sidaas oo kale, waxaad si degdeg ah u buuxin kartaa ilaha la heli karo haddii aadan qaadan taxaddar.

Waxaa jira dhowr nooc oo sawiro ah oo aan si toos ah u arkin isticmaalaha ugu dambeeya:

  • sawirada dhexdhexaadka ah, oo ku salaysan sawirada kale ee la ururiyo - lama tirtiri karo haddii aad isticmaasho weel ku salaysan sawiradan "kale";
  • sawirada laalaado waa sawiro dhex dhexaad ah oo aan la tixraacin mid ka mid ah weelasha socda - waa la tirtiri karaa.
  • Amarka soo socda waxaad ku hubin kartaa sawirada habacsanaanta nidaamkaaga:

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

Waxaad uga saari kartaa sida soo socota:

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

Waxaan sidoo kale isticmaali karnaa amar-hoosaadka 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

Haddii aan si lama filaan ah u rabno inaan tirtirno dhammaan sawirada gebi ahaanba (oo aan kaliya ku dhicin) hal amar, markaa waxaan sameyn karnaa tan:

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

Isticmaalka diskka ee mugga

Cajalada waxaa loo isticmaalaa in lagu kaydiyo xogta ka baxsan nidaamka faylka weelka. Tusaale ahaan, haddii aan rabno inaan keydinno natiijooyinka codsiga si aan u isticmaalno si kale. Tusaalaha caadiga ah waa database-yada.

Aynu soo saarno weelka MongoDB, aynu ku dhejino mugga dibadda weelka, oo aynu dib u soo celinno kaydka xogta (waxa aanu ku haynaa faylka 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

Xogtu waxay ku jiri doontaa mishiinka martida loo yahay ee ku jira /var/lib/docker/volume directory. Laakiin maxaa diidaya in heerka wax-akhriska ee weelka? Sababtoo ah Dockerfile ee sawirka MongoDB, /data/db directory (halka MongoDB ay ku kaydiso xogteeda si caadi ah) waxaa lagu qeexay mug ahaan.

Talooyin Docker: Ka nadiifi mashiinkaaga qashinka

Xusuusin dhinaca: sawirro badan oo ay tahay in ay soo saaraan xogta ayaa isticmaala mugga si ay u kaydiyaan xogtaas.

Marka aan ku filan la ciyaarno MongoDB oo aan joojino (ama laga yaabee xitaa tirtirto) weelka, mugga lama tirtiri doono. Waxay sii wadi doontaa inay qaadato booska diskooga ee qaaliga ah ilaa aan si cad u tirtirno amar sidan oo kale ah:

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

Hagaag, ama waxaan isticmaali karnaa amar-hoosaadka-hoosaadka ee horeba aan naqaannay:

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

Isticmaalka diskka si loo dhiso sawirka cache

Docker 18.09, geeddi-socod abuurka sawirku waxa uu soo maray isbeddello iyada oo ay ugu wacan tahay aaladda BuildKit. Shaygani wuxuu kordhiyaa xawaaraha geedi socodka wuxuuna wanaajiyaa kaydinta xogta iyo maareynta amniga. Halkan kama tixgelin doono dhammaan faahfaahinta qalabkan cajiibka ah; waxaan diiradda saari doonaa oo kaliya sida ay wax uga qabato arrimaha isticmaalka booska diskka.

Aynu nidhaahno waxaanu haynaa codsi Node.Js oo fudud:

  • Faylka index.js wuxuu bilaabaa server HTTP fudud oo kaga jawaabaya xariiq codsi kasta oo la helo:
  • faylka pack.json wuxuu qeexayaa ku-tiirsanaanta, kuwaas oo expressjs kaliya loo isticmaalo si loo socodsiiyo serverka 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-ka lagu dhisayo sawirka wuxuu u eg yahay sidan:

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

Aan u dhisno sawirka sida caadiga ah, anagoo adeegsan BuildKit:

$ docker build -t app:1.0 .

Haddii aan hubinno isticmaalka booska diskka, waxaan arki karnaa in kaliya sawirka saldhigga (node: 13-alpine) iyo sawirka bartilmaameedka (app: 1.0) ay qaadanayaan boos:

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

Aynu dhisno nooca labaad ee codsigeena, anagoo adeegsanayna BuildKit. Si tan loo sameeyo, waxaan kaliya u baahanahay inaan dejino doorsoomaha DOCKER_BUILDKIT 1:

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

Haddii aan hadda hubinno isticmaalka diskka, waxaan arki doonaa in dhismaha cache (buid-cache) uu hadda ku lug leeyahay halkaas:

$ 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

Si aad u nadiifiso, adeegso amarka soo socda:

$ 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

Nadiifi dhammaan!

Markaa, waxaanu eegnay nadiifinta booska saxanka ee ay ku jiraan weelasha, sawirada iyo mugga. Talis-hoosaadka prune ayaa naga caawiya tan. Laakiin sidoo kale waxaa loo isticmaali karaa heerka nidaamka docker, waxayna nadiifin doontaa wax kasta oo ay awooddo:

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

Haddii sabab qaar ka mid ah aad ku badbaadinayso booska diskka mashiinka ku shaqeeya Docker, ka dib socodsiinta amarkan waa inay noqotaa caado.

Source: www.habr.com

Add a comment