Awọn imọran Docker: Ko ẹrọ rẹ kuro ninu ijekuje

Awọn imọran Docker: Ko ẹrọ rẹ kuro ninu ijekuje

Kaabo, Habr! Mo ṣafihan itumọ nkan naa si akiyesi rẹ "Awọn imọran Docker: Sọ Ẹrọ Agbegbe Rẹ di mimọ" onkowe Luc Juggery.

Loni a yoo sọrọ nipa bii Docker ṣe nlo aaye disk ti ẹrọ agbalejo, ati pe a yoo tun ṣawari bi o ṣe le gba aaye yii laaye lati awọn aloku ti awọn aworan ati awọn apoti ti ko lo.


Awọn imọran Docker: Ko ẹrọ rẹ kuro ninu ijekuje

Lapapọ agbara

Docker jẹ ohun tutu, boya diẹ eniyan ṣiyemeji loni. Ni ọdun diẹ sẹhin, ọja yii fun wa ni ọna tuntun patapata lati kọ, firanṣẹ ati ṣiṣe eyikeyi agbegbe, gbigba wa laaye lati ṣafipamọ Sipiyu ati awọn orisun Ramu ni pataki. Ni afikun si eyi (ati fun diẹ ninu eyi yoo jẹ ohun pataki julọ) Docker ti gba wa laaye lati rọrun iyalẹnu ati iṣọkan iṣakoso igbesi aye ti awọn agbegbe iṣelọpọ wa.

Sibẹsibẹ, gbogbo awọn igbadun ti igbesi aye ode oni wa ni idiyele kan. Nigba ti a ba nṣiṣẹ awọn apoti, ṣe igbasilẹ tabi ṣẹda awọn aworan tiwa, ti a si fi awọn ilolupo ilolupo, a ni lati sanwo. Ati pe a sanwo, laarin awọn ohun miiran, pẹlu aaye disk.

Ti o ko ba ronu rara nipa iye aaye Docker gangan gba lori ẹrọ rẹ, o le jẹ iyalẹnu lainidi nipasẹ iṣelọpọ aṣẹ yii:

$ docker system df

Awọn imọran Docker: Ko ẹrọ rẹ kuro ninu ijekuje

Eyi fihan lilo disk Docker ni awọn ipo oriṣiriṣi:

  • awọn aworan – awọn lapapọ iwọn ti awọn aworan ti o ti wa ni gbaa lati ayelujara lati awọn ibi ipamọ aworan ati itumọ ti lori rẹ eto;
  • awọn apoti - iye apapọ aaye disk ti a lo nipasẹ awọn apoti ti nṣiṣẹ (itumọ iwọn didun ti awọn ipele kika-kika ti gbogbo awọn apoti);
  • awọn ipele agbegbe - iwọn didun ti ibi ipamọ agbegbe ti a gbe si awọn apoti;
  • kọ kaṣe – awọn faili igba diẹ ti ipilẹṣẹ nipasẹ ilana ile aworan (lilo irinṣẹ BuildKit, ti o wa ti o bẹrẹ pẹlu ẹya Docker 18.09).

Mo tẹtẹ pe lẹhin gbigbe ti o rọrun yii o ni itara lati nu disk rẹ ti idoti ati mu gigabytes iyebiye pada si igbesi aye (akọsilẹ: paapaa ti o ba san iyalo fun gigabytes wọnyi ni gbogbo oṣu).

Lilo Disk nipasẹ awọn apoti

Ni gbogbo igba ti o ṣẹda eiyan kan lori ẹrọ agbalejo, ọpọlọpọ awọn faili ati awọn ilana ni a ṣẹda ninu itọsọna / var/lib/docker, laarin eyiti atẹle naa tọsi akiyesi:

  • Itọsọna /var/lib/docker/containers/container_ID – nigba lilo awakọ gedu boṣewa, eyi ni ibi ti awọn akọọlẹ iṣẹlẹ ti wa ni fipamọ ni ọna kika JSON. Awọn igbasilẹ alaye pupọ, ati awọn akọọlẹ ti ko si ẹnikan ti o ka tabi bibẹẹkọ awọn ilana, nigbagbogbo fa awọn disiki lati kun.
  • Iwe ilana / var/lib/docker/overlay2 ni awọn ipele kika kika-eiyan (overlay2 jẹ awakọ ti o fẹ julọ ni awọn pinpin Lainos). Ti eiyan naa ba tọju data sinu eto faili rẹ, lẹhinna o wa ninu itọsọna yii pe yoo gbe.

Jẹ ki a foju inu wo eto kan lori eyiti a ti fi Docker pristine kan sori ẹrọ, eyiti ko ṣe alabapin ninu awọn ifilọlẹ awọn apoti tabi awọn aworan kikọ. Iroyin lilo aaye disk rẹ yoo dabi eyi:

$ 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

Jẹ ki a ṣe ifilọlẹ diẹ ninu apoti, fun apẹẹrẹ, NGINX:

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

Kini o ṣẹlẹ si disk naa:

  • awọn aworan gba 126 MB, eyi ni NGINX kanna ti a ṣe ifilọlẹ ninu apo eiyan;
  • awọn apoti gba soke a yeye 2 baiti.

$ 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

Ni idajọ nipasẹ ipari, a ko sibẹsibẹ ni aaye eyikeyi ti a le gba laaye. Niwọn bi awọn baiti 2 jẹ alailẹtọ patapata, jẹ ki a fojuinu pe NGINX wa lairotẹlẹ kowe ni ibikan 100 Megabytes ti data ati ṣẹda idanwo faili kan.img ti iwọn gangan yii ninu ararẹ.

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

Jẹ ki a ṣayẹwo lilo aaye disk lori agbalejo lẹẹkansi. A yoo rii pe eiyan (awọn apoti) gba 100 Megabytes nibẹ.

$ 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

Mo ro pe ọpọlọ iwadii rẹ ti n iyalẹnu tẹlẹ ibiti faili test.img wa. Jẹ ki a wa fun:

$ 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

Laisi lilọ sinu awọn alaye, a le ṣe akiyesi pe faili test.img wa ni irọrun ti o wa ni ipele kika-kikọ, ti iṣakoso nipasẹ awakọ overlay2. Ti a ba da eiyan wa duro, agbalejo yoo sọ fun wa pe aaye yii le, ni ipilẹ, ni ominira:

# 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

Báwo la ṣe lè ṣe èyí? Nipa piparẹ eiyan naa, eyiti yoo fa imukuro aaye ti o baamu ni ipele kika-kikọ.

Pẹlu aṣẹ atẹle, o le yọ gbogbo awọn apoti ti a fi sori ẹrọ kuro ni isubu kan ki o ko disiki rẹ kuro ninu gbogbo awọn faili kika-kikọ ti o ṣẹda nipasẹ wọn:

$ 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

Nitorinaa, a ni ominira 104,9 Megabytes nipa piparẹ eiyan naa. Ṣugbọn niwọn igba ti a ko lo aworan ti a ṣe igbasilẹ tẹlẹ mọ, o tun di oludije fun piparẹ ati idasilẹ awọn orisun wa:

$ 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

Akiyesi: Niwọn igba ti aworan naa ba wa ni lilo nipasẹ o kere ju eiyan kan, iwọ kii yoo ni anfani lati lo ẹtan yii.

Ilana abẹlẹ prune ti a lo loke nikan ni ipa lori awọn apoti ti o da duro. Ti a ba fẹ paarẹ kii ṣe iduro nikan ṣugbọn tun ṣiṣiṣẹ awọn apoti, o yẹ ki a lo ọkan ninu awọn aṣẹ wọnyi:

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

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

Awọn akọsilẹ ẹgbẹ: ti o ba lo paramita -rm nigbati o ba bẹrẹ eiyan kan, lẹhinna nigbati o ba duro, gbogbo aaye disk ti o wa yoo ni ominira.

Lilo awọn aworan disk

Ni ọdun diẹ sẹhin, iwọn aworan ti ọpọlọpọ awọn megabyte ọgọọgọrun jẹ deede deede: aworan Ubuntu ṣe iwọn megabyte 600, ati aworan Microsoft .Net ṣe iwọn gigabytes pupọ. Ni awọn ọjọ shaggy wọnyẹn, igbasilẹ aworan kan le gba owo nla lori aaye disk ọfẹ rẹ, paapaa ti o ba pin awọn ipele laarin awọn aworan. Loni - iyin si nla - awọn aworan ṣe iwuwo pupọ, ṣugbọn paapaa, o le yara kun awọn orisun to wa ti o ko ba ṣe awọn iṣọra diẹ.

Awọn oriṣi awọn aworan lo wa ti ko han taara si olumulo ipari:

  • awọn aworan agbedemeji, lori ipilẹ eyiti a gba awọn aworan miiran - wọn ko le paarẹ ti o ba lo awọn apoti ti o da lori awọn aworan “miiran” wọnyi;
  • awọn aworan purpili jẹ awọn aworan agbedemeji ti ko ṣe itọkasi nipasẹ eyikeyi awọn apoti ti nṣiṣẹ - wọn le paarẹ.
  • Pẹlu aṣẹ atẹle o le ṣayẹwo fun awọn aworan didan lori ẹrọ rẹ:

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

O le yọ wọn kuro ni ọna wọnyi:

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

A tun le lo aṣẹ abẹlẹ 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

Ti a ba fẹ lojiji lati pa gbogbo awọn aworan rẹ lapapọ (kii ṣe pe o kan ṣokunkun) pẹlu aṣẹ kan, lẹhinna a le ṣe eyi:

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

Lilo Disk nipasẹ awọn iwọn didun

Awọn iwọn didun ni a lo lati tọju data ni ita eto faili eiyan naa. Fun apẹẹrẹ, ti a ba fẹ fipamọ awọn abajade ohun elo kan lati le lo wọn ni ọna miiran. Apeere ti o wọpọ jẹ awọn apoti isura infomesonu.

Jẹ ki a ṣe ifilọlẹ apoti MongoDB kan, gbe iwọn didun kan si ita si apo eiyan, ki a mu pada afẹyinti data lati ọdọ rẹ (a ni o wa ninu faili 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

Awọn data yoo wa lori ẹrọ agbalejo ni /var/lib/docker/awọn iwe-itọsọna awọn iwọn. Ṣugbọn kilode ti kii ṣe ni ipele kika-kikọ ti eiyan naa? Nitoripe ninu Dockerfile ti aworan MongoDB, ilana / data/db (nibiti MongoDB ti fipamọ data rẹ nipasẹ aiyipada) jẹ asọye bi iwọn didun kan.

Awọn imọran Docker: Ko ẹrọ rẹ kuro ninu ijekuje

Akọsilẹ ẹgbẹ: ọpọlọpọ awọn aworan ti o gbọdọ gbejade data lo awọn iwọn lati tọju data yẹn.

Nigba ti a ba ṣere to pẹlu MongoDB ati duro (tabi boya paapaa paarẹ) eiyan naa, iwọn didun ko ni paarẹ. Yoo tẹsiwaju lati gba aaye disk iyebiye wa titi ti a yoo fi parẹ ni gbangba pẹlu aṣẹ bii eyi:

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

O dara, tabi a le lo aṣẹ abẹlẹ prune ti o ti mọ tẹlẹ si wa:

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

Lilo disk fun aworan Kọ kaṣe

Ni Docker 18.09, ilana ẹda aworan ti ṣe diẹ ninu awọn ayipada ọpẹ si ọpa BuildKit. Nkan yii mu iyara ti ilana naa pọ si ati mu ibi ipamọ data dara ati iṣakoso aabo. Nibi a kii yoo gbero gbogbo awọn alaye ti irinṣẹ iyanu yii; a yoo dojukọ nikan lori bii o ṣe n koju awọn ọran ti lilo aaye disk.

Jẹ ki a sọ pe a ni ohun elo Node.Js ti o rọrun patapata:

  • faili index.js bẹrẹ olupin HTTP ti o rọrun ti o dahun pẹlu laini kan si ibeere kọọkan ti o gba:
  • faili package.json n ṣalaye awọn igbẹkẹle, eyiti expressjs nikan lo lati ṣiṣẹ olupin 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 fun kikọ aworan naa dabi eyi:

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

Jẹ ki a kọ aworan naa ni ọna deede, laisi lilo BuildKit:

$ docker build -t app:1.0 .

Ti a ba ṣayẹwo lilo aaye disk, a le rii pe aworan ipilẹ nikan (node: 13-alpine) ati aworan ibi-afẹde (app: 1.0) n gba aaye:

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

Jẹ ki a kọ ẹya keji ti ohun elo wa, ni lilo BuildKit. Lati ṣe eyi, a kan nilo lati ṣeto oniyipada DOCKER_BUILDKIT si 1:

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

Ti a ba ṣayẹwo lilo disk ni bayi, a yoo rii pe kaṣe kọ (buid-cache) ti wa ni bayi:

$ 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

Lati nu kuro, lo pipaṣẹ atẹle:

$ 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

Ko gbogbo rẹ kuro!

Nitorinaa, a wo mimọ aaye disk ti o gba nipasẹ awọn apoti, awọn aworan ati awọn iwọn didun. Ilana abẹlẹ prune ṣe iranlọwọ fun wa pẹlu eyi. Ṣugbọn o tun le ṣee lo ni ipele eto docker, ati pe yoo nu ohun gbogbo ti o le ṣe:

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

Ti o ba jẹ fun idi kan o n fipamọ aaye disk lori ẹrọ ti n ṣiṣẹ Docker, lẹhinna ṣiṣe aṣẹ yii lorekore yẹ ki o di iwa.

orisun: www.habr.com

Fi ọrọìwòye kun