Fautuaga Docker: Faʻamama lau masini mai mea leaga

Fautuaga Docker: Faʻamama lau masini mai mea leaga

Ei Habr! Ou te faailoa atu ia te outou le faaliliuga o le tusiga "Fautuaga Docker: Faʻamamā lau masini faʻapitonuʻu" tusitala Luc Juggery.

O le asō o le a tatou talanoa ai pe faʻafefea ona faʻaogaina e Docker le avanoa o le masini talimalo, ma o le a tatou mafaufau foi pe faʻafefea ona faʻasaʻoloto lenei avanoa mai le faʻaogaina o ata ma pusa e leʻi faʻaaogaina.


Fautuaga Docker: Faʻamama lau masini mai mea leaga

Aofa'i taumafa

O Docker o se mea manaia, masalo e toʻaitiiti tagata e masalosalo i aso nei. Na'o ni nai tausaga talu ai, o lenei oloa na tu'uina mai ia i matou se auala fou atoatoa e fausia ai, tu'uina atu ma fa'atautaia so'o se si'osi'omaga, e fa'atagaina ai i matou e fa'aola tele le CPU ma le RAM punaoa. I le faaopoopo atu i lenei mea (ma mo nisi o le a sili ona taua) Ua faʻatagaina i matou e Docker e faʻafaigofie tele ma tuʻufaʻatasia le puleaina o le olaga oa matou siosiomaga gaosiga.

Ae ui i lea, o nei mea fiafia uma o le olaga faʻaonaponei e oʻo mai i se tau. Pe a matou faʻatautaia pusa, download pe fatuina a matou lava ata, ma faʻapipiʻi faʻalavelave faʻanatura, e tatau ona matou totogi. Ma matou totogi, faatasi ai ma isi mea, i le disk space.

Afai e te leʻi mafaufau i le tele o avanoa e ave e Docker i luga o lau masini, atonu e te le fiafia i le gaioiga o lenei poloaiga:

$ docker system df

Fautuaga Docker: Faʻamama lau masini mai mea leaga

O loʻo faʻaalia ai le faʻaogaina o le disk a Docker i tulaga eseese:

  • ata - o le aofaʻi atoa o ata na sii mai i fale teu ata ma fausia i luga o lau masini;
  • atigipusa – o le aofa'iga atoa o avanoa tisiki o lo'o fa'aogaina e koneteina ta'avale (o lona uiga o le aofa'i atoa o fa'atusi faitau-tusi o pusa uma);
  • voluma fa'apitonu'u - le aofa'i o mea teu fa'apitonu'u o lo'o fa'apipi'i i koneteina;
  • fausia le cache - faila le tumau e faia e le faʻatulagaina o ata (faʻaaogaina le meafaigaluega BuildKit, avanoa e amata ile Docker version 18.09).

Ou te fa'apea a mae'a lenei fa'aliliuga faigofie e te naunau e fa'amama lau tisiki o lapisi ma toe fa'afo'i mai gigabytes taua i le ola (fa'aaliga: ae maise pe a e totogi lisi mo nei gigabytes i masina ta'itasi).

Fa'aoga tisiki e koneteina

Soo se taimi lava e te fatuina ai se atigipusa i luga o le masini talimalo, e tele faila ma faʻamaumauga e faia i le / var / lib / docker directory, lea e taua ai le matauina:

  • Directory /var/lib/docker/containers/container_ID - pe a faʻaaogaina le avetaʻavale masani, o le mea lea e teu ai faʻamaumauga i le JSON format. O ogalaau auiliili tele, faʻapea foʻi ma ogalaau e leai se tasi e faitau pe faʻagaioiina, e masani ona mafua ai ona tumu tisiki.
  • O le / var / lib / docker / overlay2 directory o loʻo i ai le pusa faitau-tusi tusi (overlay2 o le avetaʻavale sili i le tele o faʻasalalauga Linux). Afai e teuina e le koneteina faʻamaumauga i totonu o lana faila faila, o loʻo i totonu o lenei lisi o le a tuʻuina.

Sei o tatou mafaufau i se faiga o loʻo faʻapipiʻiina ai se Docker mama, lea e leʻi aʻafia ai i le faʻalauiloaina o pusa poʻo le fausiaina o ata. O le lipoti o le fa'aogaina o avanoa tisiki e fa'apea:

$ 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

Sei o tatou faʻalauiloa se atigipusa, mo se faʻataʻitaʻiga, NGINX:

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

O le a le mea e tupu i le disk:

  • ata o loʻo i ai le 126 MB, o le NGINX lava lea na matou faʻalauiloaina i totonu o le pusa;
  • konetina ave se fa'avalevalea 2 paita.

$ 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

A fa'atatau i le fa'ai'uga, tatou te le'i maua lava se avanoa e mafai ona tatou fa'asa'olotoina. Talu ai o le 2 bytes e matua faʻatauvaʻa, seʻi o tatou mafaufau o le matou NGINX na faʻafuaseʻi ona tusia i se mea 100 Megabytes o faʻamaumauga ma fatuina se faila suʻega.img o le tele tonu lava i totonu ia te ia lava.

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

Se'i o tatou toe su'esu'eina le fa'aogaina o le avanoa o le tisiki i le tagata talimalo. O le a tatou vaʻaia o le koneteina (containers) o loʻo i ai le 100 Megabytes iina.

$ 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

Ou te manatu ua leva ona tau mafaufau lou fai'ai su'esu'e po o fea o iai le matou faila test.img. Se'i tatou su'eina:

$ 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

A aunoa ma le alu i faʻamatalaga, e mafai ona tatou maitauina o le faila test.img o loʻo faʻaogaina i le tulaga faitau-tusi, e pulea e le avetaʻavale overlay2. Afai tatou te taofi la tatou koneteina, o le a taʻu mai e le tagata talimalo ia i tatou o lenei avanoa, i le mataupu faavae, e mafai ona faʻasaʻolotoina:

# 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

E mafai faapefea ona tatou faia lenei mea? E ala i le tapeina o le atigipusa, lea e aofia ai le kilia o le avanoa tutusa i le tulaga faitau-tusi.

Faatasi ai ma le faʻatonuga o loʻo i lalo, e mafai ona e aveese uma pusa faʻapipiʻi i se tasi paʻu ma faʻamama lau tisiki o faila faitau-tusi uma na latou fatuina:

$ 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

O lea, na matou faʻasaʻolotoina 104,9 Megabytes e ala i le tapeina o le pusa. Ae talu ai tatou te le toe faʻaogaina le ata na sii mai muamua, e avea foi ma sui tauva mo le tapeina ma le faʻasaʻolotoina oa tatou punaoa:

$ 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

Fa'aaliga: Afai lava e fa'aoga le ata e le itiiti ifo ma le tasi le koneteina, o le a le mafai ona e fa'aogaina lenei togafiti.

O le fa'atonuga pa'u na matou fa'aogaina i luga e na'o le a'afiaga o koneteina taofi. Afai tatou te mananaʻo e tape e le gata ina taofi ae faʻapea foʻi le faʻaogaina o pusa, e tatau ona tatou faʻaogaina se tasi o nei poloaiga:

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

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

Itu faʻamatalaga: afai e te faʻaogaina le -rm parakalafa pe a amataina se atigipusa, ona faʻagata ai lea, o le a faʻasaʻoloto uma avanoa vaʻaia na nofo ai.

Fa'aaogā ata tisiki

I ni nai tausaga ua mavae, o se ata o le tele o selau megabytes sa matua masani lava: o se ata Ubuntu e 600 megabytes le mamafa, ma se ata Microsoft .Net e tele gigabytes le mamafa. I na aso lalaga, o le la'uina mai na o le tasi le ata e mafai ona afaina tele ai lau avanoa tisiki avanoa, tusa lava pe e te fefa'asoaa'i tulaga i le va o ata. I aso nei - viia le sili - ata e sili atu le mamafa, ae e ui lava i lea, e mafai ona e vave faʻatumu punaoa o loʻo avanoa pe afai e te le faia ni puipuiga.

E tele ituaiga o ata e le o va'aia sa'o e le tagata fa'aaoga mulimuli:

  • ata vaeluaga, i luga o le faʻavae e aoina ai isi ata - e le mafai ona tapeina pe afai e te faʻaogaina pusa e faʻavae i luga o nei "isi" ata;
  • ata tautau o ata vaeluaga e le o fa'asinoina e so'o se koneteina o lo'o ta'avale - e mafai ona tapeina.
  • Faatasi ai ma le poloaiga lenei e mafai ona e siaki mo ata tautau i luga o lau masini:

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

E mafai ona e aveesea i latou i le auala lenei:

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

E mafai foʻi ona tatou faʻaogaina le 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

Afai tatou te manaʻo faʻafuaseʻi e tape uma ata (ae le naʻo le tautau) i le tasi poloaiga, ona mafai lea ona tatou faia lenei mea:

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

Fa'aoga tisiki i voluma

E fa'aogaina voluma e teu ai fa'amatalaga i fafo atu o le faila faila a le koneteina. Mo se faʻataʻitaʻiga, afai tatou te mananaʻo e faʻasaoina iʻuga o se talosaga ina ia faʻaaogaina i se isi auala. O se faʻataʻitaʻiga masani o faʻamaumauga.

Tatou fa'alauiloa se pusa MongoDB, fa'apipi'i se voluma i fafo i le koneteina, ma toe fa'afo'i se fa'amaumauga fa'amaumauga mai ai (o lo'o maua i le 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

O faʻamatalaga o le a tuʻuina i luga o le masini talimalo ile /var/lib/docker/volume directory. Ae aisea e le i ai i le tulaga faitau-tusi o le pusa? Talu ai i le Dockerfile o le MongoDB image, o le / data / db directory (lea e teu ai e MongoDB ana faʻamatalaga e ala i le faaletonu) ua faʻamatalaina o se voluma.

Fautuaga Docker: Faʻamama lau masini mai mea leaga

Fa'amatalaga itu: tele ata e tatau ona maua ai fa'amaumauga e fa'aaoga voluma e teu ai na fa'amaumauga.

A tatou taʻalo lava ma MongoDB ma taofi (pe atonu foi e tape) le atigipusa, o le a le tapeina le leo. O le a faʻaauau pea ona faʻaogaina la matou vaʻa vaʻaia seʻia oʻo ina matou tapeina manino i se poloaiga e pei o lenei:

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

Ia, pe mafai foi ona tatou faʻaogaina le faʻatonuga o le prune ua uma ona tatou masani ai:

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

Fa'aaogā le tisiki mo le fa'atupuina o ata

I le Docker 18.09, o le faʻagasologa o ata na faia ni suiga faʻafetai i le meafaigaluega BuildKit. O lenei mea e faʻateleina ai le saoasaoa o le faagasologa ma faʻamalosia le teuina o faʻamaumauga ma le pulega o le saogalemu. O iinei o le a tatou le mafaufau ai i auiliiliga uma o lenei meafaigaluega matagofie; o le a tatou taulai atu i le auala e foia ai mataupu o le faʻaogaina o avanoa avanoa.

Fa'apea o lo'o i ai sau talosaga Node.Js faigofie atoatoa:

  • o le index.js faila e amata se HTTP server faigofie e tali mai i se laina i talosaga taʻitasi e maua:
  • o le faila package.json o loʻo faʻamatalaina le faʻalagolago, e naʻo le expressjs e faʻaaogaina e faʻatautaia ai le HTTP server:

$ 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 le Dockerfile mo le fausiaina o le ata e pei o lenei:

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

Sei o tatou fausia le ata i le auala masani, e aunoa ma le faʻaaogaina BuildKit:

$ docker build -t app:1.0 .

Afai tatou te siakiina le faʻaogaina o le avanoa o le disk, e mafai ona tatou iloa e naʻo le ata pito i lalo (node:13-alpine) ma le ata e alu i ai (app:1.0) o loʻo faʻaogaina avanoa:

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

Sei o tatou fausia le lomiga lona lua o la tatou talosaga, faʻaaoga BuildKit. Ina ia faia lenei mea, e tatau ona tatou seti le DOCKER_BUILDKIT fesuiaiga i le 1:

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

Afai tatou te siaki nei le faʻaogaina o le tisiki, o le a tatou vaʻai o loʻo aʻafia nei le faufale (buid-cache) iina:

$ 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

Ina ia faʻamamaina, faʻaaoga le poloaiga lenei:

$ 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

Fa'amama uma!

O lea la, na matou vaʻavaʻai i le faʻamamaina o le avanoa o le disk o loʻo nofoia e pusa, ata ma voluma. E fesoasoani le subcommand prune ia i tatou i lenei mea. Ae e mafai foʻi ona faʻaaogaina i le tulaga o le docker system, ma o le a faʻamamaina mea uma e mafai:

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

Afai mo nisi mafuaʻaga o loʻo e faʻasaoina avanoa vaʻa i luga o lau masini Docker, ona faʻatinoina lea o lenei poloaiga i lea taimi ma lea taimi e tatau ona avea ma masani.

puna: www.habr.com

Faaopoopo i ai se faamatalaga