Nā Manaʻo Docker: E hoʻomaʻemaʻe i kāu mīkini i nā ʻōpala

Nā Manaʻo Docker: E hoʻomaʻemaʻe i kāu mīkini i nā ʻōpala

Aloha, Habr! Ke hāʻawi aku nei au iā ʻoe i kahi unuhi o ka ʻatikala "Nā Manaʻo Docker: E hoʻomaʻemaʻe i kāu mīkini kūloko" ka mea kākau ʻO Luc Juggery.

I kēia lā e kamaʻilio mākou e pili ana i ka hoʻohana ʻana o Docker i ka disk space o ka mīkini hoʻokipa, a e noʻonoʻo pū mākou pehea e hoʻokuʻu ai i kēia wahi mai nā ʻōpala o nā kiʻi i hoʻohana ʻole ʻia.


Nā Manaʻo Docker: E hoʻomaʻemaʻe i kāu mīkini i nā ʻōpala

Huina pau

He mea ʻoluʻolu ʻo Docker, liʻiliʻi paha ka poʻe kānalua i kēia lā. I kekahi mau makahiki i hala aku nei, ua hāʻawi kēia huahana iā mākou i kahi ala hou loa e kūkulu, hoʻopuka a holo i kekahi kaiapuni, e ʻae iā mākou e mālama nui i nā kumuwaiwai CPU a me RAM. Ma waho aʻe o kēia (a no kekahi ʻo ia ka mea nui loa) ua ʻae ʻo Docker iā mākou e hoʻomaʻamaʻa maʻalahi a hoʻohui i ka hoʻokele ola o kā mākou wahi hana.

Eia naʻe, hiki mai kēia mau mea leʻaleʻa a pau o ke ola hou. Ke holo mākou i nā ipu, hoʻoiho a hana paha i kā mākou mau kiʻi ponoʻī, a kau i nā kaiaola paʻakikī, pono mākou e uku. A ke uku nei mākou, ma waena o nā mea ʻē aʻe, me kahi disk space.

Inā ʻaʻole ʻoe i noʻonoʻo e pili ana i ka nui o ka wahi a Docker e lawe ai i kāu mīkini, e kahaha paha ʻoe i ka hopena o kēia kauoha:

$ docker system df

Nā Manaʻo Docker: E hoʻomaʻemaʻe i kāu mīkini i nā ʻōpala

Hōʻike kēia i ka hoʻohana ʻana o Docker disk ma nā ʻano ʻokoʻa like ʻole:

  • nā kiʻi - ka nui o nā kiʻi i hoʻoiho ʻia mai nā waihona kiʻi a kūkulu ʻia ma kāu ʻōnaehana;
  • nā ipu - ka nui o ka nui o ka diski i hoʻohana ʻia e nā ipu e holo ana (ʻo ia ka nui o ka nui o nā papa heluhelu-kākau o nā ipu āpau);
  • nā puke kūloko - ka nui o ka waihona kūloko i kau ʻia i nā pahu;
  • kūkulu i kahi huna - nā faila manawa i hana ʻia e ke kaʻina hana kūkulu kiʻi (me ka hoʻohana ʻana i ka mea hana BuildKit, loaʻa e hoʻomaka me ka Docker version 18.09).

Manaʻo wau ma hope o kēia hoʻololi maʻalahi, makemake ʻoe e hoʻomaʻemaʻe i kāu disk o ka ʻōpala a hoʻihoʻi i nā gigabytes makamae i ke ola (nota: inā ʻoe e uku hoʻolimalima no kēia mau gigabytes i kēlā me kēia mahina).

Hoʻohana ʻia e nā pahu

I kēlā me kēia manawa āu e hana ai i kahi pahu ma ka mīkini hoʻokipa, hana ʻia kekahi mau faila a me nā papa kuhikuhi ma ka papa kuhikuhi / var/lib/docker, ma waena o kēia mau mea e ʻike ʻia:

  • Papa kuhikuhi /var/lib/docker/containers/container_ID – i ka wā e hoʻohana ai i ka mea hoʻokele logging maʻamau, ʻo ia kahi e mālama ʻia ai nā hanana hanana ma JSON format. ʻO nā lāʻau kikoʻī loa, a me nā lāʻau i heluhelu ʻole ʻia e kekahi a i ʻole nā ​​​​kaʻina hana ʻē aʻe, e hoʻopiha pinepine i nā disks.
  • Aia ka papa kuhikuhi /var/lib/docker/overlay2 i nā ʻāpana heluhelu-kākau pahu (overlay2 ka mea hoʻokele makemake i ka hapa nui o nā māhele Linux). Inā mālama ka pahu i ka ʻikepili i kāna ʻōnaehana faila, a laila aia ma kēia papa kuhikuhi e waiho ʻia.

E noʻonoʻo kākou i kahi ʻōnaehana i hoʻokomo ʻia ai kahi Docker maʻemaʻe, ʻaʻole i komo i ka hoʻokuʻu ʻana i nā ipu a i ʻole ke kūkulu ʻana i nā kiʻi. Penei ka nānā ʻana o kāna hōʻike hoʻohana wahi disk:

$ 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

E hoʻomaka kākou i kahi pahu, no ka laʻana, NGINX:

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

He aha ka hana i ka diski:

  • Noho nā kiʻi i ka 126 MB, ʻo ia ka NGINX like a mākou i hoʻokuʻu ai i loko o ka ipu;
  • lawe nā pahu i kahi 2 bytes ʻakaʻaka.

$ 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

Ke hoʻoholo nei ma ka hopena, ʻaʻohe o mākou wahi i hiki ke hoʻokuʻu. No ka mea he 2 bytes he mea lapuwale loa, e noʻonoʻo kākou ua kākau ʻole kā mākou NGINX i kahi 100 Megabytes o ka ʻikepili a hana i kahi file test.img o kēia nui i loko ona.

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

E noʻonoʻo hou i ka hoʻohana ʻana i kahi disk space ma ka host. E ʻike mākou aia ka pahu (containers) i 100 Megabytes ma laila.

$ 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

Manaʻo wau ke noʻonoʻo nei kou lolo ʻimi i kahi o kā mākou faila test.img. E ʻimi kākou iā ia:

$ 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

Me ka ʻole o ka hele ʻana i nā kikoʻī, hiki iā mākou ke hoʻomaopopo i ka loaʻa ʻana o ka faila test.img ma ka pae heluhelu-kākau, i hoʻomalu ʻia e ka mea hoʻokele overlay2. Inā ho'ōki mākou i kā mākou pahu, e haʻi mai ka mea hoʻokipa iā mākou e hiki ke hoʻokuʻu ʻia kēia wahi.

# 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

Pehea e hiki ai iā mākou ke hana i kēia? Ma ka holoi ʻana i ka ipu, e pili ana i ka hoʻomaʻemaʻe ʻana i ka wahi kūpono ma ka pae heluhelu-kākau.

Me ke kauoha aʻe nei, hiki iā ʻoe ke wehe i nā pahu i hoʻokomo ʻia i hoʻokahi swoop a hoʻomaʻemaʻe i kāu disk o nā faila heluhelu-kākau i hana ʻia e lākou:

$ 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

No laila, ua hoʻokuʻu mākou i 104,9 Megabytes ma ka holoi ʻana i ka ipu. Akā no ka mea ʻaʻole mākou e hoʻohana hou i ke kiʻi i hoʻoiho mua ʻia, lilo ia i moho no ka holoi ʻana a me ka hoʻokuʻu ʻana i kā mākou mau kumuwaiwai:

$ 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

Nānā: ʻOiai ke hoʻohana ʻia nei ke kiʻi e hoʻokahi pahu, ʻaʻole hiki iā ʻoe ke hoʻohana i kēia hoʻopunipuni.

ʻO ka subcommand prune a mākou i hoʻohana ai ma luna wale nō ka hopena i nā pahu i kū. Inā makemake mākou e holoi ʻaʻole i hoʻōki wale ʻia akā e holo ana i nā ipu, pono mākou e hoʻohana i kekahi o kēia mau kauoha:

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

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

Nā memo ʻaoʻao: inā ʻoe e hoʻohana i ka -rm parameter i ka wā e hoʻomaka ai i kahi pahu, a laila i ka wā e kū ai, e hoʻokuʻu ʻia nā wahi disk a pau āna i noho ai.

Ke hoʻohana nei i nā kiʻi diski

I kekahi mau makahiki i hala aku nei, ua maʻamau ka nui o ke kiʻi o nā haneli megabytes: he 600 megabytes ke kaumaha o ke kiʻi Ubuntu, a ʻo ke kiʻi Microsoft .Net ua kaumaha kekahi mau gigabytes. I kēlā mau lā haʻalulu, ʻo ka hoʻoiho ʻana i hoʻokahi kiʻi wale nō hiki ke hoʻopau nui i kāu wahi diski manuahi, ʻoiai inā ʻoe e kaʻana like ana i nā pae ma waena o nā kiʻi. I kēia lā - hoʻomaikaʻi i nā mea nui - ʻoi aku ka liʻiliʻi o ke kaumaha o nā kiʻi, akā naʻe, hiki iā ʻoe ke hoʻopiha koke i nā kumuwaiwai i loaʻa inā ʻaʻole ʻoe e mālama.

Nui nā ʻano kiʻi i ʻike ʻole ʻia e ka mea hoʻohana hope:

  • nā kiʻi waena, ma ke kumu e hōʻiliʻili ʻia ai nā kiʻi ʻē aʻe - ʻaʻole hiki ke holoi ʻia inā hoʻohana ʻoe i nā pahu e pili ana i kēia mau kiʻi "ē aʻe";
  • ʻO nā kiʻi lele nā ​​kiʻi waena ʻaʻole i kuhikuhi ʻia e kekahi o nā pahu holo - hiki ke holoi ʻia.
  • Me kēia kauoha hiki iā ʻoe ke nānā i nā kiʻi lele ma kāu ʻōnaehana:

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

Hiki iā ʻoe ke wehe iā lākou ma kēia ala:

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

Hiki iā mākou ke hoʻohana i ka 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

Inā makemake koke mākou e hoʻopau i nā kiʻi āpau (a ʻaʻole wale i ke kau ʻana) me hoʻokahi kauoha, a laila hiki iā mākou ke hana i kēia:

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

Ka hoʻohana ʻana i nā diski ma ka nui

Hoʻohana ʻia nā volumes no ka mālama ʻana i ka ʻikepili ma waho o ka ʻōnaehana waihona o ka ipu. No ka laʻana, inā makemake mākou e mālama i nā hopena o kahi noi i mea e hoʻohana ai iā lākou ma kekahi ala ʻē aʻe. ʻO kahi laʻana maʻamau ka waihona.

E hoʻomaka i kahi pahu MongoDB, e kau i kahi leo ma waho o ka ipu, a e hoʻihoʻi i kahi waihona waihona mai ia mea (loaʻa iā mākou ma ka faila 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

Aia ka ʻikepili ma ka mīkini hoʻokipa ma ka papa kuhikuhi /var/lib/docker/volume. Akā, no ke aha ʻaʻole i ka pae heluhelu-kākau o ka ipu? No ka mea ma ka Dockerfile o ke kiʻi MongoDB, ua wehewehe ʻia ka /data/db directory (kahi e mālama ai ʻo MongoDB i kāna ʻikepili ma ke ʻano maʻamau).

Nā Manaʻo Docker: E hoʻomaʻemaʻe i kāu mīkini i nā ʻōpala

Manaʻo ʻaoʻao: nui nā kiʻi e pono e hana i ka ʻikepili e hoʻohana i nā puke e mālama i kēlā ʻikepili.

Ke pāʻani nui mākou me MongoDB a hoʻōki (a i ʻole e holoi paha) i ka ipu, ʻaʻole e holoi ʻia ka leo. E hoʻomau ʻia ka lawe ʻana i kā mākou wahi disk a hiki i ka wā e holoi pono ai mākou me kahi kauoha e like me kēia:

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

ʻAe, a i ʻole hiki iā mākou ke hoʻohana i ka subcommand prune i maʻa mua iā mākou:

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

Ke hoʻohana nei i ka diski no ke kūkulu ʻana i ke kiʻi

Ma Docker 18.09, ua hoʻololi ke kaʻina hana kiʻi i ka mahalo i ka mea hana BuildKit. Hoʻonui kēia mea i ka wikiwiki o ke kaʻina hana a hoʻonui i ka mālama ʻikepili a me ka hoʻokele palekana. Ma ʻaneʻi ʻaʻole mākou e noʻonoʻo i nā kikoʻī āpau o kēia mea hana kupanaha; e nānā wale mākou i ka hoʻoponopono ʻana i nā pilikia o ka hoʻohana ʻana i ka disk space.

E ʻōlelo mākou he noi Node.Js maʻalahi loa mākou:

  • hoʻomaka ka faila index.js i kahi kikowaena HTTP maʻalahi e pane me kahi laina i kēlā me kēia noi i loaʻa:
  • ʻO ka file package.json ka wehewehe ʻana i nā hilinaʻi, ʻo ia wale nō expressjs i hoʻohana ʻia e holo i ka server 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"
      }
    }

ʻO ka Dockerfile no ke kūkulu ʻana i ke kiʻi e like me kēia:

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

E kūkulu kākou i ke kiʻi ma ke ʻano maʻamau, me ka hoʻohana ʻole ʻana iā BuildKit:

$ docker build -t app:1.0 .

Inā nānā mākou i ka hoʻohana ʻana i ka hakahaka disk, ʻike mākou ʻo ke kiʻi kumu wale nō (node:13-alpine) a me ke kiʻi i koho ʻia (app:1.0) e lawe ana i ka lewa:

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

E kūkulu kākou i ka mana lua o kā mākou noi, me ka hoʻohana ʻana iā BuildKit. No ka hana ʻana i kēia, pono mākou e hoʻonohonoho i ka hoʻololi DOCKER_BUILDKIT i 1:

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

Inā mākou e nānā i ka hoʻohana ʻana i ka disk, e ʻike mākou ua komo ka hale huna (buid-cache) ma laila:

$ 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

No ka holoi ʻana, e hoʻohana i kēia kauoha:

$ 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

Holoi i nā mea a pau!

No laila, ua nānā mākou i ka hoʻomaʻemaʻe ʻana i kahi diski i noho ʻia e nā ipu, nā kiʻi a me nā puke. ʻO ka subcommand prune kōkua iā mākou i kēia. Akā hiki ke hoʻohana ʻia ma ka pae ʻōnaehana docker, a e hoʻomaʻemaʻe ia i nā mea āpau e hiki ai:

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

Inā no kekahi kumu ke mālama nei ʻoe i kahi diski ma kahi mīkini e holo ana iā Docker, a laila e holo i kēlā me kēia manawa kēia kauoha e lilo i mea maʻamau.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka