Tohutohu Docker: Whakakorehia to miihini ki nga parapara

Tohutohu Docker: Whakakorehia to miihini ki nga parapara

Hei Habr! Ka whakaatu ahau ki a koutou te whakamaoritanga o te tuhinga "Nga Tohutohu Docker: Whakapaihia to Miihini Paetata" kaituhi Luc Juggery.

I tenei ra ka korero tatou mo te whakamahi a Docker i te mokowā kōpae o te miihini manaaki, me te whakaaro ano hoki me pehea te wetewete i tenei waahi mai i nga mokowhiti o nga whakaahua me nga ipu kaore i whakamahia.


Tohutohu Docker: Whakakorehia to miihini ki nga parapara

Te paunga katoa

He mea pai a Docker, he ruarua pea nga tangata e ruarua ana i tenei ra. I etahi tau kua pahure ake nei, i homai e tenei hua he huarahi hou ki a matou ki te hanga, ki te tuku me te whakahaere i tetahi taiao, ka taea e matou te whakaora i nga rauemi CPU me te RAM. I tua atu i tenei (a mo etahi ko tenei te mea tino nui) Kua whakaaetia e Docker ki te whakangawari me te whakakotahi i te whakahaeretanga o te oranga o o tatou taiao whakaputa.

Heoi, ko enei mea ahuareka katoa o te ao hou he utu. Ina whakahaere tatou i nga ipu, tango, hanga ranei i a tatou ake whakaahua, ka horahia nga punaha rauwiringa kaiao, me utu. Na ka utua e matou, i roto i era atu mea, me te mokowā kōpae.

Mena kaore koe i whakaaro mo te nui o te waahi ka tangohia e Docker i runga i to miihini, ka tino miharo koe ki te putanga o tenei whakahau:

$ docker system df

Tohutohu Docker: Whakakorehia to miihini ki nga parapara

Ka whakaatu tenei i te whakamahinga kōpae a Docker i roto i nga horopaki rereke:

  • whakaahua – te rahi katoa o nga whakaahua i tangohia mai i nga putunga whakaahua me te hanga ki runga i to punaha;
  • ipu – te tapeke o te mokowā kōpae e whakamahia ana e ngā ipu e rere ana (te tikanga ko te tapeke rōrahi o ngā paparanga panui-tuhi o nga ipu katoa);
  • rōrahi rohe – te rōrahi o te rokiroki ā-rohe e mau ana ki ngā ipu;
  • hanga keteroki - nga konae rangitahi i hangaia e te hanga whakaahua (ma te whakamahi i te taputapu BuildKit, e waatea ana me te Docker putanga 18.09).

Ka whakatau ahau i muri i tenei whakawhitinga ngawari ka hiahia koe ki te horoi i to kōpae o para para me te whakahoki mai i nga gigabytes utu nui ki te ora (tohu: ina koa ka utu koe i te reti mo enei gigabytes ia marama).

Te whakamahi kōpae ma nga ipu

I nga wa katoa ka hangaia e koe he ipu ki runga i te miihini manaaki, he maha nga konae me nga raarangi i hangaia i roto i te raarangi /var/lib/docker, kei roto ko enei e whai ake nei:

  • Whaiaronga /var/lib/docker/containers/container_ID – i te wa e whakamahi ana i te taraiwa takiuru paerewa, koinei te waahi ka tiakina nga raarangi takahanga ki te whakatakotoranga JSON. Ko nga raarangi tino taipitopito, tae atu ki nga raarangi karekau e panuihia e te tangata, i etahi atu mahi ranei, ka ki tonu nga kōpae.
  • Kei roto i te whaiaronga /var/lib/docker/overlay2 nga ipu panui panui-tuhi (ko te overlay2 te taraiwa pai ki te nuinga o nga tohatoha Linux). Mena kei te penapena raraunga te ipu ki roto i tana punaha konae, kei roto i tenei raarangi ka tuu.

Whakaarohia he punaha i whakauruhia he Docker tuuturu, kaore ano kia uru ki te whakarewa i nga ipu, ki te hanga whakaahua ranei. Ka penei te ahua o tana purongo mokowā mokowā:

$ 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

Kia whakarewahia etahi ipu, hei tauira, NGINX:

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

Ka ahatia te kōpae:

  • Ko nga whakaahua kei te 126 MB, ko te NGINX ano tenei i whakarewahia e matou i roto i te ipu;
  • ka tango nga ipu i te 2 paita wawau.

$ 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

Ma te whakatau i te whakatau, kaore ano kia whai waahi ka taea e tatou te whakaatea. I te mea ko te 2 paita he tino horihori, me whakaaro tatou i tuhi ohorere to tatou NGINX ki tetahi waahi 100 Megabytes o nga raraunga ka hangaia he konae.

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

Kia tirohia ano te whakamahinga mokowā kōpae i runga i te kaihautu. Ka kite tatou ka noho te ipu (putea) 100 Megabytes ki reira.

$ 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

Ki taku whakaaro kei te miharo kee to roro uira kei hea to tatou konae test.img. Kia kimihia e tatou:

$ 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

Ki te kore e uru ki nga korero, ka taea e tatou te kite kei te waatea te konae test.img ki te taumata panui-tuhi, e whakahaerehia ana e te taraiwa overlay2. Ki te whakamutua ta tatou ipu, ka kii mai te kaihautu ka taea tenei waahi, i runga i te tikanga, ka wetekina:

# 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

Me pehea e taea ai e tatou tenei? Ma te whakakore i te ipu, ka uru ki te whakakore i te waahi e rite ana ki te taumata panui-tuhi.

Ma te whakahau e whai ake nei, ka taea e koe te tango i nga ipu katoa kua whakauruhia ki roto i te wa kotahi, ka whakakore i to kōpae o nga konae panui-tuhi katoa i hangaia e ratou:

$ 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

Na, i wetekina e matou te 104,9 Megabytes ma te whakakore i te ipu. Engari i te mea kua kore matou e whakamahi i te ahua o mua ake nei, ka noho hei kaitono mo te whakakore me te whakawātea i a matou rauemi:

$ 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

Tuhipoka: I te mea e whakamahia ana te ahua e te ipu kotahi, karekau koe e kaha ki te whakamahi i tenei tinihanga.

Ko te whakahau iti tapahi i whakamahia e matou i runga ake nei ka pa ki nga ipu kua mutu. Mena kei te pirangi tatou ki te whakakore i te aukati anake engari ka rere nga ipu, me whakamahi tetahi o enei whakahau:

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

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

Nga tuhipoka taha: ki te whakamahi koe i te -rm tawhā i te tiimata o te ipu, ka mutu, ka wetekina nga mokowā kōpae katoa e nohoia ana.

Te whakamahi whakaahua kōpae

I etahi tau kua pahure ake nei, he ahua noa te rahi o te ahua o te maha rau megabytes: he 600 megabytes te taumaha o te ahua Ubuntu, me te ahua o Microsoft .Net he maha nga gigabytes te taumaha. I aua ra puhuruhuru, ko te tango i tetahi atahanga ka nui te mate ki to mokowā kōpae koreutu, ahakoa kei te tiritahi koe i nga taumata i waenga i nga whakaahua. I tenei ra - me mihi ki te hunga nunui - he iti ake te taumaha o nga whakaahua, engari ahakoa, ka taea e koe te whakakii tere i nga rauemi e waatea ana ki te kore koe e tupato.

He maha nga momo ahua kaore e kitea e te kaiwhakamahi mutunga:

  • whakaahua takawaenga, i runga i te kohia o etahi atu whakaahua - kaore e taea te whakakore mena ka whakamahi koe i nga ipu i runga i enei whakaahua "atu";
  • Ko nga whakaahua tarewa he whakaahua takawaenga kaore e tohuhia e tetahi o nga ipu rere - ka taea te whakakore.
  • Ma te whakahau e whai ake nei ka taea e koe te tirotiro mo nga whakaahua tarewa i runga i to punaha:

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

Ka taea e koe te tango i a raatau ma te huarahi e whai ake nei:

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

Ka taea hoki e tatou te whakamahi i te whakahau iti 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

Mena ka hiahia ohorere tatou ki te muku i nga whakaahua katoa (kaore i te tarewa noa) me te whakahau kotahi, katahi ka taea e tatou:

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

Te whakamahi kōpae ma te rahi

Ka whakamahia nga pukapuka ki te penapena raraunga ki waho o te punaha konae o te ipu. Hei tauira, mena kei te pirangi tatou ki te penapena i nga hua o tetahi tono hei whakamahi ma etahi atu huarahi. Ko te tauira noa ko nga papaa raraunga.

Ka whakarewahia e tatou he ipu MongoDB, ka whakairihia he rōrahi ki waho o te ipu, ka whakahoki mai i te taapiri raraunga mai i taua mea (kei a maatau kei te konae 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

Ka noho nga raraunga ki runga i te miihini manaaki i te raarangi /var/lib/docker/volume. Engari he aha i kore ai i te taumata panui-tuhi o te ipu? Na te mea kei roto i te Dockerfile o te ahua MongoDB, ko te whaiaronga /data/db (kei reira e penapena ana a MongoDB i ana raraunga ma te taunoa) kua tautuhia hei rōrahi.

Tohutohu Docker: Whakakorehia to miihini ki nga parapara

Tuhipoka taha: he maha nga whakaahua me whakaputa raraunga ka whakamahi i nga pukapuka hei penapena i aua raraunga.

Ka nui ta tatou takaro ki a MongoDB ka mutu (ka mukua ranei) te ipu, ka kore te ruri e mukua. Ka mau tonu to maatau mokowā kōpae utu nui kia mukua ra ano e matou me te whakahau penei:

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

Kaati, ka taea ranei e tatou te whakamahi i te whakahau iti kua maarama ki a tatou:

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

Te whakamahi kōpae mo te hanga whakaahua keteroki

I roto i te Docker 18.09, kua puta etahi huringa o te hanga whakaahua na te taputapu BuildKit. Ko tenei mea ka piki ake te tere o te tukanga me te whakapai ake i te rokiroki raraunga me te whakahaere haumaru. I konei kaore matou e whakaaro ki nga korero katoa o tenei taputapu whakamiharo; ka aro noa matou ki te pehea e whakatika ai i nga take mo te whakamahi mokowā kōpae.

Me kii tatou he tono Node.Js tino ngawari:

  • ka tiimata te konae index.js i tetahi tūmau HTTP ngawari e whakautu ana me te raina ki ia tono kua riro:
  • ka tautuhia e te file package.json nga whakawhirinakitanga, ko nga expressjs anake e whakamahia ana hei whakahaere i te tūmau 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"
      }
    }

Ko te Dockerfile mo te hanga i te ahua penei:

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

Me hanga te ahua ki te ahua o mua, me te kore e whakamahi i te BuildKit:

$ docker build -t app:1.0 .

Mena ka tirohia e tatou te whakamahinga mokowā kōpae, ka kite tatou ko te ahua taketake anake (node:13-alpine) me te atahanga ūnga (taupānga:1.0) kei te tango mokowā:

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

Me hanga te putanga tuarua o ta tatou tono, ma te whakamahi i te BuildKit. Hei mahi i tenei, me tautuhi noa te DOCKER_BUILDKIT taurangi ki te 1:

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

Mena ka tirohia e tatou te whakamahinga o te kōpae, ka kite tatou kua uru te keteroki hanga (buid-cache) ki reira:

$ 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

Hei whakawātea, whakamahia te whakahau e whai ake nei:

$ 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

Maama katoa!

Na, i titiro matou ki te horoi i te mokowā kōpae e nohoia ana e nga ipu, nga whakaahua me nga pukapuka. Ko te whakahau iti prune hei awhina i a maatau ki tenei. Engari ka taea hoki te whakamahi i te taumata o te punaha docker, a ka horoi i nga mea katoa ka taea:

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

Mena he take kei te penapena koe i te mokowā kōpae i runga i to miihini Docker, katahi ka whakahaere i tenei whakahau hei tikanga.

Source: will.com

Tāpiri i te kōrero