Malebela a Docker: Hlakola mochini oa hau litšila

Malebela a Docker: Hlakola mochini oa hau litšila

Hey Habr! Ke fana ka tlhokomelo ea hau phetolelo ea sehlooho "Malebela a Docker: Hloekisa Mochini oa Hao oa Lehae" mongoli Luc Juggery.

Kajeno re tla bua ka hore na Docker e sebelisa sebaka sa disk sa mochine o amohelang joang, 'me re tla boela re bone mokhoa oa ho lokolla sebaka sena ho tloha ho likhechana tsa litšoantšo le lijana tse sa sebelisoang.


Malebela a Docker: Hlakola mochini oa hau litšila

Kakaretso ea tšebeliso

Docker ke ntho e ntle, mohlomong ke batho ba fokolang ba e belaelang kajeno. Lilemong tse 'maloa tse fetileng, sehlahisoa sena se re file mokhoa o mocha oa ho haha, ho fana le ho tsamaisa tikoloho efe kapa efe, ho re lumella ho boloka lisebelisoa tsa CPU le RAM haholo. Ntle le sena (mme ho ba bang sena e tla ba ntho ea bohlokoa ka ho fetisisa) Docker e re lumelletse ho nolofatsa le ho kopanya tsamaiso ea bophelo ba tikoloho ea rona ea tlhahiso.

Leha ho le joalo, lintho tsena tsohle tse thabisang bophelong ba kajeno li na le litšenyehelo. Ha re tsamaisa lijana, re khoasolla kapa re iketsetsa litšoantšo, 'me re sebelisa tikoloho e rarahaneng, re tlameha ho lefa. 'Me re lefa, har'a lintho tse ling, ka sebaka sa disk.

Haeba ha o so ka o nahana hore na Docker e nka sebaka se kae mochining oa hau, o kanna oa makatsoa ke tlhahiso ea taelo ena:

$ docker system df

Malebela a Docker: Hlakola mochini oa hau litšila

Sena se bonts'a ts'ebeliso ea disk ea Docker maemong a fapaneng:

  • litšoantšo - kakaretso ea boholo ba litšoantšo tse kopilitsoeng polokelong ea litšoantšo 'me li hahiloe holim'a sistimi ea hau;
  • lijana - palo eohle ea sebaka sa disk se sebelisoang ke ho tsamaisa lijana (e bolelang palo eohle ea likarolo tsa ho bala-ho ngola tsa lijana tsohle);
  • meqolo ea lehae - boholo ba polokelo ea lehae e kentsoeng lijaneng;
  • haha ​​cache - lifaele tsa nakoana tse hlahisoang ke mokhoa oa ho haha ​​​​setšoantšo (ho sebelisa sesebelisoa sa BuildKit, se fumanehang ho qala ka Docker version 18.09).

Ke becha hore ka mor'a phetisetso ena e bonolo u labalabela ho hloekisa disk ea hau ea litšila le ho khutlisetsa li-gigabyte tsa bohlokoa bophelong (hlokomela: haholo-holo haeba u lefa rente bakeng sa li-gigabyte tsena khoeli le khoeli).

Tšebeliso ea diski ka lijana

Nako le nako ha u theha setshelo mochining oa moamoheli, lifaele le li-directory tse 'maloa li etsoa ho /var/lib/docker directory, tseo tse latelang li lokelang ho elelloa:

  • Directory /var/lib/docker/containers/container_ID - ha o sebelisa mokhanni o tloaelehileng oa ho rema lifate, ke moo lintlha tsa liketsahalo li bolokiloeng ka mokhoa oa JSON. Li-log tse nang le lintlha tse ngata haholo, hammoho le li-log tseo ho seng motho ea li balang kapa ho li etsa, hangata li etsa hore li-disk li tlale.
  • Sengoloa sa /var/lib/docker/overlay2 se na le likarolo tsa ho bala-ho ngola setshelo (overlay2 ke mokhanni ea ratoang libakeng tse ngata tsa Linux). Haeba setshelo se boloka data ho sistimi ea eona ea faele, joale e tla beoa bukeng ena.

Ha re nahane ka sistimi eo ho eona ho kentsoeng Pristine Docker, e sa kang ea kenya letsoho ho hlahiseng lijana kapa ho aha litšoantšo. Tlaleho ea eona ea tšebeliso ea sebaka sa disk e tla shebahala tjena:

$ 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

Ha re qaleng setshelo, mohlala, NGINX:

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

Ho etsahalang ka disk:

  • litšoantšo li nka 126 MB, ena ke eona NGINX eo re e qalileng ka setshelo;
  • lijana li nka li-byte tse 2 tse se nang kelello.

$ 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

Ho latela qeto, ha re na sebaka seo re ka se lokollang. Kaha li-byte tsa 2 ha li na thuso ka ho feletseng, a re nahaneng hore NGINX ea rona e ngotse ka mokhoa o sa lebelloang kae-kae 100 Megabytes ea data mme e etsa tlhahlobo ea faele.

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

Ha re hlahlobeng tšebeliso ea sebaka sa disk ho moamoheli hape. Re tla bona hore setshelo (lijana) se na le 100 Megabytes moo.

$ 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

Ke nahana hore boko ba hau bo nang le tsebo bo se bo ntse bo ipotsa hore na faele ea rona ea test.img e hokae. Ha re e batle:

$ 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

Ntle le ho kena lintlheng, re ka hlokomela hore faele ea test.img e fumaneha habonolo boemong ba ho bala-ho ngola, e laoloang ke mokhanni oa overlay2. Haeba re emisa setshelo sa rona, moamoheli o tla re joetsa hore sebaka sena, ha e le hantle, se ka lokolloa:

# 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

Re ka etsa see joang? Ka ho hlakola setshelo, ho tla kenyelletsa ho hlakola sebaka se tsamaisanang le boemo ba ho bala.

Ka taelo e latelang, o ka tlosa lijana tsohle tse kentsoeng ka swoop e le 'ngoe ebe o hlakola disk ea hau lifaeleng tsohle tsa ho bala tse entsoeng ke bona:

$ 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

Kahoo, re lokolotse 104,9 Megabyte ka ho hlakola setshelo. Empa kaha ha re sa sebelisa setšoantšo se jarollotsoeng pele, se fetoha mokhethoa oa ho hlakola le ho lokolla lisebelisoa tsa rona:

$ 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

Tlhokomeliso: Ha feela setšoantšo se ntse se sebelisoa ke bonyane sets'oants'o se le seng, u ke ke ua khona ho sebelisa leqheka lena.

Taelo e nyane ea prune eo re e sebelisitseng ka holimo e na le phello ho lijana tse emisitsoeng. Haeba re batla ho hlakola eseng feela ho emisa empa hape le lijana tse tsamaisang, re lokela ho sebelisa e 'ngoe ea litaelo tsena:

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

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

Lintlha tse ka thōko: haeba u sebelisa -rm parameter ha u qala setshelo, joale ha e emisa, sebaka sohle sa disk seo e neng e le ho sona se tla lokolloa.

Ho sebelisa litšoantšo tsa disk

Lilemong tse 'maloa tse fetileng, boholo ba setšoantšo sa megabyte tse makholo a' maloa bo ne bo tloaelehile ka ho feletseng: setšoantšo sa Ubuntu se ne se le boima ba 600 megabytes, 'me setšoantšo sa Microsoft .Net se ne se le boima ba li-gigabyte tse' maloa. Matsatsing ao a shaggy, ho khoasolla setšoantšo se le seng feela ho ka ba kotsi haholo sebakeng sa hau sa mahala sa disk, leha o ne o arolelana maemo lipakeng tsa litšoantšo. Kajeno - thoriso e be ho ba baholo - litšoantšo li na le boima bo fokolang haholo, empa leha ho le joalo, u ka khona ho tlatsa lisebelisoa tse teng ka potlako haeba u sa nke mehato ea ho itšireletsa.

Ho na le mefuta e 'maloa ea litšoantšo tse sa bonahaleng ho basebelisi ba ho qetela:

  • litšoantšo tse bohareng, motheong oa hore litšoantšo tse ling li bokelloa - li ke ke tsa hlakoloa haeba u sebelisa lijana ho latela litšoantšo tsena "tse ling";
  • litšoantšo tse leketlileng ke litšoantšo tse mahareng tse sa boleloang ke lijana tse tsamaeang - li ka hlakoloa.
  • Ka taelo e latelang u ka sheba litšoantšo tse leketlileng ho sistimi ea hau:

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

U ka li tlosa ka tsela e latelang:

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

Re ka sebelisa subcommand ea 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

Haeba ka tšohanyetso re batla ho hlakola litšoantšo tsohle ka botlalo (eseng feela ho leketla) ka taelo e le 'ngoe, re ka etsa sena:

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

Tšebeliso ea diski ka bongata

Li-volumes li sebelisoa ho boloka data ka ntle ho sistimi ea faele ea setshelo. Mohlala, haeba re batla ho boloka liphetho tsa ts'ebeliso e le hore re li sebelise ka tsela e 'ngoe. Mohlala o tloaelehileng ke li-database.

Ha re qaleng sets'oants'o sa MongoDB, re phahamise molumo ka ntle ho sets'oants'o, 'me re khutlisetse polokelo ea polokelo ho tsoa ho eona (re e fumane ka faeleng ea 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

Lintlha li tla fumaneha mochining oa moamoheli ho /var/lib/docker/volumes directory. Empa ke hobane'ng ha u se boemong ba ho bala-ho ngola ka setshelo? Hobane ho Dockerfile ea setšoantšo sa MongoDB, directory / data/db (moo MongoDB e bolokang data ea eona ka ho sa feleng) e hlalosoa e le molumo.

Malebela a Docker: Hlakola mochini oa hau litšila

Lehlakoreng la lintlha: litšoantšo tse ngata tse tlamehang ho hlahisa data li sebelisa boholo ho boloka data eo.

Ha re bapala ka ho lekana le MongoDB mme re emisa (kapa mohlomong le ho hlakola) setshelo, molumo o ke ke oa hlakoloa. E tla tsoelapele ho nka sebaka sa rona sa bohlokoa sa disk ho fihlela re se hlakola ka ho hlaka ka taelo e kang ena:

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

Che, kapa re ka sebelisa subcommand ea prune eo re seng re e tloaetse:

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

Ho sebelisa disk bakeng sa cache ea ho haha ​​​​setšoantšo

Ho Docker 18.09, ts'ebetso ea ho theha litšoantšo e bile le liphetoho tse itseng ka lebaka la sesebelisoa sa BuildKit. Ntho ena e eketsa lebelo la ts'ebetso mme e ntlafatsa polokelo ea data le taolo ea ts'ireletso. Mona re ke ke ra nahana ka lintlha tsohle tsa sesebelisoa sena se setle, re tla shebana feela le hore na se sebetsana joang le litaba tsa tšebeliso ea sebaka sa disk.

Ha re re re na le ts'ebeliso e bonolo ea Node.Js:

  • index.js e qala seva e bonolo ea HTTP e arabelang ka mohala ho kopo e 'ngoe le e' ngoe e amoheloang:
  • faele ea package.json e hlalosa litšepiso, tseo Expressjs feela e sebelisoang ho tsamaisa seva ea 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 ea ho haha ​​​​setšoantšo e shebahala tjena:

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

Ha re aheng setšoantšo ka mokhoa o tloaelehileng, ntle le ho sebelisa BuildKit:

$ docker build -t app:1.0 .

Haeba re sheba ts'ebeliso ea sebaka sa disk, re ka bona hore ke setšoantšo sa motheo feela (node: 13-alpine) le setšoantšo se shebiloeng (app: 1.0) se nkang sebaka:

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

Ha re theheng mofuta oa bobeli oa ts'ebeliso ea rona, re sebelisa BuildKit. Ho etsa sena, re hloka feela ho beha mofuta oa DOCKER_BUILDKIT ho 1:

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

Haeba joale re hlahloba ts'ebeliso ea disk, re tla bona hore cache ea kaho (buid-cache) e se e ameha moo:

$ 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

Ho e hlakola, sebelisa taelo e latelang:

$ 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

Hlakola tsohle!

Kahoo, re ile ra sheba ho hloekisa sebaka sa disk se nang le lijana, litšoantšo le li-volumes. The prune subcommand e re thusa ka sena. Empa e ka boela ea sebelisoa boemong ba tsamaiso ea docker, 'me e tla hloekisa ntho e' ngoe le e 'ngoe eo e ka e khonang:

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

Haeba ka lebaka le itseng u boloka sebaka sa disk mochining o sebelisang Docker, nako le nako ho tsamaisa taelo ena e lokela ho ba tloaelo.

Source: www.habr.com

Eketsa ka tlhaloso