Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ Π² werf ΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Dockerfile

По-Π΄ΠΎΠ±Ρ€Π΅ късно, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π½ΠΈΠΊΠΎΠ³Π°. Или ΠΊΠ°ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΈ пропуснахмС сСриозна Π³Ρ€Π΅ΡˆΠΊΠ°, нямаща ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° Π·Π° стандартни Dockerfiles Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ.

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ Π² werf ΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Dockerfile

Π©Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° werf β€” GitOps инструмСнт, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° с всяка CI/CD систСма ΠΈ осигурява ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° цСлия ΠΆΠΈΠ·Π½Π΅Π½ Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, позволявайки:

  • Π΄Π° ΡΡŠΠ±ΠΈΡ€Π° ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° ΠΎΠ±Ρ€Π°Π·ΠΈ,
  • Π΄Π° Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π° прилоТСния Π² Kubernetes,
  • Π΄Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π΅ΠΌΠΈ ΠΎΠ±Ρ€Π°Π·ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° спСциални ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.


Ѐилософията Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ нискоуровнСви инструмСнти Π² Π΅Π΄ΠΈΠ½Π½Π° ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½Π° систСма, която Π΄Π° Π΄Π°Π²Π° Π½Π° DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π°Π΄ прилоТСнията. По Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ инструмСнти (ΠΊΠ°Ρ‚ΠΎ Helm ΠΈ Docker). Ако ΠΎΠ±Π°Ρ‡Π΅ няма Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° някаква Π·Π°Π΄Π°Ρ‡Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° създадСм ΠΈ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° Ρ‚ΠΎΠ²Π°.

ΠŸΡ€Π΅Π΄ΠΈΡΡ‚ΠΎΡ€ΠΈΡ: собствСн сборщик Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ° сС случи ΠΈ със сборщика Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π² werf: липсвашС Π½ΠΈ познатият Dockerfile. Ако Π±ΡŠΡ€Π·ΠΎ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π°ΠΌΠ΅ историята Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ сС появи ΠΎΡ‰Π΅ Π² ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ вСрсии Π½Π° werf (Ρ‚ΠΎΠ³Π°Π²Π° всС ΠΎΡ‰Π΅ извСстСн ΠΊΠ°Ρ‚ΠΎ dapp).

Бъздавайки инструмСнт Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° прилоТСния Π² Docker ΠΎΠ±Ρ€Π°Π·ΠΈ, Π±ΡŠΡ€Π·ΠΎ Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, Ρ‡Π΅ Dockerfile Π½Π΅ Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° Π·Π° някои напълно ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ:

  1. НСобходимостта Π΄Π° сС ΡΡŠΠ±ΠΈΡ€Π°Ρ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ ΠΌΠ°Π»ΠΊΠΈ ΡƒΠ΅Π± прилоТСния ΠΏΠΎ слСдната стандартна схСма:
    • Π΄Π° сС инсталират общосистСмни зависимости Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ,
    • Π΄Π° сС инсталира ΠΏΠ°ΠΊΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ зависимости Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ,
    • Π΄Π° сС ΡΡŠΠ±Π΅Ρ€Π°Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈ,
    • ΠΈ Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ β€” Π΄Π° сС обновява ΠΊΠΎΠ΄ΡŠΡ‚ Π² ΠΎΠ±Ρ€Π°Π·Π° Π±ΡŠΡ€Π·ΠΎ ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ.
  2. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΡΠ±ΠΎΡ€Ρ‰ΠΈΠΊΡŠΡ‚ трябва Π±ΡŠΡ€Π·ΠΎ Π΄Π° създава Π½ΠΎΠ² слой, ΠΊΠ°Ρ‚ΠΎ Π½Π°Π»Π°Π³Π° ΠΏΠ°Ρ‡Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅.
  3. Ако са ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС ΠΏΡ€Π΅ΡΡŠΠ·Π΄Π°Π΄Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° зависима ΡΡ‚ΡŠΠΏΠΊΠ°.

Към днСшна Π΄Π°Ρ‚Π° Π² нашия сборщик ΠΈΠΌΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ‚Π΅ ТСлания ΠΈ ΠΏΠΎΡ€ΠΈΠ²ΠΈ бяха Ρ‚Π°ΠΊΠΈΠ²Π°.

Π’ ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π±Π΅Π· ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π° сС замислямС, сС Π²ΡŠΠΎΡ€ΡŠΠΆΠΈΡ…ΠΌΠ΅ с използвания Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ (Π²ΠΆ. ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ) ΠΈ сС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ ΠΏΠΎ ΠΏΡŠΡ‚Ρ β€” Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ собствСн DSL! Π’ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с поставСнитС Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎΠΉ бСшС ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ Π·Π° описванС Π½Π° процСса Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΏΠΎ ΡΡ‚ΡŠΠΏΠΊΠΈ ΠΈ опрСдСлянС Π½Π° зависимоститС Π½Π° Ρ‚Π΅Π·ΠΈ ΡΡ‚ΡŠΠΏΠΊΠΈ ΠΎΡ‚ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅. А допълвашС Π³ΠΎ собствСн сборщик, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π²Ρ€ΡŠΡ‰Π°ΡˆΠ΅ DSL Π² ΠΊΡ€Π°ΠΉΠ½Π° Ρ†Π΅Π» β€” ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ ΠΎΠ±Ρ€Π°Π·. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ DSL бСшС Π½Π° Ruby, Π° с ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Golang β€” конфигурацията Π½Π° нашия сборщик Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° сС описва Π² YAML Ρ„Π°ΠΉΠ». β€” ΠΊΠΎΠ½Ρ„ΠΈΠ³ нашСго сборщика стал ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² YAML-Ρ„Π°ΠΉΠ»Π΅.

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ Π² werf ΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Dockerfile
Бтарият ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π·Π° dapp Π½Π° Ruby

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ Π² werf ΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Dockerfile
АктуалСн ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π·Π° werf Π½Π° YAML

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡŠΡ‚ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° сборщика ΡΡŠΡ‰ΠΎ сС Π΅ промСнял с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ просто Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π½Π° място Π²Ρ€Π΅ΠΌΠ΅Π½Π΅Π½ Dockerfile ΠΎΡ‚ Π½Π°ΡˆΠ°Ρ‚Π° конфигурация, Π° ΠΏΠΎ-късно Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ Π΄Π° стартирамС инструкции Π·Π° сборка Π² Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ ΠΈ Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ commit.

NB: Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π°ΡˆΠΈΡΡ‚ сборщик, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ със собствСн ΠΊΠΎΠ½Ρ„ΠΈΠ³ (Π² YAML) ΠΈ сС Π½Π°Ρ€ΠΈΡ‡Π° Stapel-сборщик, Π²Π΅Ρ‡Π΅ Π΅ израснал Π² доста ΠΌΠΎΡ‰Π΅Π½ инструмСнт. НСговото ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описаниС заслуТава ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ статии, Π° основнитС подробности ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈ Π² докумСнтацията.

ΠžΡΡŠΠ·Π½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Но Π½ΠΈΠ΅ Ρ€Π°Π·Π±Ρ€Π°Ρ…ΠΌΠ΅, ΠΈ Ρ‚ΠΎ Π½Π΅ Π²Π΅Π΄Π½Π°Π³Π°, Ρ‡Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ Π΅Π΄Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°: Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈ Ρ‡Ρ€Π΅Π· стандартСн Dockerfile ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°ΠΌΠ΅ Π² ΡΡŠΡ‰Π°Ρ‚Π° инфраструктура Π·Π° комплСксно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ (Ρ‚.Π΅. Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°ΠΌΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΈ, Π΄Π° Π³ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ€Π°ΠΌΠ΅ ΠΈ Π΄Π° Π³ΠΈ почиствамС). Как бСшС възмоТно Π΄Π° създадСм инструмСнт Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ Π² Kubernetes ΠΈ Π΄Π° Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Dockerfile, Ρ‚.Π΅. стандартния Π½Π°Ρ‡ΠΈΠ½ Π·Π° описаниС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ Π·Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ?..

ВмСсто ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π²ΡŠΠΏΡ€ΠΎΡ Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Какво Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅, Π°ΠΊΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Dockerfile (ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Dockerfile-ΠΈ) ΠΈ искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ werf?

NB: ΠœΠ΅ΠΆΠ΄Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, Π·Π°Ρ‰ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ werf? ΠžΡΠ½ΠΎΠ²Π½ΠΈΡ‚Π΅ характСристики са слСднитС:

  • пълСн Ρ†ΠΈΠΊΡŠΠ» Π½Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ почистванС Π½Π° ΠΎΠ±Ρ€Π°Π·ΠΈ;
  • Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° сборката Π½Π° няколко ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ Π΅Π΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ½Ρ„ΠΈΠ³;
  • ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ процСс Π½Π° Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° Ρ‡Π°Ρ€Ρ‚ΠΎΠ²Π΅, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ с Helm.

Π‘ ΠΏΠΎ-пълния ΠΈΠΌ списък ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ Π½Π° страницата Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

И Ρ‚Π°ΠΊΠ°, Π°ΠΊΠΎ ΠΏΡ€Π΅Π΄ΠΈ Π±ΠΈΡ…ΠΌΠ΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ»ΠΈ Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Dockerfile Π½Π° нашия ΠΊΠΎΠ½Ρ„ΠΈΠ³, Ρ‚ΠΎ сСга с радост Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅ΠΌ: β€žΠŸΠΎΠ·Π²ΠΎΠ»Π΅Ρ‚Π΅ Π½Π° werf Π΄Π° ΡΡŠΠ±Π΅Ρ€Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ Dockerfile-ΠΈ!β€œ

Как Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅?

ΠŸΡŠΠ»Π½Π°Ρ‚Π° рСализация Π½Π° Ρ‚Π°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ сС появи Π² Ρ€Π΅Π»ΠΈΠ·Π° werf v1.0.3-beta.1. ΠžΠ±Ρ‰ΠΈΡΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π΅ прост: потрСбитСлят посочва ΠΏΡŠΡ‚Ρ Π΄ΠΎ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ Dockerfile Π² конфигурацията Π½Π° werf, слСд ΠΊΠΎΠ΅Ρ‚ΠΎ стартира ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° werf build… ΠΈ всичко β€” werf Ρ‰Π΅ ΡΡŠΠ±Π΅Ρ€Π΅ ΠΎΠ±Ρ€Π°Π·Π°. НСка Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ абстрактСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

ОбявявамС слСдния Dockerfile Π² ΠΊΠΎΡ€Π΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

FROM ubuntu:18.04
RUN echo Building ...

И обявявамС werf.yaml, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚ΠΎΠ·ΠΈ Dockerfile:

configVersion: 1
project: dockerfile-example
---
image: ~
dockerfile: .\/Dockerfile

Всичко! ΠžΡΡ‚Π°Π²Π° само Π΄Π° стартира werf build:

Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‚Π΅ Docker ΠΎΠ±Ρ€Π°Π·ΠΈ Π² werf ΠΈ ΠΏΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Dockerfile

ОсвСн Ρ‚ΠΎΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° обявитС слСдния werf.yaml Π·Π° сборка Π½Π° няколко ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Dockerfile-ΠΈ:

configVersion: 1
project: dockerfile-example
---
image: backend
dockerfile: .\/dockerfiles\/Dockerfile-backend
---
image: frontend
dockerfile: .\/dockerfiles\/Dockerfile-frontend

Най-накрая сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈ ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ β€” ΠΊΠ°Ρ‚ΠΎ --build-arg ΠΈ --add-host β€” Ρ‡Ρ€Π΅Π· конфигурацията Π½Π° werf. Пълно описаниС Π½Π° конфигурацията Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Dockerfile Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΎ Π½Π° страницата с докумСнтация.

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

Π’ процСса Π½Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° стандартният кСш Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ‚Π΅ слоСвС Π² Docker. Но, Π²Π°ΠΆΠ½ΠΎ Π΅, Ρ‡Π΅ werf ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π° конфигурацията Π½Π° Dockerfile Π² своята инфраструктура. Какво ΠΎΠ·Π½Π°Ρ‡Π°Π²Π° Ρ‚ΠΎΠ²Π°?

  1. ВсСки ΠΎΠ±Ρ€Π°Π·, създадСн ΠΎΡ‚ Dockerfile, сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ Π΅Ρ‚Π°ΠΏ, Π½Π°Ρ€Π΅Ρ‡Π΅Π½ dockerfile (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π² werf ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ).
  2. Π—Π° Π΅Ρ‚Π°ΠΏΠ° dockerfile werf изчислява подпис, ΠΊΠΎΠΉΡ‚ΠΎ зависи ΠΎΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° конфигурацията Π½Π° Dockerfile. ΠŸΡ€ΠΈ промяна Π½Π° конфигурацията Π½Π° Dockerfile, ΠΏΠΎΠ΄ΠΏΠΈΡΡŠΡ‚ Π½Π° Π΅Ρ‚Π°ΠΏΠ° сС промСня dockerfile ΠΈ werf ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Ρ‚Π°ΠΏ с Π½ΠΎΠ²Π°Ρ‚Π° конфигурация Π½Π° Dockerfile. Ако ΠΏΠΎΠ΄ΠΏΠΈΡΡŠΡ‚ Π½Π΅ сС промСня, werf Π²Π·Π΅ΠΌΠ° ΠΎΠ±Ρ€Π°Π·Π° ΠΎΡ‚ кСша (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° подписи Π² werf бСшС спомСнато Π² Ρ‚Π°Π·ΠΈ прСзСнтация).
  3. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° werf publish (ΠΈΠ»ΠΈ werf build-and-publish) ΠΈ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π² Kubernetes. ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΈ Π² Docker Registry Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ почистСни със стандартни срСдства Π·Π° почистванС Π½Π° werf, Ρ‚.Π΅. Ρ‰Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ почистванС Π½Π° стари ΠΎΠ±Ρ€Π°Π·ΠΈ (постарСли ΠΎΡ‚ N Π΄Π½ΠΈ), ΠΎΠ±Ρ€Π°Π·ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π½Π΅ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Git ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅, ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

ΠŸΠΎΠ²Π΅Ρ‡Π΅ Π·Π° описанитС Ρ‚ΡƒΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡ‚ докумСнтацията:

Π—Π°Π±Π΅Π»Π΅ΠΆΠΊΠΈ ΠΈ прСдупрСТдСния

1. Π’ΡŠΠ½ΡˆΠ΅Π½ URL Π² ADD Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°

Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° външСн URL Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°Ρ‚Π° ADD. Werf няма Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ ΠΏΡ€ΠΈ промяна Π½Π° рСсурса ΠΏΠΎ посочСния URL. Π’ скоро Π²Ρ€Π΅ΠΌΠ΅ сС ΠΏΠ»Π°Π½ΠΈΡ€Π° добавянСто Π½Π° Ρ‚Π°Π·ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚.

2. НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС добавя .git Π² ΠΎΠ±Ρ€Π°Π·

По ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, добавянСто Π½Π° дирСктория .git Π² ΠΎΠ±Ρ€Π°Π·Π° β€” Π΅ лоша ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΈ Π΅Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ:

  1. Ако .git остава Π² крайния ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΡ‚Π΅ Π½Π° 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ крайният ΠΎΠ±Ρ€Π°Π· трябва Π΄Π° бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ с Π΅Π΄ΠΈΠ½ ΠΊΠΎΠΌΠΈΡ‚, Π½Π΅ Π±ΠΈ трябвало Π΄Π° ΠΈΠΌΠ° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° git checkout ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ ΠΊΠΎΠΌΠΈΡ‚.
  2. .git ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° ΠΎΠ±Ρ€Π°Π·Π° (рСпозиторият ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ голям Π·Π°Ρ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΡ€Π΅Π΄ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π² Π½Π΅Π³ΠΎ са Π±ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π° слСд Ρ‚ΠΎΠ²Π° са ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ). Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° work-tree, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ само с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΊΠΎΠΌΠΈΡ‚, Π½Π΅ зависи ΠΎΡ‚ историята Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ Π² Git. Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ добавянСто ΠΈ послСдващо ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅ .git финалният ΠΎΠ±Ρ€Π°Π· няма Π΄Π° сработи: ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚ всС ΠΏΠ°ΠΊ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ излишСн слой β€” Ρ‚Π°ΠΊΠ° Ρ€Π°Π±ΠΎΡ‚ΠΈ Docker.
  3. Docker ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° излишно ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΊΠΎΠΌΠΈΡ‚, Π½ΠΎ ΠΎΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ work-tree. НапримСр, GitLab създава ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π² /home/gitlab-runner/builds/HASH/[0-N]/yourproject ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅. Π˜Π·Π»ΠΈΡˆΠ½ΠΎΡ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Ρ‰Π΅ бъдС ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ дирСкторията .git Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½ΠΈ вСрсии Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΊΠΎΠΌΠΈΡ‚.

ΠŸΠΎΡΠ»Π΅Π΄Π½ΠΈΡΡ‚ ΠΏΡƒΠ½ΠΊΡ‚ ΠΈΠΌΠ° послСдица ΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° werf. Werf изисква, Π·Π° Π΄Π° Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ компилираният кСш, ΠΏΡ€ΠΈ стартиранС Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, werf deploy). По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Ρ‚Π΅Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ werf прСсмята подписитС Π½Π° Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ Π·Π° ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚Π΅, посочСни Π² werf.yaml, ΠΈ Ρ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π² компилационния кСш β€” Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π½Π΅ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Ако ΠΎΠ±Π°Ρ‡Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΡŠΡ‚ Π½Π° Π΅Ρ‚Π°ΠΏΠΈΡ‚Π΅ зависи ΠΎΡ‚ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ .git, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ нСстабилСн кСш относно измСнСния Π² Π½Π΅Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΈ werf Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° прости Ρ‚Π°ΠΊΠ°Π²Π° Π³Ρ€Π΅ΡˆΠΊΠ° (ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΠΈΠΆΡ‚Π΅ Π² докумСнтацията).

Π’ ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ добавянСто само Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ‡Ρ€Π΅Π· инструкция ADD всСки случай повишава СфСктивността ΠΈ надСТдността Π½Π° написаното Dockerfile, Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° подобрява устойчивостта Π½Π° кСша, ΡΡŠΠ±Ρ€Π°Π½ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Dockerfile, спрямо Π½Π΅Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½ΠΈ измСнСния Π² Git.

РСзюмС

ΠΠ°ΡˆΠΈΡΡ‚ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π΅Π½ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π·Π° написванС Π½Π° собствСн ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π½ΡƒΠΆΠ΄ΠΈ бСшС Ρ‚Ρ€ΡƒΠ΄Π΅Π½, чСстСн ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½: вмСсто Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ костилки Π½Π°Π΄ стандартния Dockerfile, написахмС собствСно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с пСрсонализиран синтаксис. И Ρ‚ΠΎΠ²Π° Π΄Π°Π΄Π΅ своитС прСдимства: Stapel-ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ сС справя ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ с Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π°.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π² процСса Π½Π° написванС Π½Π° собствСния ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, пропуснахмС ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ°Ρ‚Π° Π·Π° Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Dockerfile. Π‘Π΅Π³Π° Ρ‚ΠΎΠ·ΠΈ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π΅ отстранСн, Π° Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅ ΠΏΠ»Π°Π½ΠΈΡ€Π°ΠΌΠ΅ Π΄Π° Ρ€Π°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° Dockerfile Π² синхрон с нашия пСрсонализиран ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Stapel Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Kubernetes (Ρ‚.Π΅. ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° runner’и Π² Kubernetes, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ Π² kaniko).

Π’Π°ΠΊΠ° Ρ‡Π΅, Π°ΠΊΠΎ случайно ΠΈΠΌΠ°Ρ‚Π΅ няколко Dockerfile-а… ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ werf!

P.S. Бписък с докумСнтация ΠΏΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π°

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³: Β«werf β€” наш инструмСнт Π·Π° CI/CD Π² Kubernetes (ΠΎΠ±Π·ΠΎΡ€ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄)Β».

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster