Docker β€” это ΠΈΠ³Ρ€ΡƒΡˆΠΊΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ‚? Или всё-Ρ‚Π°ΠΊΠΈ Π΄Π°?

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚!

ΠžΠΎΠΎΡ‡Π΅Π½ΡŒ хочСтся прям сразу ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ‚Π΅ΠΌΠ΅, Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ мою ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ:

ВступлСниС

Π― программист с ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ frontend одностраничных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, scala/java ΠΈ nodejs Π½Π° сСрвСрС.

Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ (ΡƒΠΆΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΠ°Ρ€Ρƒ β€” Ρ‚Ρ€ΠΎΠΉΠΊΡƒ Π»Π΅Ρ‚), я придСрТивался мнСния, Ρ‡Ρ‚ΠΎ docker это ΠΌΠ°Π½Π½Π° нСбСсная ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΡƒΡ‚ΠΎΠΉ инструмСнт ΠΈ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌ. А ΠΎΡ‚ΡΡŽΠ΄Π° Π²Ρ‹Ρ‚Π΅ΠΊΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ docker Π½Π° локальной машинС. Π”Π° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΏΡ€ΠΎ ΠΌΠΎΡ‘ ΠΌΠ½Π΅Π½ΠΈΠ΅, Π²Ρ‹ полистайтС вакансии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ hh. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΅ΡΡ‚ΡŒ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎ docker ΠΈ Ссли Π²Ρ‹ ΠΈΠΌ Π²Π»Π°Π΄Π΅Π΅Ρ‚Π΅ β€” это Π±ΡƒΠ΄Π΅Ρ‚ вашим ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½Ρ‹ΠΌ прСимущСством πŸ˜‰

На своСм ΠΏΡƒΡ‚ΠΈ я встСчался с ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ людьми, с ΠΈΡ… Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊ docker ΠΈ ΠΊ Π΅Π³ΠΎ экосистСмС. Одни Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ это удобная Π²Π΅Ρ‰ΡŒ, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΊΡ€ΠΎΡΡΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ. Π’Ρ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΈ ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΡ„ΠΈΡ‚ ΠΎΡ‚ этого, Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Π±Ρ‹Π»ΠΎ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΎΡ„ΠΈΠ³ ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠ°Ρ€ΠΈΠ»ΠΈΡΡŒ (просто писали ΠΊΠΎΠ΄ ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΠ»ΠΈ Π΄ΠΎΠΌΠΎΠΉ β€” Π·Π°Π²ΠΈΠ΄ΡƒΡŽ, кстати, ΠΈΠΌ πŸ™‚ )

ΠŸΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ использования

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я использовал docker? НавСрноС ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • запуск Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, 99% ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠΈ
  • запуск nginx для Ρ€Π°Π·Π΄Π°Ρ‡ΠΈ frontend ΠΈ проксирования Π½Π° backend
  • ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² docker ΠΎΠ±Ρ€Π°Π·, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ docker, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° дистрибутации Ρ€Π΅ΡˆΠ΅Π½Π° ΡƒΠΆΠ΅ сразу
  • service discovery ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ микросСрвисы, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ΠΉ ΠΊ ΠΎΠ±Ρ‰Π΅ΠΉ сСти) Π»Π΅Π³ΠΊΠΎ достучится Π΄ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎ алиасу, ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ
  • ΠΏΡ€ΠΈΠΊΠΎΠ»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ «ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ» Π² Π½Π΅ΠΌ.

Π§Ρ‚ΠΎ ΠΌΠ½Π΅ всСгда НЕ Π½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ Π² docker:

  • для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π½ΡƒΠΆΠ΅Π½ сам docker Π½Π° сСрвСрС. А Π·Π°Ρ‡Π΅ΠΌ ΠΌΠ½Π΅ это, Ссли ΠΌΠΎΠΈ прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° jre ΠΈΠ»ΠΈ Π½Π° nodejs ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для Π½ΠΈΡ… ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π½Π° сСрвСрС?
  • Ссли я Ρ…ΠΎΡ‡Ρƒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свой (ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ) локально собранный ΠΎΠ±Ρ€Π°Π· Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС, Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ΅Π½ свой docker Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π΄Π΅-Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π» registry ΠΈ Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ https, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ docker cli Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ https. ΠžΡ… блин… Π΅ΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· локально Ρ‡Π΅Ρ€Π΅Π· docker save ΠΈ Ρ‡Π΅Ρ€Π΅Π· scp просто ΡΠΊΠΈΠ½ΡƒΡ‚ΡŒ образ… Но это ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Π»ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΉ. И ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ выглядит «ΠΊΠΎΡΡ‚Ρ‹Π»ΡŒΠ½Ρ‹ΠΌ» Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΊΠ° Π½Π΅ появится свой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ
  • docker-compose. Он Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². И всС. Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚. Docker-compose ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΡƒΡ‡Ρƒ вСрсий своих Ρ„Π°ΠΉΠ»ΠΎΠ², свой синтаксис. Каким Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΎΠ½ Π±Ρ‹ Π½ΠΈ Π±Ρ‹Π», я Π½Π΅ Ρ…ΠΎΡ‡Ρƒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. МнС ΠΎΠ½Π° большС Π½ΠΈΠ³Π΄Π΅ Π½Π΅ понадобится.
  • ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своСм люди ΠΏΠΈΡˆΡƒΡ‚ Dockerfile ΠΎΡ‡Π΅Π½ΡŒ ΠΊΡ€ΠΈΠ²ΠΎ, Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠ°ΠΊ это ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² ΠΎΠ±Ρ€Π°Π· всС Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΈ Π½Π΅ Π½Π°Π΄ΠΎ, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚Ρƒ Π² dockerhub ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ docker-compose Ρ„Π°ΠΉΠ»Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠ΅Ρ€ΡΠΈΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚. ΠŸΡ€ΠΈ этом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π³ΠΎΡ€Π΄ΠΎ Π·Π°ΡΠ²Π»ΡΡŽΡ‚, Ρ‡Ρ‚ΠΎ docker ΠΊΡ€ΡƒΡ‚, Ρƒ Π½ΠΈΡ… всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ локально ΠΈ HR Π²Π°ΠΆΠ½ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ Π² вакансии: «ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ docker ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ с Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹»
  • постоянно ΠΏΡ€Π΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ мысли ΠΎ поднятии Π² docker всСго ΠΈ вся: postgresql, kafka, redis. Π–Π°Π»ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всё Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…, Π½Π΅ всС Π»Π΅Π³ΠΊΠΎ ΡΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ это сторонними Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Π° Π½Π΅ самими Π²Π΅Π½Π΄ΠΎΡ€Π°ΠΌΠΈ. И кстати сразу Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос, Π²Π΅Π½Π΄ΠΎΡ€Π° Π½Π΅ парятся насчСт поддСрТания своих ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π² docker, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ это, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ½ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π·Π½Π°ΡŽΡ‚?
  • всСгда Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос ΠΏΡ€ΠΎ ΠΏΠ΅Ρ€ΡΠΈΡΡ‚Π΅Π½Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠΈ Ρ‚ΡƒΡ‚ Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ, ΠΌΠ½Π΅ просто ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΎΡΡ‚ΠΎΠ²ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ docker volume ΠΈΠ»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ data container ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ deprecated? Если я ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ uid ΠΈ gid ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ соотвСтствуСт id ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ²ΡˆΠ΅Π³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΈΠ½Π°Ρ‡Π΅ Ρ„Π°ΠΉΠ»Ρ‹ созданныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ созданы с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° root. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ volume Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ просто Π±ΡƒΠ΄Ρƒ созданы Π² ΠΊΠ°ΠΊΠΎΠΌ Π½ΠΈΠ±ΡƒΠ΄ΡŒ /usr/* ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ такая ΠΆΠ΅ история с uid ΠΈ gid ΠΊΠ°ΠΊ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ случаС. Если Π·Π°ΠΏΡƒΡΠΊΠ°Π΅ΡˆΡŒ сторонний ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос: «Π° Π² ΠΊΠ°ΠΊΠΈΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΏΠΈΡˆΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹?»

МнС всСгда Π½Π΅ Π½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ приходится слишком Π΄ΠΎΠ»Π³ΠΎ Π²ΠΎΠ·ΠΈΡ‚ΡŒΡΡ с docker-ΠΎΠΌ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС: я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π» ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΈΠ· ΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ, Π΄Π΅Π»Π°Π» Makefile, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТали алиасы ΠΊ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ docker ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ. Π’Π΅Ρ€ΠΏΠ΅Ρ‚ΡŒ Π½Π΅ ΠΌΠΎΠ³ docker-compose, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π» ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ инструмСнт экосистСмы docker. И docker-compose up мСня напрягала, особСнно, Ссли Ρ‚Π°ΠΌ Π΅Ρ‰Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ build конструкции, Π° Π½Π΅ ΡƒΠΆΠ΅ собранныС ΠΎΠ±Ρ€Π°Π·Ρ‹. ВсС, Ρ‡Ρ‚ΠΎ я Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ‚Π΅Π» β€” это просто Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ эффСктивно ΠΈ быстро. Но я Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠ³ Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ использованиС docker.

Знакомство с Ansible

НСдавно (Ρ‚Ρ€ΠΎΠΉΠΊΡƒ мСсяцСв Π½Π°Π·Π°Π΄), я ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Π» с DevOps ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ участник ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ, Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎ относился ΠΊ docker. По ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • docker ΠΏΡ€Π°Π²ΠΈΡ‚ iptables (хотя ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² daemon.json)
  • docker Π±Π°ΠΆΠ½Ρ‹ΠΉ ΠΈ Π² ΠΏΡ€ΠΎΠ΄Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ
  • Ссли docker daemon ΠΏΠ°Π΄Π°Π΅Ρ‚, Ρ‚ΠΎ соотвСтствСнно, ΠΏΠ°Π΄Π°ΡŽΡ‚ всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с инфрастуктурой
  • Π² docker Π½Π΅Ρ‚ нСобходимости
  • Π·Π°Ρ‡Π΅ΠΌ docker Ссли, Π΅ΡΡ‚ΡŒ Ansible ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹

На Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π΅ я ΠΈ познакомился с Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ инструмСнтом β€” Ansible. Когда-Ρ‚ΠΎ я ΡΠ»Ρ‹ΡˆΠ°Π» ΠΎ Π½Π΅ΠΌ, Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» ΠΏΠΈΡΠ°Ρ‚ΡŒ свои ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊΠΈ. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ я Π½Π°Ρ‡Π°Π» ΠΏΠΈΡΠ°Ρ‚ΡŒ свои таски ΠΈ Ρ‚ΡƒΡ‚ ΠΌΠΎΠ΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ помСнялось ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ! ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я понял: Ρƒ Ansible Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ для запуска Ρ‚Π΅Ρ… ΠΆΠ΅ docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², сборок ΠΎΠ±Ρ€Π°Π·ΠΎΠ², сСтСй ΠΈ ΠΏΡ€., ΠΏΡ€ΠΈ этом ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локально, Π½ΠΎ ΠΈ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… сСрвСрах! ΠœΠΎΠ΅ΠΌΡƒ восторгу Π½Π΅ Π±Ρ‹Π»ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Π° β€” я нашСл ΠΠžΠ ΠœΠΠ›Π¬ΠΠ«Π™ инструмСнт ΠΈ выбросил свои Makefile ΠΈ docker-compose Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° yaml таски. Π‘Ρ‹Π» ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° счСт использования конструкций Ρ‚ΠΈΠΏΠ° loop, when, etc.

Docker для запуска сторонних ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Π±Π΄

НСдавно я познакомился с ssh тунСлями. Оказалось, Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто «ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ» ΠΏΠΎΡ€Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСрвСра Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚. Π£Π΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ машиной Π² ΠΎΠ±Π»Π°ΠΊΠ΅, Ρ‚Π°ΠΊ ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машиной, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΉ Π² VirtualBox. Если ΠΌΠ½Π΅ ΠΈΠ»ΠΈ ΠΌΠΎΠ΅ΠΌΡƒ ΠΊΠΎΠ»Π»Π΅Π³Π΅ Π½ΡƒΠΆΠ½Π° Π±Π΄ (ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонний ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚), ΠΌΠΎΠΆΠ½ΠΎ просто Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСрвСр с этим ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ ΠΈ Π·Π°Π³Π°ΡΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° сСрвСр Π½Π΅ Π½ΡƒΠΆΠ΅Π½. ΠŸΡ€ΠΎΠ±Ρ€ΠΎΡ ΠΏΠΎΡ€Ρ‚ΠΎΠ² Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ эффСкт, ΠΊΠ°ΠΊ ΠΈ Π±Π΄, запущСнная Π² docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° пробрасываСт ΠΌΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр с postgresql:

ssh -L 9000:localhost:5432 [email protected]

ИспользованиС ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ сСрвСра Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. Π’Π°ΠΊΠΈΠΌ сСрвСром ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ сразу нСсколько Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ postgresql, Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ c docker ΠΈ с ΠΏΡ€ΠΎΡ‡ΠΈΠΌΠΈ изощрСниями. На ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ сСрвСрС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Ρƒ ΠΆΠ΅ Π±Π΄ Π² самом docker, Ссли ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†Π΅Ρ„ΠΈΡ‡Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ. ВсС Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ β€” это Π²Ρ‹Π΄Π°Ρ‚ΡŒ ssh доступ!

НСдавно ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» Ρ‡Ρ‚ΠΎ SSH Ρ‚ΡƒΠ½Π΅Π»ΠΈ это ограничСная Ρ„ΡƒΠ½ΠΊΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ VPN! МоТно просто Π½Π°ΡΡ‚ΠΎΠΈΡ‚ΡŒ OpenVPN ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ VPN, Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ инфраструктуру ΠΈ Π΄Π°Ρ‚ΡŒ Π΅Π΅ Π² пользованиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ. Π­Ρ‚ΠΎ вСдь Ρ‚Π°ΠΊ ΠΊΡ€ΡƒΡ‚ΠΎ!

Π‘Π»Π°Π³ΠΎ, AWS, GoogleCloud ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅, Π΄Π°ΡŽΡ‚ Π³ΠΎΠ΄ бСсплатного использования, Ρ‚Π°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΡ…! Они ΠΊΠΎΠΏΠ΅Π΅Ρ‡Π½Ρ‹Π΅, Ссли ΠΈΡ… Π³Π°ΡΠΈΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π― всСгда задумывался, Π² ΠΊΠ°ΠΊΠΈΡ… цСлях ΠΌΠ½Π΅ Π±Ρ‹ понадобился ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ сСрвСр Ρ‚ΠΈΠΏΠ° gcloud, каТСтся Ρ‡Ρ‚ΠΎ я нашСл ΠΈΡ….

Π’ качСствС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π½Π° Π»ΠΎΠΊΠ°Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Alpine ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Ну ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±Π»Π΅Π³Ρ‡Π΅Π½Π½Ρ‹Π΅ дистрибутивы Ρ‡Ρ‚ΠΎΠ±Ρ‹ побыстрСС Π·Π°Π³Ρ€ΡƒΠΆΠ°Π»Π°ΡΡŒ машина.

Π˜Ρ‚ΠΎΠ³: Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±Π΄ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠ΅ инфрастуктурныС плюшки ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½ΡƒΠΆΠ½ΠΎ Π½Π° ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… сСрвСрах ΠΈΠ»ΠΈ Π² virtualbox. ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ docker для этих Ρ†Π΅Π»Π΅ΠΉ.

НСмного ΠΏΡ€ΠΎ docker ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ†ΠΈΡŽ

Π― ΡƒΠΆΠ΅ писал ΡΡ‚Π°Ρ‚ΡŒΡŽ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…ΠΎΡ‚Π΅Π» донСсти, Ρ‡Ρ‚ΠΎ использованиС docker ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ. Docker ΠΎΠ±Ρ€Π°Π·Ρ‹ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Если Π²Ρ‹ Π·Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° docker ΠΎΠ±Ρ€Π°Π· Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹ Π·Π°ΡˆΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π° использованиС docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π½ΠΈΠΌΠΈ.

Π’Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π³Π΄Π΅ Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ПО ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ свои ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² docker ΠΎΠ±Ρ€Π°Π·Π΅?
Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² это Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΡ… просто Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π² docker ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹. Π’Ρ‹ Π½Π΅ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈΡΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² dockerhub Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ²? Π’Π±Π΅ΠΉΡ‚Π΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ nginx, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ 100500 ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΎΡ‚ Ρ€Π°Π·Π½Ρ‹Ρ… людСй. Π­Ρ‚ΠΈ люди Π½Π΅ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ сам nginx, ΠΎΠ½ΠΈ просто Π² свой docker ΠΎΠ±Ρ€Π°Π· Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ nginx ΠΈ ΠΏΡ€ΠΈΠΏΡ€Π°Π²ΠΈΠ»ΠΈ своими ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°ΠΌΠΈ для удобства запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Π’ΠΎΠΎΠ±Ρ‰Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ просто Π² tgz, Ссли ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ понадобится Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ это Π² docker Ρ‚ΠΎ ΠΏΡƒΡΡ‚ΡŒ Π² Dockerfile Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ tgz, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ΡΡ ΠΎΡ‚ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ окруТСния ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ плюшки ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ самого прилоТСния Π² tgz. Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ docker ΠΎΠ±Ρ€Π°Π·, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π° tgz ΠΈ Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹. ИмСнно Ρ‚Π°ΠΊ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ docker Ρ‚ΡƒΡ‚

Π˜Ρ‚ΠΎΠ³: ΠΌΠ½Π΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ docker registry, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ ΠΊΠ°ΠΊΠΈΠΌ Π½ΠΈΠ±ΡƒΠ΄ΡŒ S3 ΠΈΠ»ΠΈ просто Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Ρ‚ΠΈΠΏΠ° google drive/dropbox

Docker Π² CI

ВсС ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… я Ρ€Π°Π±ΠΎΡ‚Π°Π», ΠΏΠΎΡ…ΠΎΠΆΠΈ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Они, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Ρ‹Π΅. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅ Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ΄ΠΈΠ½ стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ (Π½Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ°Ρ€Π° β€” Ρ‚Ρ€ΠΎΠΉΠΊΠ° языков программирования).

Π­Ρ‚ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ docker Π½Π° своих сСрвСрах Π³Π΄Π΅ запускаСтся CI процСсс. Вопрос β€” Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π² docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π½Π° своих сСрвСрах? ΠŸΠΎΡ‡Π΅ΠΌΡƒ просто Π½Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ для сборки, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ansible ΠΏΠ»Π΅ΠΉΠ±ΡƒΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ вСрсии nodejs, php, jdk, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ssh ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ ΠΏΡ€. Π½Π° сСрвСр, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ сборка?

БСйчас я понимаю, Ρ‡Ρ‚ΠΎ это ΡΡ‚Ρ€Π΅Π»ΡŒΠ±Π° сСбС ΠΏΠΎ Π½ΠΎΠ³Π°ΠΌ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ docker Π½Π΅ приносит Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ„ΠΈΡ‚Π° со своСй изоляциСй. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с CI Π² docker с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ я столкнулся:

  • снова Π½ΡƒΠΆΠ½Π΅Π½ docker ΠΎΠ±Ρ€Π°Π· для сборки. Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ свой dockerfile.
  • 90% Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅ Π½ΠΈΠ±ΡƒΠ΄ΡŒ ssh ΠΊΠ»ΡŽΡ‡ΠΈ, сСкрСтныС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ хочСтся ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² docker ΠΎΠ±Ρ€Π°Π·.
  • ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ создаСтся ΠΈ ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚, Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ всС кСши вмСстС с Π½ΠΈΠΌ. ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ сборка Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ всС зависимости ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π° это Π΄ΠΎΠ»Π³ΠΎ ΠΈ Π½Π΅ эффСктивно, Π° врСмя β€” дСньги.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ Π² docker ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ( я ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎ Π±Ρ‹Π» Ρ‚Π°ΠΊΠΈΠΌ Ρ„Π°Π½Π°Ρ‚ΠΎΠΌ ΠΏΡ€Π°Π²Π΄Π°, ΠΆΠ°Π»ΠΊΠΎ сСбя Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ xD ). Π’ java Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько вСрсий ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Π½Π° Ρ‚Ρƒ которая Π½ΡƒΠΆΠ½Π° сСйчас. Π’ nodejs Ρ‚ΠΎΠΆΠ΅ самоС, Π΅ΡΡ‚ΡŒ nvm.

Π’Ρ‹Π²ΠΎΠ΄

Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ Ρ‡Ρ‚ΠΎ docker ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠΎΡ‰Ρ‰Π½Ρ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт, Π² этом Π΅Π³ΠΎ нСдостаток (Π·Π²ΡƒΡ‡ΠΈΡ‚ странно, Π΄Π°). Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π»Π΅Π³ΠΊΠΎ «ΠΏΠΎΠ΄ΡΠ°ΠΆΠΈΠ²Π°ΡŽΡ‚ся» Π½Π° Π½Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π³Π΄Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΊΠ°ΠΊΠΎΠ΅ Ρ‚ΠΎ своС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡ‚ΠΎΠΌ это всС ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‚Π΅ΠΊΠ°Π΅Ρ‚ Π² CI, ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½. DevOps ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΎ вСлосипСды Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эти ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ docker Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° самом послСднСм этапС Π² вашСм Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ процСссС, Π½Π΅ Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Π½Π°Ρ‡Π°Π»Π΅. Он Π½Π΅ Ρ€Π΅ΡˆΠΈΡ‚ Π²Π°ΡˆΠΈΡ… бизнСс ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Он Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сдвинСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° Π”Π Π£Π“ΠžΠ™ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ свои Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Когда docker Π½ΡƒΠΆΠ΅Π½: ΠΏΡ€ΠΈΡˆΠ΅Π» ΠΊ мысли Ρ‡Ρ‚ΠΎ docker ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆ Π² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ поставлСнного процСсса Π½ΠΎ Π½Π΅ Π² построСнии Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°

Если Π²Ρ‹ всС-Ρ‚Π°ΠΊΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker, Ρ‚ΠΎ:

  • Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ остороТны
  • Π½Π΅ навязывайтС использованиС docker Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ
  • Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ использованиС Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, Π½Π΅ Ρ€Π°Π·ΠΌΠ°Π·Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎ всСм рСпозиториям Dockefile ΠΈ docker-compose

PS:

  • НСдавно наткнулся Π½Π° packer ΠΈ говорят ΠΎΠ½ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ansible ΠΈ позволяСт ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс построСния ΠΎΠ±Ρ€Π°Π·ΠΎΠ² (Π² Ρ‚.Ρ‡. docker image)
  • Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΎ docker, интСрСсная ΡΡ‚Π°Ρ‚ΡŒΡ

Бпасибо Ρ‡Ρ‚ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ, ТСлаю Π²Π°ΠΌ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π² Π²Π°ΡˆΠΈΡ… Π΄Π΅Π»Π°Ρ… ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π΄Π½Π΅ΠΉ!

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