Docker Tips: ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ свою ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΎΡ‚ Ρ…Π»Π°ΠΌΠ°

Docker Tips: ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ свою ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΎΡ‚ Ρ…Π»Π°ΠΌΠ°

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€! ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΡˆΠ΅ΠΌΡƒ вниманию ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡΡ‚Π°Ρ‚ΡŒΠΈ "Docker Tips: Clean Up Your Local Machine" Π°Π²Ρ‚ΠΎΡ€Π° Luc Juggery.

БСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ дисковоС пространство хостовой ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ разбСрСмся Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это пространство ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΎΡˆΠΌΠ΅Ρ‚ΠΊΠΎΠ² Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².


Docker Tips: ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ свою ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΎΡ‚ Ρ…Π»Π°ΠΌΠ°

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

Docker – крутая ΡˆΡ‚ΡƒΠΊΠ°, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅ сСгодня ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ Π² этом сомнСваСтся. ВсСго нСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ этот ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ прСдоставил Π½Π°ΠΌ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ способ построСния, доставки ΠΈ запуска любого окруТСния, позволяя Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ рСсурсы процСссора ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому (Π° для ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°ΠΆΠ΅ самым Π²Π°ΠΆΠ½Ρ‹ΠΌ) Docker ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π½Π°ΠΌ нСвСроятно ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… срСд.

Однако, Π·Π° всС эти прСлСсти соврСмСнной ΠΆΠΈΠ·Π½ΠΈ приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. Когда ΠΌΡ‹ запускаСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, скачиваСм ΠΈΠ»ΠΈ создаСм собствСнныС ΠΎΠ±Ρ€Π°Π·Ρ‹, Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ слоТныС экосистСмы, Π½Π°ΠΌ приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. И ΠΏΠ»Π°Ρ‚ΠΈΠΌ ΠΌΡ‹, Π² Ρ‚ΠΎΠΌ числС, дисковым пространством.

Если Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈΡΡŒ ΠΎ Ρ‚ΠΎΠΌ, сколько ΠΆΠ΅ мСста Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ занято Π½Π° вашСй машинС Docker’ом, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ нСприятно ΡƒΠ΄ΠΈΠ²Π»Π΅Π½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ docker system df

Docker Tips: ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ свою ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΎΡ‚ Ρ…Π»Π°ΠΌΠ°

Π—Π΄Π΅ΡΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ использованиС диска 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! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5e7f8e5097ace9ef5518ebf0c6fc2062ff024efb495f11ccc89df21ec9b4dcc2

Total reclaimed space: 104.9MB

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ высвободили 104,9 ΠœΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Но Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ скачанный Ρ€Π°Π½Π΅Π΅ ΠΎΠ±Ρ€Π°Π·, Ρ‚ΠΎ ΠΎΠ½ Ρ‚ΠΎΠΆΠ΅ становится ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠΌ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ высвобоТдСниС Π½Π°ΡˆΠΈΡ… рСсурсов:

$ 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

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΎΠ±Ρ€Π°Π· ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π²Ρ‹ Π½Π΅ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ‚Ρ€ΡŽΠΊ.

Π‘ΡƒΠ±ΠΊΠΎΠΌΠ°Π½Π΄Π° 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 – нСсколько Π“ΠΈΠ³Π°Π±Π°ΠΉΡ‚. Π’ Ρ‚Π΅ Π»ΠΎΡ…ΠΌΠ°Ρ‚Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° скачиваниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΌΠΎΠ³Π»ΠΎ нанСсти большой ΡƒΡ€ΠΎΠ½ Π²Π°ΡˆΠ΅ΠΌΡƒ свободному мСсту Π½Π° дискС, Π΄Π°ΠΆΠ΅ Ссли Π²Ρ‹ Ρ€Π°ΡΡˆΠ°Ρ€ΠΈΠ²Π°Π»ΠΈ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ. БСгодня – Ρ…Π²Π°Π»Π° Π²Π΅Π»ΠΈΠΊΠΈΠΌ – ΠΎΠ±Ρ€Π°Π·Ρ‹ вСсят Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ мСньшС, Π½ΠΎ Π΄Π°ΠΆΠ΅ Π² этом случаС ΠΌΠΎΠΆΠ½ΠΎ быстро Π·Π°Π±ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ рСсурсы, Ссли Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ€ прСдостороТности.

Π•ΡΡ‚ΡŒ нСсколько Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ:

  • intermediate ΠΎΠ±Ρ€Π°Π·Ρ‹, Π½Π° основС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… собраны Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π² – ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π° Π±Π°Π·Π΅ этих самых Β«Π΄Ρ€ΡƒΠ³ΠΈΡ…Β» ΠΎΠ±Ρ€Π°Π·ΠΎΠ²;
  • dangling ΠΎΠ±Ρ€Π°Π·Ρ‹ – это Ρ‚Π°ΠΊΠΈΠ΅ intermediate ΠΎΠ±Ρ€Π°Π·Ρ‹, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ссылаСтся Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² – ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹.
  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² вашСй систСмС dangling ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:

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

Если ΠΌΡ‹ Π²Π΄Ρ€ΡƒΠ³ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ всС ΠΎΠ±Ρ€Π°Π·Ρ‹ (Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ dangling) ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

$ 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 Tips: ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ свою ΠΌΠ°ΡˆΠΈΠ½Ρƒ ΠΎΡ‚ Ρ…Π»Π°ΠΌΠ°

Π—Π°ΠΌΠ΅Ρ‚ΠΊΠΈ Π½Π° полях: ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠΌΠ° (volumes) для сохранСния этих самых Π΄Π°Π½Π½Ρ‹Ρ….

Когда ΠΌΡ‹ наиграСмся с MongoDB ΠΈ остановим (Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ ΠΈ ΡƒΠ΄Π°Π»ΠΈΠΌ) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Ρ‚ΠΎΠΌ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½. Он ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ нашС Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½ΠΎΠ΅ дисковоС пространство Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΌΡ‹ явно Π½Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

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

Ну ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡƒΡŽ Π½Π°ΠΌ субкоманду prune:

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

ИспользованиС диска для кэша сборки ΠΎΠ±Ρ€Π°Π·ΠΎΠ²

Π’ 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):

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

Π”Π°Π²Π°ΠΉΡ‚Π΅ собСрСм Π²Ρ‚ΠΎΡ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ нашСго прилоТСния, ΡƒΠΆΠ΅ с использованиСм BuildKit. Для этого Π½Π°ΠΌ лишь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ DOCKER_BUILDKIT Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1:

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

Если ΠΌΡ‹ сСйчас ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ использованиС диска, Ρ‚ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π°ΠΌ участвуСт кэш сборки (buid-cache):

$ 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

Для Π΅Π³ΠΎ очистки Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ 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

ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ всС!

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ рассмотрСли очистку дискового пространства, занятого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ ΠΈ Ρ‚ΠΎΠΌΠ°ΠΌΠΈ. Π’ этом Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ субкоманда prune. Но Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π½Π° систСмном ΡƒΡ€ΠΎΠ²Π½Π΅ docker, ΠΈ ΠΎΠ½Π° очистит всС, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ смоТСт:

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

Если Π²Ρ‹ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ экономитС дисковоС пространство Π½Π° машинС с Docker, Ρ‚ΠΎ пСриодичСский запуск этой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ стоит ввСсти Π² ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΡƒ.

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