
ΠΠ΄ΡΠ°Π²Π΅ΠΉ, Π₯Π°Π±Ρ! ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΠΌ Π²ΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄Π° Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° Π°Π²ΡΠΎΡΠ° .
ΠΠ½Π΅Ρ ΡΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΈΡΠΊΠΎΠ²ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° Ρ ΠΎΡΡ ΠΌΠ°ΡΠΈΠ½Π°ΡΠ° ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠΌ ΡΠΎΠ²Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠ·Π»ΠΈΡΠ½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ.

ΠΠ±ΡΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅
Docker Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π΄Π½Π΅Ρ ΠΌΠ°Π»ΠΊΠΎ Ρ ΠΎΡΠ° ΡΠ΅ ΡΡΠΌΠ½ΡΠ²Π°Ρ Π² ΡΠΎΠ²Π°. Π‘Π°ΠΌΠΎ ΠΏΡΠ΅Π΄ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ, ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡ Π½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΈΠ·ΡΡΠ»ΠΎ Π½ΠΎΠ² Π½Π°ΡΠΈΠ½ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅, Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ΅Π΄ΠΈ, ΡΠΏΠ΅ΡΡΡΠ²Π°ΠΉΠΊΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ΡΡΡΡΠΈ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ. Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ (Π° Π·Π° Π½ΡΠΊΠΎΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π΅ Π΄ΠΎΡΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ), Docker Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΎΠΏΡΠΎΡΡΠΈΠΌ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΆΠΈΠ·Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΡΠ» Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡ ΠΆΠΈΠ²ΠΎΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠ»Π°ΡΠΈΠΌ. ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ, ΠΈΠ·ΡΠ΅Π³Π»ΡΠΌΠ΅ ΠΈΠ»ΠΈ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ, ΡΠ°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΈ Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠΈ, Π½ΠΈΠ΅ Π½Π°ΠΈΡΡΠΈΠ½Π° ΠΏΠ»Π°ΡΠ°ΠΌΠ΅. Π ΠΏΠ»Π°ΡΠ°ΠΌΠ΅ Π² ΡΠ°ΡΡΠ½ΠΎΡΡ Ρ Π΄ΠΈΡΠΊΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
ΠΠΊΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ ΡΡΠ΅ ΡΠ΅ Π·Π°ΠΌΠΈΡΠ»ΡΠ»ΠΈ Π·Π° ΡΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΌΡΡΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ Π·Π°Π΅ΡΠΎ ΠΎΡ Docker Π½Π° Π²Π°ΡΠ°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡΡΠ°Π½Π΅ΡΠ΅ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ ΠΈΠ·Π½Π΅Π½Π°Π΄Π°Π½ΠΈ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ docker system df 
Π’ΡΠΊ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠ° ΠΎΡ 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
ΠΠ·ΡΡΠΈΡΠΈ ΠΎΠ±ΡΠ°Π·ΠΈ:
deleted: sha256:143407a3cb7efa6e95761b8cd6cea25e3f41455be6d5e7cda
deleted: sha256:738010bda9dd34896bac9bbc77b2d60addd7738ad1a95e5cc
deleted: sha256:fa4f0194a1eb829523ecf3bad04b4a7bdce089c8361e2c347
deleted: sha256:c5041938bcb46f78bf2f2a7f0a0df0eea74c4555097cc9197
deleted: 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).

ΠΠ°Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π½Π° ΠΏΠΎΠ»Π΅ΡΠ°: ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·ΠΈ, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π΄Π°Π½Π½ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΎΠΌΠΎΠ²Π΅ (volumes) Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ.
ΠΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π½Π°ΡΠΈΡΠΈΠΌ Π½Π° MongoDB ΠΈ ΡΠΏΡΠ΅ΠΌ (ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ) ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠΌΡΡ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΡΠΈΡ. Π’ΠΎΠΉ ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° Π·Π°Π΅ΠΌΠ° Π½Π°ΡΠ΅ΡΠΎ ΡΠ΅Π½Π½ΠΎ Π΄ΠΈΡΠΊΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ, Π΄ΠΎΠΊΠ°ΡΠΎ Π½Π΅ Π³ΠΎ ΠΈΠ·ΡΡΠΈΠ΅ΠΌ ΡΠ²Π½ΠΎ Ρ ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°:
$ docker volume rm $(docker volume ls -q)ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²Π΅ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠ°ΡΠ° ΠΏΠΎΠ΄ΠΊΠΎΠΌΠ°Π½Π΄Π° prune:
$ docker volume prune
ΠΠΠΠΠΠΠΠ! Π’ΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ Π²ΡΠΈΡΠΊΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΎΠ±Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
Π‘ΠΈΠ³ΡΡΠ½ΠΈ Π»ΠΈ ΡΡΠ΅, ΡΠ΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅? [y/N] y
ΠΠ·ΡΡΠΈΡΠΈΡΠ΅ ΠΎΠ±Π΅ΠΌΠΈ:
d50b6402eb75d09ec17a5f57df4ed7b520c448429f70725fc5707334e5ded4d5
8f7a16e1cf117cdfddb6a38d1f4f02b18d21a485b49037e2670753fa34d115fc
599c3dd48d529b2e105eec38537cd16dac1ae6f899a123e2a62ffac6168b2f5f
...
732e610e435c24f6acae827cd340a60ce4132387cfc512452994bc0728dd66df
9a3f39cc8bd0f9ce54dea3421193f752bda4b8846841b6d36f8ee24358a85bae
045a9b534259ec6c0318cb162b7b4fca75b553d4e86fc93faafd0e7c77c79799
c6283fe9f8d2ca105d30ecaad31868410e809aba0909b3e60d68a26e92a094da
ΠΠ±ΡΠ° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° ΠΏΠ»ΠΎΡ: 25.82GB
luc@saturn:~$ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠΊΠ° Π·Π° ΠΊΠ΅Ρ Π½Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ
Π Docker 18.09 ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π·ΠΈ ΠΏΡΠ΅ΡΡΡΠΏΡ Π½ΡΠΊΠΎΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° BuildKit. Π‘ Π½Π΅Π³ΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°, ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°. Π’ΡΠΊ Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π° ΡΠ°ΠΌΠΎ ΠΊΠ°ΠΊ ΡΠΎΠΉ Π²Π»ΠΈΡΠ΅ Π½Π° Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΈΡΠΊΠΎΠ²ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡo ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 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):
$ 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
