Docker Π‘ΡŠΠ²Π΅Ρ‚ΠΈ: ΠŸΠΎΡ‡ΠΈΡΡ‚Π΅Ρ‚Π΅ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° си ΠΎΡ‚ Π±ΠΎΠΊΠ»ΡƒΠΊΠ°

Docker Π‘ΡŠΠ²Π΅Ρ‚ΠΈ: ΠŸΠΎΡ‡ΠΈΡΡ‚Π΅Ρ‚Π΅ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° си ΠΎΡ‚ Π±ΠΎΠΊΠ»ΡƒΠΊΠ°

Π—Π΄Ρ€Π°Π²Π΅ΠΉ, Π₯Π°Π±ΡŠΡ€! ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡΠΌ Π²ΠΈ ΠΏΡ€Π΅Π²ΠΎΠ΄ Π½Π° статия "Docker ΡΡŠΠ²Π΅Ρ‚ΠΈ: ΠŸΠΎΡ‡ΠΈΡΡ‚Π΅Ρ‚Π΅ Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° си машина" Π°Π²Ρ‚ΠΎΡ€ Π›ΡŽΠΊ Π”ΠΆΡŠΠ³ΡŠΡ€ΠΈ.

ДнСс Ρ‰Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° дисковото пространство Π½Π° хост ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄Π° освободим Ρ‚ΠΎΠ²Π° пространство ΠΎΡ‚ ΠΎΡΡ‚Π°Ρ‚ΡŠΡ†ΠΈ ΠΎΡ‚ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.


Docker Π‘ΡŠΠ²Π΅Ρ‚ΠΈ: ΠŸΠΎΡ‡ΠΈΡΡ‚Π΅Ρ‚Π΅ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° си ΠΎΡ‚ Π±ΠΎΠΊΠ»ΡƒΠΊΠ°

ΠžΠ±Ρ‰ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅

Docker Π΅ страхотно Π½Π΅Ρ‰ΠΎ, вСроятно ΠΌΠ°Π»ΠΊΠΎ Ρ…ΠΎΡ€Π° Π²Π΅Ρ‡Π΅ сС ΡΡŠΠΌΠ½ΡΠ²Π°Ρ‚ Π² Ρ‚ΠΎΠ²Π°. Π‘Π°ΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΈ няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ Π½ΠΈ прСдостави напълно Π½ΠΎΠ² Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅, доставка ΠΈ стартиранС Π½Π° всяка срСда, позволявайки Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° икономия Π½Π° процСсорни рСсурси ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚. Π’ допълнСниС Π½Π° Ρ‚ΠΎΠ²Π° (Π° Π·Π° някои Π΄ΠΎΡ€ΠΈ Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ) Docker ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° опростим ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°ΠΌΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ТизнСния Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ срСди.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° всички Ρ‚Π΅Π·ΠΈ прСдимства Π½Π° ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈΡ ΠΆΠΈΠ²ΠΎΡ‚, трябва Π΄Π° ΠΏΠ»Π°Ρ‰Π°ΠΌΠ΅. ΠšΠΎΠ³Π°Ρ‚ΠΎ стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, свалямС ΠΈΠ»ΠΈ създавамС собствСни ΠΎΠ±Ρ€Π°Π·ΠΈ, Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°ΠΌΠ΅ слоТни СкосистСми, трябва Π΄Π° ΠΏΠ»Π°Ρ‰Π°ΠΌΠ΅. И ΠΏΠ»Π°Ρ‰Π°ΠΌΠ΅, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ с дисково пространство.

Ако Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ стС сС замисляли ΠΊΠΎΠ»ΠΊΠΎ пространство Ρ€Π΅Π°Π»Π½ΠΎ Π΅ Π·Π°Π΅Ρ‚ΠΎ Π½Π° Π²Π°ΡˆΠ°Ρ‚Π° машина ΠΎΡ‚ Docker, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π±ΡŠΠ΄Π΅Ρ‚Π΅ нСприятно ΠΈΠ·Π½Π΅Π½Π°Π΄Π°Π½ΠΈ ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ docker system df

Docker Π‘ΡŠΠ²Π΅Ρ‚ΠΈ: ΠŸΠΎΡ‡ΠΈΡΡ‚Π΅Ρ‚Π΅ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° си ΠΎΡ‚ Π±ΠΎΠΊΠ»ΡƒΠΊΠ°

Π’ΡƒΠΊ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° диска ΠΎΡ‚ Docker Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ аспСкти:

  • ΠΎΠ±Ρ€Π°Π·ΠΈ (images) – общия Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ са свалСни ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ построСни във Π²Π°ΡˆΠ°Ρ‚Π° систСма;
  • ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ (containers) – общия ΠΎΠ±Π΅ΠΌ дисково пространство, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ ΠΎΡ‚ стартиранитС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ (става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° общия ΠΎΠ±Π΅ΠΌ Π½Π° слоСвСтС Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис Π½Π° всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ);
  • Π»ΠΎΠΊΠ°Π»Π½ΠΈ Ρ‚ΠΎΠΌΠ° (local volumes) – ΠΎΠ±Π΅ΠΌΠ° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ‚Π΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½ΠΈ към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅;
  • кСш Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ (build cache) – Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ процСса Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ (ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° инструмСнта BuildKit, Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ Docker вСрсия 18.09).

Π“ΠΎΡ‚ΠΎΠ² съм Π΄Π° сС ΡΡŠΡΡ‚Π΅Π·Π°Π²Π°ΠΌ, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ слСд Ρ‚ΠΎΠ²Π° просто изброяванС Π²ΠΈΠ΅ Π³ΠΎΡ€ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Π΄Π° почиститС диска ΠΎΡ‚ Π±ΠΎΠΊΠ»ΡƒΠΊΠ° ΠΈ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ Ρ†Π΅Π½Π½ΠΈΡ‚Π΅ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ (Π±Π΅Π»Π΅ΠΆΠΊΠ°: особСно, Π°ΠΊΠΎ ΠΏΠ»Π°Ρ‰Π°Ρ‚Π΅ мСсСчСн Π½Π°Π΅ΠΌ Π·Π° Ρ‚Π΅Π·ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΈ).

ИзползванС Π½Π° диска ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ

ВсСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° хост ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π°, Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /var/lib/docker сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ няколко Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, срСд ΠΊΠΎΠΈΡ‚ΠΎ са Π²Π°ΠΆΠ½ΠΈ слСднитС:

  • ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ /var/lib/docker/containers/ID_ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° – ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° стандартния Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΡƒΠΊ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ‚Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ‚ΠΈΡΡ‚Π° Π² JSON Ρ„ΠΎΡ€ΠΌΠ°Ρ‚. ΠŸΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΈΡ‚Π΅ ΠΆΡƒΡ€Π½Π°Π»ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Ρ‚Π΅Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈΠΊΠΎΠΉ Π½Π΅ Ρ‡Π΅Ρ‚Π΅ ΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΠΎ Π΄Ρ€ΡƒΠ³ Π½Π°Ρ‡ΠΈΠ½, чСсто причиняват ΠΏΡ€Π΅Π»ΠΈΠ²Π°Π½Π΅ Π½Π° дисковото пространство.
  • ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ /var/lib/docker/overlay2 – ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° слоСвС Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ (overlay2 – прСдпочитаният Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ Π² ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ дистрибуции Π½Π° Linux). Ако ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄Π°Π½Π½ΠΈ Π² собствСната си Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма, Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚ΡƒΠΊ Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ.

НСка си прСдставим систСма, Π½Π° която Π΅ инсталиран дСвствСно чист Docker, ΠΊΠΎΠΉΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π·Π° стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈΠ»ΠΈ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ. ΠžΡ‚Ρ‡Π΅Ρ‚ΡŠΡ‚ ΠΌΡƒ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° дисково пространство Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

$ 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

НСка стартирамС някой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, NGINX:

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

Какво сС случва с диска:

  • ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ (images) Π·Π°Π΅ΠΌΠ°Ρ‚ 126 Мб, Ρ‚ΠΎΠ²Π° Π΅ ΡΡŠΡ‰ΠΈΡΡ‚ NGINX, ΠΊΠΎΠΉΡ‚ΠΎ стартирахмС Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°;
  • ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ (containers) Π·Π°Π΅ΠΌΠ°Ρ‚ ΡΠΌΠ΅ΡˆΠ½ΠΈΡ‚Π΅ 2 Π±Π°ΠΉΡ‚Π°.

$ 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

Бъдя ΠΏΠΎ ΠΈΠ·Ρ…ΠΎΠ΄Π°, нямамС пространство, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° освободим. Въй ΠΊΠ°Ρ‚ΠΎ 2 Π±Π°ΠΉΡ‚Π° са напълно Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ, Π½Π΅ΠΊΠ° си прСдставим, Ρ‡Π΅ Π½Π°ΡˆΠΈΡΡ‚ NGINX ΠΏΠΎ Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌ Π½Π°Ρ‡ΠΈΠ½ Π΅ записал 100 ΠœΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° Π΄Π°Π½Π½ΠΈ ΠΈ Π΅ създал Ρ„Π°ΠΉΠ» test.img Ρ‚ΠΎΡ‡Π½ΠΎ с Ρ‚Π°ΠΊΡŠΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€.

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

Π‘Π½ΠΎΠ²Π° изслСдвамС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° дисково пространство Π½Π° хоста. Π©Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ (containers) Π·Π°Π΅ΠΌΠ° 100 ΠœΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°.

$ 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

Мисля, Ρ‡Π΅ Π²Π°ΡˆΠΈΡΡ‚ Π»ΡŽΠ±ΠΎΠΏΠΈΡ‚Π΅Π½ ΡƒΠΌ Π²Π΅Ρ‡Π΅ сС ΠΏΠΈΡ‚Π°, къдС Π»ΠΈ Π΅ Π½Π°ΡˆΠΈΡΡ‚ Ρ„Π°ΠΉΠ» test.img. НСка Π³ΠΎ ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΠΌ:

$ 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

НС Π²Π΄Π°Π²Π°ΠΉΠΊΠΈ сС Π² подробности, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈΠΌ, Ρ‡Π΅ Ρ„Π°ΠΉΠ»ΡŠΡ‚ test.img Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅-запис, управлявано ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° overlay2. Ако спрСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ…ΠΎΡΡ‚ΡŠΡ‚ Ρ‰Π΅ Π½ΠΈ подскаТС, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° място ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС освободСно.

# 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

Как ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°? Π§Ρ€Π΅Π· ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ почистванС Π½Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΎΡ‚ΠΎ пространство Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅-запис.

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅Ρ‚Π΅ всички инсталирани ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ навСднъТ ΠΈ Π΄Π° почиститС диска си ΠΎΡ‚ всички Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, създадСни ΠΎΡ‚ тях Π½Π° Π½ΠΈΠ²ΠΎΡ‚ΠΎ Π½Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅-запис:

$ docker container prune
WARNING! Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ всички спряни ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ.
Π‘ΠΈΠ³ΡƒΡ€Π½ΠΈ Π»ΠΈ стС, Ρ‡Π΅ искатС Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅? [y/N] y
Π˜Π·Ρ‚Ρ€ΠΈΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ:
5e7f8e5097ace9ef5518ebf0c6fc2062ff024efb495f11ccc89df21ec9b4dcc2

ΠžΠ±Ρ‰ΠΎ освободСно пространство: 104.9MB

И Ρ‚Π°ΠΊΠ°, освободихмС 104.9 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° Ρ‡Ρ€Π΅Π· ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Но Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²Π΅Ρ‡Π΅ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ изтСглСния ΠΎΠ±Ρ€Π°Π·, Ρ‚ΠΎΠΉ ΡΡŠΡ‰ΠΎ става ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π·Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ ΠΈ освобоТдаванС Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ рСсурси:

$ docker system df
ВИП           ΠžΠ‘Π©Πž      ΠΠšΠ’Π˜Π’Π•Π     Π ΠΠ—ΠœΠ•Π        ΠžΠ‘Π’ΠžΠ‘ΠžΠ”Π˜ΠœΠž
ΠžΠ±Ρ€Π°Π·ΠΈ         1          0          126M       126M (100%)
ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ     0          0          0B         0B
Π›ΠΎΠΊΠ°Π»Π½ΠΈ ΠΎΠ±Π΅ΠΌΠΈ  0          0          0B         0B
КСша Π½Π° Π΅Ρ‚Π°ΠΏΠ°  0          0          0B         0B

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, няма Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Ρ‚ΠΎΠ·ΠΈ Ρ‚Ρ€ΠΈΠΊ.

Π‘ΡƒΠ±ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° prune, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΏΠΎ-Π³ΠΎΡ€Π΅, Π΄Π°Π²Π° Π΅Ρ„Π΅ΠΊΡ‚ само Π½Π° спрСни ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Ако искамС Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ Π½Π΅ само спрСни, Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, трябва Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄Π½Π° ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ:

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

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

Π‘Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚Π°: Π°ΠΊΠΎ ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° β€”rm, ΠΏΡ€ΠΈ спиранСто ΠΌΡƒ Ρ‰Π΅ бъдС освободСно всичкото дисково пространство, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ Π·Π°Π΅ΠΌΠ°Π».

ИзползванС Π½Π° диска ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΈ

ΠŸΡ€Π΅Π΄ΠΈ няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ няколко стотици ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° бСшС напълно Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½: ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Ubuntu Ρ‚Π΅ΠΆΠ΅ΡˆΠ΅ 600 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π°, Π° ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ Π½Π° Microsoft .Net – няколко Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°. Π’ Ρ‚Π΅Π·ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π° изтСглянСто Π½Π° само Π΅Π΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π· моТСшС Π΄Π° нанСсС сСриозСн ΡƒΠ΄Π°Ρ€ Π½Π° свободното Π²ΠΈ място Π½Π° диска, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ сподСлятС Π½ΠΈΠ²Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅. ДнСс – слава Π½Π° Π²Π΅Π»ΠΈΠΊΠΈΡ‚Π΅ – ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅ Ρ‚Π΅ΠΆΠ°Ρ‚ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, Π½ΠΎ Π΄ΠΎΡ€ΠΈ ΠΈ Π² Ρ‚ΠΎΠ·ΠΈ случай ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π΄Π° Π·Π°ΠΏΡŠΠ»Π½ΠΈΡ‚Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ рСсурси, Π°ΠΊΠΎ Π½Π΅ Π²Π·Π΅ΠΌΠ΅Ρ‚Π΅ някои ΠΌΠ΅Ρ€ΠΊΠΈ Π·Π° прСдпазливост.

Има няколко Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ€Π°Π·ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° крайния ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»:

  • Π˜Π½Ρ‚Π΅Ρ€ΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ, Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ са ΡΡŠΠ±Ρ€Π°Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ, Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΡΡŠΡ‰ΠΈΡ‚Π΅ "Π΄Ρ€ΡƒΠ³ΠΈ" ΠΎΠ±Ρ€Π°Π·ΠΈ;
  • ΠžΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ – Ρ‚ΠΎΠ²Π° са ΠΈΠ½Ρ‚Π΅Ρ€ΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π° Π½ΠΈΡ‚ΠΎ Π΅Π΄ΠΈΠ½ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ – Ρ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ Π² систСмата си:

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

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅Ρ‚Π΅ ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

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

МоТСм Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° prune:

$ docker image prune
WARNING! Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ всички ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ.
Π‘ΠΈΠ³ΡƒΡ€Π½ΠΈ Π»ΠΈ стС, Ρ‡Π΅ искатС Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅? [y/N] y
Π˜Π·Ρ‚Ρ€ΠΈΡ‚ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ:
ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cda
ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5cc
ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347
ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197
ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚: sha256:5945bb6e12888cf320828e0fd00728947104da82e3eb4452f

ΠžΠ±Ρ‰ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½ΠΎ пространство: 12.9kB

Ако случайно искамС Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ всички ΠΎΠ±Ρ€Π°Π·ΠΈ (Π° Π½Π΅ само ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΈΡ‚Π΅) с Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΠ°:

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

ИзползванС Π½Π° диск Π·Π° Ρ‚ΠΎΠΌΠΎΠ²Π΅

Π’ΠΎΠΌΠΎΠ²Π΅Ρ‚Π΅ (volumes) сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ извън Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. НапримСр, Π°ΠΊΠΎ искамС Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-късно. ЧСст ΠΏΡ€ΠΈΠΌΠ΅Ρ€ са Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

НСка стартирамС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ MongoDB, Π΄Π° ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ към Π½Π΅Π³ΠΎ външСн Ρ‚ΠΎΠΌ, ΠΈ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌ ΠΎΡ‚ Π½Π΅Π³ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎ ΠΊΠΎΠΏΠΈΠ΅ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π΄Π°Π½Π½ΠΈ (Π½Π° нас Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π² Ρ„Π°ΠΉΠ»Π° 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

Π”Π°Π½Π½ΠΈΡ‚Π΅ Ρ‰Π΅ сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Π½Π° хост ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /var/lib/docker/volumes. Но Π·Π°Ρ‰ΠΎ Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅-запис Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°? Π—Π°Ρ‰ΠΎΡ‚ΠΎ Π² Dockerfile Π½Π° ΠΎΠ±Ρ€Π°Π·Π° MongoDB ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΡŠΡ‚ /data/db (Π² ΠΊΠΎΠΉΡ‚ΠΎ MongoDB ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ си) Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΌ (volume).

Docker Π‘ΡŠΠ²Π΅Ρ‚ΠΈ: ΠŸΠΎΡ‡ΠΈΡΡ‚Π΅Ρ‚Π΅ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° си ΠΎΡ‚ Π±ΠΎΠΊΠ»ΡƒΠΊΠ°

Π‘Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π° ΠΏΠΎΠ»Π΅Ρ‚ΠΎ: ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΈ, Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС ΡΡŠΠ·Π΄Π°Π΄Π°Ρ‚ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚ΠΎΠΌΠΎΠ²Π΅ (volumes) Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ.

ΠšΠΎΠ³Π°Ρ‚ΠΎ сС Π½Π°ΠΈΠ³Ρ€Π°Π΅ΠΌ с MongoDB ΠΈ спрСм (ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚ΠΎΠΌΡŠΡ‚ няма Π΄Π° бъдС ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚. Π’ΠΎΠΉ Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Π·Π°Π΅ΠΌΠ° Π½Π°ΡˆΠ΅Ρ‚ΠΎ Ρ†Π΅Π½Π½ΠΎ дисково пространство, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π³ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΠ΅ΠΌ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ с Ρ‚Π°ΠΊΠ°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:

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

Или ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ·Π½Π°Ρ‚Π°Ρ‚Π° Π½ΠΈ ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π° prune:

$ docker volume prune
WARNING! Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ всички Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΎΠ±Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.
Π‘ΠΈΠ³ΡƒΡ€Π½ΠΈ Π»ΠΈ стС, Ρ‡Π΅ искатС Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅? [y/N] y
Π˜Π·Ρ‚Ρ€ΠΈΡ‚ΠΈ ΠΎΠ±Π΅ΠΌΠΈ:
d50b6402eb75d09ec17a5f57df4ed7b520c448429f70725fc5707334e5ded4d5
8f7a16e1cf117cdfddb6a38d1f4f02b18d21a485b49037e2670753fa34d115fc
599c3dd48d529b2e105eec38537cd16dac1ae6f899a123e2a62ffac6168b2f5f
...
732e610e435c24f6acae827cd340a60ce4132387cfc512452994bc0728dd66df
9a3f39cc8bd0f9ce54dea3421193f752bda4b8846841b6d36f8ee24358a85bae
045a9b534259ec6c0318cb162b7b4fca75b553d4e86fc93faafd0e7c77c79799
c6283fe9f8d2ca105d30ecaad31868410e809aba0909b3e60d68a26e92a094da

ΠžΠ±Ρ‰ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½ΠΎ пространство: 25.82GB
luc@saturn:~$

ИзползванС Π½Π° дисково пространство Π·Π° кСша Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ

Π’ Docker 18.09 ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° създаванС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΏΡ€Π΅Ρ‚ΡŠΡ€ΠΏΡ някои ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° инструмСнта BuildKit. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ инструмСнт сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° скоростта Π½Π° процСса, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π° сС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΈ сигурността. Π’ΡƒΠΊ няма Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ всички Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡ‚Π΅Π»Π΅Π½ инструмСнт, Ρ‰Π΅ сС спрСм само Π½Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Ρ‚ΠΎΠΉ засяга Π²ΡŠΠΏΡ€ΠΎΡΠΈΡ‚Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° дисковото пространство.

НСка ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ просто ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Node.Js:

  • Ρ„Π°ΠΉΠ» index.js стартира прост HTTP ΡΡŠΡ€Π²ΡŠΡ€, ΠΊΠΎΠΉΡ‚ΠΎ отговаря с тСкст Π½Π° всяко ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅:
  • Ρ„Π°ΠΉΠ» package.json опрСдСля зависимоститС, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само expressjs Π·Π° стартиранС Π½Π° 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 Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

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

НСка ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·Π° ΠΏΠΎ обикновСния Π½Π°Ρ‡ΠΈΠ½, Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° BuildKit:

$ docker build -t app:1.0 .

Ако ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° дисковото пространство, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ мястото Π·Π°Π΅ΠΌΠ°Π½ΠΎ само ΠΎΡ‚ базовия ΠΎΠ±Ρ€Π°Π· (node:13-alpine) ΠΈ крайния ΠΎΠ±Ρ€Π°Π· (app:1.0):

ВИП           ΠžΠ‘Π©Πž      ΠΠšΠ’Π˜Π’ΠΠž     Π ΠΠ—ΠœΠ•Π        ΠŸΠžΠ”Π›ΠžΠ–Π˜ΠœΠž ЗА Π’ΠͺΠ—Π‘Π’ΠΠΠžΠ’Π―Π’ΠΠΠ•
ΠžΠ±Ρ€Π°Π·ΠΈ       2          0          109.3MB    109.3MB (100%)
ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ     0          0          0B         0B
Π›ΠΎΠΊΠ°Π»Π½ΠΈ ΠΎΠ±Π΅ΠΌΠΈ  0          0          0B         0B
КСш Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ 0          0          0B         0B

НСка ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌ Π²Ρ‚ΠΎΡ€Π° вСрсия Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Π΅Ρ‡Π΅ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° BuildKit. Π—Π° Ρ†Π΅Π»Ρ‚Π° Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ само Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° DOCKER_BUILDKIT Π½Π° 1:

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

Ако сСга ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ дисковото ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Π΅ сСга участва кСша Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ (build-cache):

$ docker system df
ВИП           ΠžΠ‘Π©Πž      ΠΠšΠ’Π˜Π’ΠΠ˜     Π ΠΠ—ΠœΠ•Π       Π’ΠͺΠ—Π‘Π’ΠΠΠžΠ’Π˜Πœ
ΠžΠ±Ρ€Π°Π·ΠΈ       2          0          109.3MB    109.3MB (100%)
ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ    0          0          0B         0B
Π›ΠΎΠΊΠ°Π»Π½ΠΈ Ρ‚ΠΎΠΌΠΎΠ²Π΅ 0          0          0B         0B
КСш на билдовС 11         0          8.949kB    8.949kB

Π—Π° Π΄Π° Π³ΠΎ изчистим, Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ слСдната ΠΊΠΎΠΌΠ°Π½Π΄Π°:

$ docker builder prune
Π’ΠΠ˜ΠœΠΠΠ˜Π•! Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅ всички висящи кСшовС Π½Π° Π±ΠΈΠ»Π΄ΠΎΠ²Π΅.
Π‘ΠΈΠ³ΡƒΡ€Π½ΠΈ Π»ΠΈ стС, Ρ‡Π΅ искатС Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅? [y/N] y
Π˜Π·Ρ‚Π΅Π³Π»Π΅Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° кСша Π½Π° Π±ΠΈΠ»Π΄ΠΎΠ²Π΅:
rffq7b06h9t09xe584rn4f91e
ztexgsz949ci8mx8p5tzgdzhe
3z9jeoqbbmj3eftltawvkiayi

ΠžΠ±Ρ‰ΠΎ Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²Π΅Π½ΠΎ пространство: 8.949kB

Π˜Π·Ρ‡ΠΈΡΡ‚ΠΈ всичко!

И Ρ‚Π°ΠΊΠ°, Ρ€Π°Π·Π³Π»Π΅Π΄Π°Ρ…ΠΌΠ΅ почистванСто Π½Π° дисковото пространство, Π·Π°Π΅Ρ‚ΠΎ ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΈ Ρ‚ΠΎΠΌΠΎΠ²Π΅. Π’ Ρ‚ΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π° ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° prune. Но тя ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π½Π° систСмно Π½ΠΈΠ²ΠΎ docker ΠΈ Ρ‰Π΅ изчисти всичко, ΠΊΠΎΠ΅Ρ‚ΠΎ само ΠΌΠΎΠΆΠ΅:

$ docker system prune
Π’ΠΠ˜ΠœΠΠΠ˜Π•! Π’ΠΎΠ²Π° Ρ‰Π΅ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅:
  - всички спрСни ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ
  - всички ΠΌΡ€Π΅ΠΆΠΈ, Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
  - всички висящи ΠΎΠ±Ρ€Π°Π·ΠΈ
  - всички висящи кСшовС Π½Π° Π±ΠΈΠ»Π΄ΠΎΠ²Π΅

Π‘ΠΈΠ³ΡƒΡ€Π½ΠΈ Π»ΠΈ стС, Ρ‡Π΅ искатС Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ‚Π΅? [y/N]

Ако ΠΏΠΎ някаква ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° спСстяватС дисково пространство Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° с Docker, пСриодичният запуск Π½Π° Ρ‚Π°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π½Π°Π²ΠΈΠΊ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster