Docker Tips: เบฅเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

Docker Tips: เบฅเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

Hey Habr! เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เป„เบ”เป‰โ€‹ "เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ Docker: เป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปƒเบ™เบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™" เบœเบนเป‰เบ‚เบฝเบ™ Luc Juggery.

เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆ Docker เปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เป‚เบฎเบ”, เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบˆเบฐเบ„เบดเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ›เบปเบ”เบ›เปˆเบญเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ™เบตเป‰เบˆเบฒเบเบเบฒเบ™เบ‚เบนเบ”เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰.


Docker Tips: เบฅเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ—เบฑเบ‡เปเบปเบ”

Docker เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบขเบฑเบ™, เบšเบฒเบ‡เบ„เบปเบ™เบญเบฒเบ”เบˆเบฐเบชเบปเบ‡เปƒเบชเบงเปˆเบฒเบกเบฑเบ™เปƒเบ™เบกเบทเป‰เบ™เบตเป‰. เบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบชเบฒเบกเบ›เบตเบเปˆเบญเบ™, เบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบ™เบตเป‰เป„เบ”เป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบงเบดเบ—เบตเบเบฒเบ™เปƒเบซเบกเปˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบชเบปเปˆเบ‡เปเบฅเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเปƒเบ”เบเปเปˆเบ•เบฒเบก, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบซเบเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ CPU เปเบฅเบฐ RAM เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเบ™เบตเป‰ (เปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เบญเบฑเบ™เบ™เบตเป‰เบˆเบฐเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”) Docker เป„เบ”เป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‡เปˆเบฒเบเบ”เบฒเบเบขเปˆเบฒเบ‡เบšเปเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเปเบฅเบฐเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™เบŠเบตเบงเบดเบ”เบ‚เบญเบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ.

เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ„เบงเบฒเบกเบชเบธเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบŠเบตเบงเบดเบ”เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบกเบฒเปƒเบ™เบฅเบฒเบ„เบฒ. เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบšเบฑเบ™เบˆเบธ, เบ”เบฒเบงเป‚เบซเบฅเบ”เบซเบผเบทเบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบ™เบดเป€เบงเบ”เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบˆเปˆเบฒเบ. เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเบˆเปˆเบฒเบเบ„เปˆเบฒ, เปƒเบ™เบšเบฑเบ™เบ”เบฒเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†, เบ”เป‰เบงเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบ„เบตเบเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบžเบทเป‰เบ™เบ—เบตเปˆ Docker เบ•เบปเบงเบˆเบดเบ‡เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เบปเบเบ•เบฐเบฅเบถเบ‡เบขเปˆเบฒเบ‡เบšเปเปˆเบžเปเปƒเบˆเบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰:

$ docker system df

Docker Tips: เบฅเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

เบ™เบตเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบœเปˆเบ™เบ‚เบญเบ‡ Docker เปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™:

  • เบฎเบนเบšโ€‹เบžเบฒเบš โ€“ เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ‚เบญเบ‡โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ”เบฒเบงโ€‹เป‚เบซเบผเบ”โ€‹เบˆเบฒเบ repositories เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹;
  • containers โ€“ เบˆเบณเบ™เบงเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบชเบเปŒเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเปƒเบŠเป‰เป‚เบ”เบเบเบฒเบ™เปเบฅเปˆเบ™เบžเบฒเบŠเบฐเบ™เบฐเบšเบฑเบ™เบˆเบธ (เปเบฒเบเป€เบ–เบดเบ‡เบ›เบฐเบฅเบดเบกเบฒเบ™เบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เบŠเบฑเป‰เบ™เบญเปˆเบฒเบ™-เบ‚เบฝเบ™เบ‚เบญเบ‡เบšเบฑเบ™เบˆเบธเบ—เบฑเบ‡เปเบปเบ”);
  • เบ›เบฐโ€‹เบฅเบดโ€‹เบกเบฒเบ™โ€‹เบ—เป‰เบญเบ‡โ€‹เบ–เบดเปˆเบ™ โ€“ เบ›เบฐโ€‹เบฅเบดโ€‹เบกเบฒเบ™โ€‹เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบ—เป‰เบญเบ‡โ€‹เบ–เบดเปˆเบ™โ€‹เบ•เบดเบ”โ€‹เบเบฑเบšโ€‹เบžเบฒโ€‹เบŠเบฐโ€‹เบ™เบฐโ€‹;
  • build cache โ€“ เป„เบŸเบฅเปŒเบŠเบปเปˆเบงเบ„เบฒเบงเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบฎเบนเบšเบžเบฒเบš (เป€เบกเบทเปˆเบญเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท BuildKit, เบกเบตเบ•เบฑเป‰เบ‡เปเบ•เปˆ Docker เป€เบงเบตเบŠเบฑเปˆเบ™ 18.09).

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบงเบฒเบ‡เป€เบ”เบตเบกเบžเบฑเบ™เบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบญเบ™เป€เบ‡เบดเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบเบฐเบ•เบทเบฅเบทเบฅเบปเป‰เบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เปเบœเปˆเบ™เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบ™เปเบฒเป€เบญเบปเบฒ gigabytes เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบŠเบตเบงเบดเบ” (เบซเบกเบฒเบเป€เบซเบ”: เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบˆเปˆเบฒเบเบ„เปˆเบฒเป€เบŠเบปเปˆเบฒ gigabytes เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ—เบธเบเป†เป€เบ”เบทเบญเบ™).

เบเบฒเบ™เปƒเบŠเป‰เปเบœเปˆเบ™เป‚เบ”เบเบšเบฑเบ™เบˆเบธ

เบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡ container เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เป‚เบฎเบ”, เบซเบผเบฒเบเป†เป„เบŸเบฅเปŒเปเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต /var/lib/docker, เปƒเบ™เบšเบฑเบ™เบ”เบฒเบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบชเบปเบกเบ„เบงเบ™:

  • Directory /var/lib/docker/containers/container_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

เบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบเบฑเบšเปเบœเปˆเบ™:

  • เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ„เบญเบšเบ„เบญเบ‡ 126 MB, เบ™เบตเป‰เปเบกเปˆเบ™ NGINX เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เบ–เบฑเบ‡;
  • containers เปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ–เบดเบ‡ 2 bytes rides.

$ 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 bytes เปเบกเปˆเบ™ frivolous เบซเบกเบปเบ”, เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™เบงเปˆเบฒ NGINX เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เป„เบ”เป‰เบ‚เบฝเบ™เบšเบฒเบ‡เบšเปˆเบญเบ™ 100 Megabytes เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ test.img เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡.

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

เบกเบฒเบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบชเบเปŒเบขเบนเปˆเปƒเบ™เป‚เบฎเบชเบญเบตเบเบ„เบฑเป‰เบ‡. เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒ container (containers) เบ„เบญเบšเบ„เบญเบ‡ 100 Megabytes เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

$ 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 driver. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบขเบธเบ”เบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เป€เบˆเบปเป‰เบฒเบžเบฒเบšเบˆเบฐเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบ™เบตเป‰เบชเบฒเบกเบฒเบ”, เบ•เบฒเบกเบซเบผเบฑเบเบเบฒเบ™, เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบปเบ”เบ›เปˆเบญเบ:

# 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

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เป„เบ”เป‰เปเบ™เบงเปƒเบ”? เป‚เบ”เบเบเบฒเบ™เบฅเบถเบšเบ•เบนเป‰เบ„เบญเบ™เป€เบ—เบ™เป€เบ™เบต, เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบตเบเบฒเบ™เบฅเบถเบšเบฅเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบ”เบฑเบšเบญเปˆเบฒเบ™-เบ‚เบฝเบ™.

เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบžเบฒเบŠเบฐเบ™เบฐเบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบญเบญเบเปƒเบ™เบซเบ™เบถเปˆเบ‡ swoop เปเบฅเบฐเบฅเป‰เบฒเบ‡เปเบœเปˆเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบญเปˆเบฒเบ™เบ‚เบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบชเป‰เบฒเบ‡เป‚เบ”เบเบžเบงเบเบกเบฑเบ™:

$ 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 Megabytes เป‚เบ”เบเบเบฒเบ™เบฅเบถเบšเบ–เบฑเบ‡. เปเบ•เปˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ”เบฒเบงเป‚เบซเบฅเบ”เบกเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบกเบฑเบ™เบเบฑเบ‡เบเบฒเบเป€เบ›เบฑเบ™เบ•เบปเบงเบชเบฐเบซเบกเบฑเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบถเบšเปเบฅเบฐเบ›เปˆเบญเบเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

$ 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 เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบเบฑเบšเบžเบฒเบŠเบฐเบ™เบฐเบ—เบตเปˆเบขเบธเบ”เป€เบŠเบปเบฒ. เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบถเบšเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบขเบธเบ”เปเบ•เปˆเบเบฑเบ‡เปเบฅเปˆเบ™ containers, เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰:

# Historical command
$ docker rm -f $(docker ps โ€“aq)

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

เบซเบกเบฒเบเป€เบซเบ”เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡: เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -rm เป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบšเบฑเบ™เบˆเบธ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบกเบฑเบ™เบขเบธเบ”, เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบกเบฑเบ™เบ„เบญเบšเบ„เบญเบ‡เบˆเบฐเบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ.

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบฎเบนเบšโ€‹เบžเบฒเบšโ€‹เปเบœเปˆเบ™โ€‹

เบชเบญเบ‡เบชเบฒเบกเบ›เบตเบเปˆเบญเบ™, เบ‚เบฐเบซเบ™เบฒเบ”เบฎเบนเบšเบžเบฒเบšเบ‚เบญเบ‡เบซเบผเบฒเบเบฎเป‰เบญเบเป€เบกเบเบฐเป„เบšเปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™: เบฎเบนเบšเบžเบฒเบš Ubuntu เบกเบตเบ™เปเป‰เบฒเบซเบ™เบฑเบ 600 megabytes, เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš Microsoft .Net เบกเบตเบ™เปเป‰เบฒเบซเบ™เบฑเบเบซเบผเบฒเบ gigabyte. เปƒเบ™เบกเบทเป‰เบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ”เบžเบฝเบ‡เบฎเบนเบšเบ”เบฝเบงเบญเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบชเบเบ„เปˆเบฒเบซเบผเบฒเบเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบชเบเปŒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเปเบšเปˆเบ‡เบ›เบฑเบ™เบฅเบฐเบ”เบฑเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฎเบนเบšเบžเบฒเบš. เบกเบทเป‰เบ™เบตเป‰ - เบชเบฑเบ™เบฅเบฐเป€เบชเบตเบ™เบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆ - เบฎเบนเบšเบžเบฒเบšเบกเบตเบ™เป‰เปเบฒเบซเบ™เบฑเบเบซเบ™เป‰เบญเบ, เปเบ•เปˆเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡.

เบกเบตเบซเบผเบฒเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ:

  • เบฎเบนเบšเบžเบฒเบšเบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡, เบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบšเบญเบทเปˆเบ™เป†เป„เบ”เป‰เบ–เบทเบเป€เบเบฑเบšเบเปเบฒ - เบžเบงเบเบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบถเบšเบฅเป‰เบฒเบ‡เป„เบ”เป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบš "เบญเบทเปˆเบ™เป†" เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰;
  • เบฎเบนเบšเบžเบฒเบš dangling เปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบšเบฅเบฐเบ”เบฑเบšเบเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบญเป‰เบฒเบ‡เบญเบตเบ‡เบˆเบฒเบเปƒเบ”เป†เบ‚เบญเบ‡เบ–เบฑเบ‡เบ—เบตเปˆเปเบฅเปˆเบ™ - เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบฅเบถเบšเบ–เบดเป‰เบก.
  • เบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบฎเบนเบšเบžเบฒเบš 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)

เบเบฒเบ™เปƒเบŠเป‰เปเบœเปˆเบ™เป‚เบ”เบเบ›เบฐเบฅเบดเบกเบฒเบ™

เบ›เบฐเบฅเบดเบกเบฒเบ™เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบขเบนเปˆเบ™เบญเบเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ‚เบญเบ‡เบ–เบฑเบ‡. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™เปƒเบ™เบ—เบฒเบ‡เบญเบทเปˆเบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เปƒเบซเป‰เป€เบ›เบตเบ”เบเปˆเบญเบ‡เบšเบฑเบ™เบˆเบธ 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 เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป„เบงเป‰เบ•เบฒเบกเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™) เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™.

Docker Tips: เบฅเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบ—เปˆเบฒเบ™

เบซเบกเบฒเบเป€เบซเบ”เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡: เบซเบผเบฒเบเบฎเบนเบšเบ—เบตเปˆเบ•เป‰เบญเบ‡เบœเบฐเบฅเบดเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบŠเป‰เบ›เบฐเบฅเบดเบกเบฒเบ™เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ™เบฑเป‰เบ™.

เป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเบซเบผเบดเป‰เบ™เบžเบฝเบ‡เบžเปเบเบฑเบš 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:~$

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบœเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบฎเบนเบšเบžเบฒเบšเบชเป‰เบฒเบ‡ cache

เปƒเบ™ 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 .

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบเบงเบ”เป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบœเปˆเบ™, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบงเปˆเบฒ build cache (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, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบฒเบ™เปเบฅเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐเบ„เบงเบ™เบเบฒเบเป€เบ›เบฑเบ™เบ™เบดเป„เบช.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™