ΠΠ΅ Π΄Π°Π»Π΅Π΅, ΡΠ΅ΠΌ ΠΏΠ°ΡΡ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π²ΡΠ½Π΅ΡΡΠΈ docker storage (ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ Π΄ΠΎΠΊΠ΅Ρ Ρ
ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΠΎΠ±ΡΠ°Π·ΠΎΠ²) Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°Π·Π΄Π΅Π», ΠΊΠΎΡΠΎΡΡΠΉ
ΠΎΠ±Π»Π°Π΄Π°Π» Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π΅ΠΌΠΊΠΎΡΡΡΡ. ΠΠ°Π΄Π°ΡΠ°, ΠΊΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄Π²Π΅ΡΠ°Π»Π° Π±Π΅Π΄Ρβ¦
ΠΡΠΈΡΡΡΠΏΠ°Π΅ΠΌ:
1. ΠΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΈ ΡΠ±ΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
docker-compose down
Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΎΠ½ΠΈ Π² ΡΠ°Π·Π½ΡΡ compose, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ:
docker rm -f $(docker ps -q)
2. ΠΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π΄ΠΎΠΊΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½:
systemctl stop docker
3. ΠΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π² Π½ΡΠΆΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ:
cp -r /var/lib/docker /docker/data/storage
4. Π‘ΠΎΠΎΠ±ΡΠ°Π΅ΠΌ Π΄ΠΎΠΊΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½Ρ, ΡΡΠΎΠ±Ρ ΡΠΌΠΎΡΡΠ΅Π» Π² Π½ΠΎΠ²ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. Π’ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²: Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΠ΅Π· ΡΠ»Π°Π³ -g ΡΠΊΠ°Π·Π°ΡΡ Π΄Π΅ΠΌΠΎΠ½Ρ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΡ, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΠΈ systemd, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ. ΠΡ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ»ΠΈΠ½ΠΊ. Π‘ΠΈΠ»ΡΠ½ΠΎ ΡΠ°ΡΠΏΠΈΡΡΠ²Π°ΡΡ ΡΡΠΎ Π½Π΅ ΡΡΠ°Π½Ρ, Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅
5. Π‘ΡΠ°ΡΡΡΠ΅ΠΌ Π΄Π΅ΠΌΠΎΠ½ Π΄ΠΎΠΊΠ΅ΡΠ°, ΠΈ Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΡΠΌΠΎΡΡΠ΅Π» ΠΊΡΠ΄Π° Π½Π°Π΄ΠΎ:
systemctl status docker
Π ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄Π° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ:
ββ19493 /usr/bin/dockerd --data-root=/docker/data/storage
Π£Π±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ Π΄Π΅ΠΌΠΎΠ½Ρ ΠΎΠΏΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ» Π»ΠΈ ΠΎΠ½ Π΅Π΅ (ΡΠΏΠ°ΡΠΈΠ±ΠΎ
docker info | awk '/Root Dir/ {print $NF}'
6. Π‘ΡΠ°ΡΡΡΠ΅ΠΌ Π½Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
docker-compose up -d
7. ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ
Π Π²ΠΎΡ ΡΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΠ°ΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅, Π‘Π£ΠΠ, MQ, Π²ΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ! ΠΠ°Π·Π° ΡΠ΅Π»Π°, Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρβ¦ ΠΊΡΠΎΠΌΠ΅ nginx. Π£ Π½Π°Ρ ΡΠ²ΠΎΡ ΡΠ±ΠΎΡΠΊΠ° nginx Ρ ΠΊΠ΅ΡΠ±Π΅ΡΠΎΡ ΠΈ ΠΊΡΡΡΠΈΠ·Π°Π½ΠΊΠ°ΠΌΠΈ. Π ΠΏΡΠΎΡΠΌΠΎΡΡ Π»ΠΎΠ³ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠΊΠ°Π·Π°Π» Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π² /var/tmp β Permission denied. Π Π°Π·ΠΌΠΈΠ½Π°Ρ ΠΏΠ°Π»ΡΡΠ°ΠΌΠΈ Π²ΠΈΡΠΊΠΈ ΠΈ ΠΏΡΡΠ°ΡΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡβ¦ ΠΠ°ΠΊ ΡΠ°ΠΊ-ΡΠΎ? ΠΠΎΠΊΠ΅Ρ ΠΎΠ±ΡΠ°Π· ΠΆΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΠ»ΡΡ. ΠΡ ΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ»ΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. ΠΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΠΈ ΡΡΡ Π½Π° ΡΠ΅Π±Π΅β¦ Π Π°Π΄ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° Π·Π°ΡΠ΅Π» ΡΡΡΠΊΠ°ΠΌΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΠΏΡΠ°Π²Π° Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π±ΡΠ»ΠΈ root, root 755, Π΄Π°Π» root, root 777. Π Π²ΡΠ΅ Π·Π°Π²Π΅Π»ΠΎΡΡβ¦ Π Π³ΠΎΠ»ΠΎΠ²Π΅ Π·Π°Π·Π²ΡΡΠ°Π»Π° ΠΌΡΡΠ»Ρ β Π±ΡΠ΅Π΄ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎβ¦ ΠΡΠΌΠ°Π», Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π΅ ΡΡΠ΅Π»β¦
Π Π΅ΡΠΈΠ», ΡΡΠΎ ΠΌΡ ΠΏΡΠΎΠ»ΡΠ±ΠΈΠ»ΠΈ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° Π½Π° ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠΊΠ΅Ρ Π΄Π΅ΠΌΠΎΠ½, ΡΠ΄Π°Π»ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π»ΠΈ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ /var/lib/docker ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ rsync -a
.
ΠΡΠΌΠ°Ρ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΎΡΠ½ΠΎ Π²ΡΠ΅ Ρ ΠΎΡΠΎΡΠΎ, ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ Π΄ΠΎΠΊΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠΈΠΈβ¦ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΡΡΠ°Π»Π°ΡΡβ¦ Π£ ΠΌΠ΅Π½Ρ Π·Π°Π΄Π΅ΡΠ³Π°Π»ΡΡ Π³Π»Π°Π·. Π― ΠΌΠ΅ΡΠ½ΡΠ»ΡΡ ΠΊ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΡΠ²ΠΎΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΠΊΠΈ, Π³Π΄Π΅ Π³ΠΎΠ½ΡΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅ΡΡΡ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» ΡΡΠΎΡ ΠΎΠ±ΡΠ°Π· nginx, ΠΈ Ρ Π·Π°Π»Π΅Π· Π²Π½ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΠΈ ΡΡΡ Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ /var/tmp ΠΏΡΠ°Π²Π° ΡΡΠΎΡΡ root, root 777. Π’ΠΎ Π΅ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΆΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π²ΡΡΡΠ°Π²Π»ΡΡΡ ΡΡΠΊΠ°ΠΌΠΈ. ΠΠΎ Π²Π΅Π΄Ρ ΠΎΠ±ΡΠ°Π·Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ!
ΠΠ΅Π·Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π€Π‘ xfs.
Π― ΡΡΠ°Π²Π½ΠΈΠ» ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
docker inspect my-nginx:12345
ΠΡΠ΅ Ρ Π΅ΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Ρ, Π²ΡΠ΅ ΠΎΠ΄ΠΈΠ½ Π² ΠΎΠ΄ΠΈΠ½. ΠΠ°ΠΊ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ°ΠΊ ΠΈ Π½Π° ΠΌΠΎΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΠΊΠ΅. Π― ΡΠ΄Π°Π»ΠΈΠ» Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π· nginx ΠΈ ΡΠΏΡΠ»Π»ΠΈΠ» Π·Π°Π½ΠΎΠ²ΠΎ Ρ registry, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ ΡΡΠ΄Ρ ΠΏΡΠΈΡΠΈΠ½ ΡΡΠΎΠΈΡ Π½Π° ΡΡΠΎΠΉ ΠΆΠ΅ ΠΌΠ°ΡΠΈΠ½Π΅. Π ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ° ΠΆΠ΅β¦ Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΌΠ΅Π½Ρ Π·Π°Π΄Π΅ΡΠ³Π°Π»ΡΡ Π²ΡΠΎΡΠΎΠΉ Π³Π»Π°Π·.
Π― ΡΠΆΠ΅ Π½Π΅ ΠΏΠΎΠΌΠ½Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΡΡΠ»ΠΈ Π±ΡΠ»ΠΈ Π² ΠΌΠΎΠ΅ΠΉ Π³ΠΎΠ»ΠΎΠ²Π΅, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΊΡΠΈΠΊΠΎΠ² Β«ΠΠΠΠΠΠΠΒ» ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ. ΠΠ° ΡΠ»ΠΈΡΠ΅ 4-ΡΠΉ ΡΠ°Ρ Π½ΠΎΡΠΈ, Π² Ρ ΠΎΠ΄ ΠΏΠΎΡΠ»ΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ Π΄ΠΎΠΊΠ΅ΡΠ° Ρ ΡΠ΅Π»ΡΡ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»ΠΎΠ΅Π² ΠΎΠ±ΡΠ°Π·Π°. ΠΡΠΊΡΡΠ» ΡΡΠ΅ΡΡΡ Π±Π°Π½ΠΊΡ ΡΠ½Π΅ΡΠ³Π΅ΡΠΈΠΊΠ°. Π Π² ΠΈΡΠΎΠ³Π΅ Π΄ΠΎ ΠΌΠ΅Π½Ρ Π΄ΠΎΡΠ»ΠΎ, ΡΡΠΎ Ρ Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΠ», Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, Π½ΠΎ ΠΠ ΠΠ ΠΠΠ ΠΠΠ‘Π’Π£ΠΠ! Π’ΠΎ Π΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ Π·Π°Π³Π°Π΄ΠΎΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Ρ Π½Π°Ρ ΠΏΠΎΠ±ΠΈΠ»ΠΈΡΡ ΠΏΡΠ°Π²Π°, ΠΏΡΠΈΡΠ΅ΠΌ selinux ΠΎΡΠΊΠ»ΡΡΠ΅Π½, acl Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, sticky bit Π½Π΅ΡΡ.
Π― ΡΠ΄Π°Π»ΠΈΠ» Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π·, ΡΠ°ΠΊ-ΠΆΠ΅ ΡΠ΄Π°Π»ΠΈΠ» ΠΎΠ±ΡΠ°Π· ΠΈΠ· docker registry ΠΈ Π·Π°ΠΏΡΡΠΈΠ» Π·Π°Π½ΠΎΠ²ΠΎ. Π Π²ΡΠ΅ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ ΠΏΡΠ°Π²Π° ΠΏΠΎΠ±ΠΈΠ»ΠΈΡΡ, ΠΊΠ°ΠΊ Π²Π½ΡΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π°, ΡΠ°ΠΊ ΠΈ Π²Π½ΡΡΡΠΈ ΠΎΠ±ΡΠ°Π·Π° Π»Π΅ΠΆΠ°ΡΠ΅Π³ΠΎ Π² registry. ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΠΏΠΎ ΡΡΠ΄Ρ ΠΏΡΠΈΡΠΈΠ½ ΠΎΠ½ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π»ΡΡ Π½Π° ΡΡΠΎΠΉ ΠΆΠ΅ ΡΠ°ΡΠΊΠ΅. Π ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ /var/lib/docker.
Π ΠΏΡΠ΅Π΄Π²ΠΊΡΡΠ°Ρ Π²ΠΎΠΏΡΠΎΡ, Π½Π΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Π»ΠΈ Π²Π΅ΡΠ½ΡΡΡ Π²Π·ΠΎΡ Π΄ΠΎΠΊΠ΅ΡΠ° Π½Π° ΡΡΠ°ΡΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ β Π½Π΅Ρ, Π½Π΅ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ, ΡΠ²Ρ, ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»ΠΈ. ΠΠ° ΠΈ ΡΠΈΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
ΠΠΎΡΠ»Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ, ΠΌΠ½Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ, Π½ΠΎ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΡΠ°ΠΊΠΎΠ²ΡΠΌ Π½Π΅ ΠΊΠ°Π·Π°Π»ΠΎΡΡ. Π§Π΅ΡΡΠ½ΠΎ Π³ΡΠ³Π»ΠΈΠ», ΠΈ Π½Π΅ Π½Π°ΡΠ΅Π» ΡΡ ΠΎΠΆΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ.
ΠΡΠΎΠ³: ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ΅ΡΠΈΠ», ΠΏΡΠΈΡΠΈΠ½Ρ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΏΠΎΠ½ΡΠ» =(
ΠΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ Π·Π½Π°Π΅ΡΠ΄ΠΎΠ³Π°Π΄ΡΠ²Π°Π΅ΡΡΡΠ±ΡΠ»ΠΎ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
ΠΏΡΠΈΡΠΈΠ½Π°Ρ
Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β Π±ΡΠ΄Ρ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ°Π΄ Π²Π°ΠΌ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com