VM ΠΈΠ»ΠΈ Docker?

Как Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Docker, Π° Π½Π΅ ΠΎΡ‚ VM? Врябва Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ искатС Π΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅. Ако искатС Π΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ систСма с Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΈ рСсурси ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠ·Π±ΠΎΡ€ΡŠΡ‚ трябва Π΄Π° ΠΏΠ°Π΄Π½Π΅ Π²ΡŠΡ€Ρ…Ρƒ VM. Ако трябва Π΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ прилоТСния ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ систСмни процСси, Ρ‰Π΅ Π²ΠΈ трябва Docker.

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°ΠΊΠ²Π° Π΅ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π½Π° Docker ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ машини?

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина (VM) Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ с всички Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ устройства ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π΅Π½ Ρ‚Π²ΡŠΡ€Π΄ диск, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ Π΅ инсталирана Π½ΠΎΠ²Π° нСзависима ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π° систСма Π·Π°Π΅Π΄Π½ΠΎ с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΈ Π·Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ устройства, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ. ВоСст, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ абстракция Π½Π° физичСски Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° стартиратС ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ ΠΊΠΎΠΌΠΏΡŽΡ‚Ρ€ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€.
Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΅ΠΌΠ° дисково пространство ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ:

  • фиксирано пространство Π½Π° Ρ‚Π²ΡŠΡ€Π΄ΠΈΡ диск, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява ΠΏΠΎ-Π±ΡŠΡ€Π· Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ виртуалния Ρ‚Π²ΡŠΡ€Π΄ диск ΠΈ избягва фрагмСнтацията Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅;
  • Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. ΠšΠΎΠ³Π°Ρ‚ΠΎ инсталиратС Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ прилоТСния, ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Ρ‰Π΅ бъдС Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π·Π° тях, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ достигнС максималния Ρ€Π°Π·ΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π·Π° нСя.

ΠšΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини са Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ място Π·Π°Π΅ΠΌΠ°Ρ‚ ΠΈ изискват постоянна ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° срСдата, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²ΠΈ.

Π΄ΠΎΠΊΠ΅Ρ€ Π΅ софтуСр Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° прилоТСния, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈΡ‚Π΅ машини ΠΈΠΌΠ°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ прСдимства, Π½ΠΎ работят ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ Π·Π°Π΅ΠΌΠ°Ρ‚ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ място, Ρ‚.ΠΊ ΠΏΡ€Π΅ΠΊΠΎΠΌΠ΅Ρ€Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ сподСлСни рСсурси Π½Π° хост систСмата ΠΎΡ‚ VM, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ VM, осигурява виртуализация Π½Π° Π½ΠΈΠ²ΠΎ ОБ, Π° Π½Π΅ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ осигурява ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΡŠΠΊ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ внСдряванС ΠΈ ΠΏΠΎ-лСсно ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€Π°Π½Π΅.

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

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ - ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚ΠΈ?

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

ВсСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ Ρ‡Ρ€Π΅Π· Ρ„Π°ΠΉΠ» Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° docker-compose, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² основното Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, docker-compose.yml. Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ, ограничСния Π½Π° рСсурситС, зависимости ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ. Ако Π½Π΅ посочитС ΠΈΠΌΠ΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² настройкитС, Ρ‚ΠΎΠ³Π°Π²Π° Docker Ρ‰Π΅ създава Π½ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ всСки ΠΏΡŠΡ‚, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ присвоява ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΎ ΠΈΠΌΠ΅.

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сС стартира ΠΎΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Docker ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅/запис Π²ΡŠΡ€Ρ…Ρƒ всички слоСвС ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ. Π’ΠΎΠ²Π° Π΅ мястото, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ всички процСси, ΠΊΠΎΠΈΡ‚ΠΎ искамС Π΄Π° изпълнява нашия Docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

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

Как сС ΡΠ²ΡŠΡ€Π·Π²Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ - основният Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ Π·Π° всСки ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ сС създава ΠΎΡ‚ Dockerfile, Π΄ΠΎΠ±Π°Π²Π΅Π½ към ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΈ прСдставлява Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми (слоСвС), наслоСни Π΅Π΄ΠΈΠ½ Π²ΡŠΡ€Ρ…Ρƒ Π΄Ρ€ΡƒΠ³ ΠΈ Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ, Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅; максималният Π±Ρ€ΠΎΠΉ слоСвС Π΅ 127.

Π’ основата Π½Π° всяко ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΅ Π±Π°Π·ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΡƒΠΊΠ°Π·Π²Π° ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° FROM – Π²Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Dockerfile ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ВсСки слой Π΅ слой само Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ Π΅ прСдставСн ΠΎΡ‚ Π΅Π΄Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, която промСня Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, написана Π² Dockerfile.
Π—Π° Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° Ρ‚Π΅Π·ΠΈ слоСвС Π² Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Docker ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡƒΡΡŠΠ²ΡŠΡ€ΡˆΠ΅Π½ΡΡ‚Π²Π°Π½Π°Ρ‚Π° многопластова Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма Union (AuFS Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ Π²ΡŠΡ€Ρ…Ρƒ UnionFS), позволявайки Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ слоСвС Π΄Π° сС ΠΏΡ€ΠΈΠΏΠΎΠΊΡ€ΠΈΠ²Π°Ρ‚ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ, създавайки ΡΠ²ΡŠΡ€Π·Π°Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма.

Π‘Π»ΠΎΠ΅Π²Π΅Ρ‚Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½Π° информация Π·Π° всСки слой ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅. ВсСки слой ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° Π²Ρ€ΡŠΠ·ΠΊΠ° към слСдващия слой, Π°ΠΊΠΎ слоят няма Π²Ρ€ΡŠΠ·ΠΊΠ°, Ρ‚ΠΎΠ³Π°Π²Π° Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-горният слой Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Dockerfile ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΊΠ°Ρ‚ΠΎ:

  • ОВ - Π²Ρ…ΠΎΠ΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ;
  • MAINTAINER - ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° собствСника Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ;
  • RUN - изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° асСмблиранС Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅;
  • ADD - ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ Π½Π° хост Ρ„Π°ΠΉΠ»Π° Π² Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π°ΠΊΠΎ посочитС URL Ρ„Π°ΠΉΠ», Docker Ρ‰Π΅ Π³ΠΎ ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ Π² посочСната дирСктория;
  • ENV - ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° срСдата;
  • CMD - стартира ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ;
  • ENTRYPOINT - ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° сС изпълнява ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
  • WORKDIR Π΅ Ρ€Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° дирСктория Π·Π° изпълнСниС Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° CMD.
  • ΠŸΠžΠ’Π Π•Π‘Π˜Π’Π•Π› - Π—Π°Π΄Π°Π²Π° UID Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, създадСн ΠΎΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.
  • VOLUME - ΠœΠΎΠ½Ρ‚ΠΈΡ€Π° хост дирСкторията към ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
  • EXPOSE Π΅ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС ΡΠ»ΡƒΡˆΠ°Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Как Ρ€Π°Π±ΠΎΡ‚ΠΈ UnionFS?

UnionFS β€” Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма Π½Π° сСрвизСн стСк (FS) Π·Π° Linux ΠΈ FreeBSD. Π’ΠΎΠ·ΠΈ FS ΠΏΡ€ΠΈΠ»Π°Π³Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΈ запис (Copy-On-Write, COW). Π Π°Π±ΠΎΡ‚Π½Π°Ρ‚Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Π° Π½Π° UnionFS Π΅ слой, всСки слой трябва Π΄Π° сС Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π½Π° ΠΏΡŠΠ»Π½ΠΎΡ†Π΅Π½Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма с йСрархия Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡ‚ самия ΠΊΠΎΡ€Π΅Π½. UnionFS създава ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° съюз Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми ΠΈ Π²ΠΈ позволява ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Π΄Π° обСдиняватС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΈ систСми (Π½Π°Ρ€Π΅Ρ‡Π΅Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅) Π² Π΅Π΄Π½Π° ΡΠ²ΡŠΡ€Π·Π°Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π° систСма, ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ Π·Π° потрСбитСля.

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

UnionFS ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° слоСвС Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° слСднитС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ:

  • Π΅Π΄ΠΈΠ½ ΠΎΡ‚ слоСвСтС става слой ΠΎΡ‚ Π½Π°ΠΉ-високо Π½ΠΈΠ²ΠΎ, вторият ΠΈ слСдващитС слоСвС стават слоСвС ΠΎΡ‚ ΠΏΠΎ-ниско Π½ΠΈΠ²ΠΎ;
  • ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° слоя са Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° потрСбитСля β€žΠΎΡ‚Π³ΠΎΡ€Π΅ Π½Π°Π΄ΠΎΠ»Ρƒβ€œ, Ρ‚.Π΅. Π°ΠΊΠΎ исканият ΠΎΠ±Π΅ΠΊΡ‚ Π΅ Π² "горния" слой, Ρ‚ΠΎΠΉ сС Π²Ρ€ΡŠΡ‰Π°, нСзависимо ΠΎΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ със ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ Π² "долния" слой; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай сС Π²Ρ€ΡŠΡ‰Π° ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ Π½Π° "долния" слой; Π°ΠΊΠΎ исканият ΠΎΠ±Π΅ΠΊΡ‚ Π½Π΅ Π΅ Π½ΠΈΡ‚ΠΎ Ρ‚Π°ΠΌ, Π½ΠΈΡ‚ΠΎ Ρ‚Π°ΠΌ, сС Π²Ρ€ΡŠΡ‰Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° "Няма Ρ‚Π°ΠΊΡŠΠ² Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ дирСктория";
  • работният слой Π΅ β€žΠ½Π°ΠΉ-Π³ΠΎΡ€Π½ΠΈΡΡ‚β€œ, Ρ‚.Π΅. всички потрСбитСлски дСйствия Π·Π° промяна Π½Π° Π΄Π°Π½Π½ΠΈ сС отразяват само Π²ΡŠΡ€Ρ…Ρƒ слоя ΠΎΡ‚ Π½Π°ΠΉ-високо Π½ΠΈΠ²ΠΎ, Π±Π΅Π· Π΄Π° сС засяга ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° слоСвСтС ΠΎΡ‚ ΠΏΠΎ-ниско Π½ΠΈΠ²ΠΎ.

Docker Π΅ Π½Π°ΠΉ-разпространСната тСхнология Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с прилоТСния. Π’ΠΎΠΉ сС ΠΏΡ€Π΅Π²ΡŠΡ€Π½Π° Π² стандарт Π² Ρ‚Π°Π·ΠΈ област, Π½Π°Π΄Π³Ρ€Π°ΠΆΠ΄Π°ΠΉΠΊΠΈ cgroups ΠΈ namespaces, прСдоставСни ΠΎΡ‚ Linux ядрото.

Docker Π½ΠΈ позволява Π±ΡŠΡ€Π·ΠΎ Π΄Π° внСдрявамС прилоТСния ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π°Ρ‚Π° систСма, ΠΊΠ°Ρ‚ΠΎ сподСлямС ядрото Π½Π° ОБ ΠΌΠ΅ΠΆΠ΄Ρƒ всички ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ процСси Π½Π° ОБ.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€