Docker настройка: Установка ΠΈ настройка Docker Π² Ubuntu

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Установка ΠΈ настройка Docker Π² Ubuntu

T-Rex

Π’ΠΈΡ€Π°Π½Π½ΠΎΠ·Π°Π²Ρ€ РСкс

Docker β€” ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для облСгчСния создания, развСртывания ΠΈ запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ всС Π΅Π³ΠΎ зависимости Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ срСду.

Managed Kubernetes ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ прилоТСния Π² инфраструктурС Selectel. Π‘ΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΡŒΡ‚Π΅ΡΡŒ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π° ΠΌΡ‹ займСмся Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹ΠΌΠΈ опСрациями ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСго кластСра Kubernetes.

Боздавая Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ срСду, Docker схоТ с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ сСрвСром. Однако, Π² случаС с Docker, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ ядро Linux, раздСляя Π΅Π³ΠΎ рСсурсы.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” Docker ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ исходный ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ отсутствиС нСобходимости внСсСния ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Π·Π° Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ ΠΈ большоС ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° любой вопрос ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Docker.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ разбСрСмся с установкой Docker Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Ubuntu, создадим ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° Docker Hub ΠΈ запустим собствСнный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’Π°ΠΊΠΆΠ΅ расскаТСм ΠΎΠ± ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ Docker Compose для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ прилоТСниями.

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ установки всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ сСрвСр. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ сСрвСр с Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ.

Π’ консоли управлСния Selectel ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² прСдставлСниС ΠžΠ±Π»Π°Ρ‡Π½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвСр.

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ прСдставлСнии Π²Π²ΠΎΠ΄ΠΈΠΌ имя сСрвСра, Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы (Π² нашСм случаС это Ubuntu 18.04 LTS 64-bit) ΠΈ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сСрвСра с 1 vCPU ΠΈ 2 Π“Π‘ RAM. Для тСстовых Ρ†Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ достаточно диска с 10 Π“Π‘. Π•Ρ‰Π΅ Ρ€Π°Π· провСряСм ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сСрвСра ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ.

ПодоТдСм ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΈΠ»ΠΈ Π΄Π²Π΅ ΠΏΠΎΠΊΠ° сСрвСр Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² состояниС Active.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ установкС Docker. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

Docker: систСмныС трСбования для установки

Один ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² окруТСния Docker β€” Docker Engine. Π­Ρ‚ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обСспСчиваСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹:

  • сСрвСрная Ρ‡Π°ΡΡ‚ΡŒ с процСссом-Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ dockerd;
  • API-интСрфСйсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для взаимодСйствия с Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ Docker;
  • ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (CLI), Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker.

Docker Engine поставляСтся Π² Π²ΠΈΠ΄Π΅ .deb ΠΈ .rpm ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Π½Π° Π»ΡŽΠ±Ρ‹Π΅ дистрибутивы сСмСйства Linux (CentOS, Debian, Fedora, Raspbian, Ubuntu). Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Docker Desktop, которая позволяСт ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Docker Engine Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах Windows ΠΈ MacOS. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях, всС Ρ€Π°Π²Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ядро Linux.

Установка Docker Π½Π° Ubuntu

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Π½Π° Ubuntu, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия. Для Π½Π°Ρ‡Π°Π»Π°, ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ состав установочных ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎΠ± ΠΈΡ… Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… вСрсиях:

sudo apt update

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ установим Π½Π°Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для доступа ΠΊ рСпозиториям ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTPS:

  • apt-transport-https β€” Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· https;
  • ca-сertificates β€” Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ сСртификаты бСзопасности;
  • curl β€” ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для обращСния ΠΊ Π²Π΅Π±-рСсурсам;
  • software-properties-common β€” Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования скриптов для управлСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм.
sudo apt install apt-transport-https ca-certificates curl software-properties-common

Π”Π°Π»Π΅Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² систСму GPG-ΠΊΠ»ΡŽΡ‡ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Docker Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ список Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π²:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы:

sudo apt update

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Π΅ΠΌ ΠΊ установкС ΠΏΠ°ΠΊΠ΅Ρ‚Π° Docker.

sudo apt install docker-ce -y

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ установки запустим Π΄Π΅ΠΌΠΎΠ½ Docker ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Π³ΠΎ Π² Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ:

sudo systemctl start docker
sudo systemctl enable docker

На этом установка Docker Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Установка Docker Compose Π½Π° Ubuntu

Docker Compose β€” это инструмСнт для описания ΠΈ запуска ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Docker. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ, ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ послСднюю сборку Docker Compose Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° Github ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ Π΅Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ curl со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

  • –L Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚Ρ‹, Ссли Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½;
  • –o ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° для удобства Π΅Π³ΠΎ запуска ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для сохранСния.
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ ΠΏΡ€Π°Π²Π° Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

sudo chmod +x /usr/local/bin/docker-compose

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ установку Docker Compose ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ· рСпозитория Ubuntu ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ sudo apt-get install docker-compose. Однако, Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ самая послСдняя вСрсия. Бпособ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ описали Π²Ρ‹ΡˆΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Docker Compose.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΅Π΅ вСрсии:

sudo docker–compose –version

Если ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Π΅Ρ€Π½ΡƒΠ»Π° Π½ΠΎΠΌΠ΅Ρ€ вСрсии, Π·Π½Π°Ρ‡ΠΈΡ‚ Docker Compose Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅.

Когда Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Docker Compose, достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ удалСния Ρ„Π°ΠΉΠ»Π°:

sudo rm /usr/local/bin/docker-compose

Если установка Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»Π°ΡΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ apt, Π½ΡƒΠΆΠ½ΠΎ Π΅Π³ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ purge:

sudo apt purge docker-compose

И слСдом ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС нСвострСбованныС зависимости:

sudo apt autoremove

ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ Docker ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Π½ΠΈΠΌ

ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Docker, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π•ΡΡ‚ΡŒ Π΄Π²Π° ΠΏΡƒΡ‚ΠΈ: ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, описав Π΅Π³ΠΎ Π² Dockerfile ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΈΠ· Docker Hub ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ рСпозитория. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ создания собствСнного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с нуля ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Dockerfile.

Dockerfile β€” это скрипт с инструкциями ΠΏΠΎ созданию ΠΎΠ±Ρ€Π°Π·Π° Docker. Π­Ρ‚ΠΈ инструкции ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΊΠΎΠΌΠ°Π½Π΄, автоматичСски выполняСмых Π² срСдС Docker для создания ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Docker.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² Π½Π΅Π΅ ΠΈ создадим Dockerfile:

mkdir docker_images
cd docker_images
touch Dockerfile

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Dockerfile ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ нСсколько строк:

nano Dockerfile
FROM ubuntu
MAINTAINER selectel
RUN apt-get update
CMD ["echo", "Hello World"]
  • FROM опрСдСляСт основу создаваСмого изобраТСния. МоТно Π½Π°Ρ‡Π°Ρ‚ΡŒ с Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ (ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅) ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. ΠŸΡ€ΠΈ использовании Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π·, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ основан Π½ΠΎΠ²Ρ‹ΠΉ. ИспользованиС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ с нуля (ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ Π΅Π³ΠΎ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚: FROM scratch).
  • MAINTAINER ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Π²Ρ‚ΠΎΡ€Π° ΠΎΠ±Ρ€Π°Π·Π°. Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ввСсти вашС имя ΠΈ/ΠΈΠ»ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹). Π’Π°ΠΊΠΆΠ΅ сюда ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ добавлСнию ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… (LABEL) ΠΊ ΠΎΠ±Ρ€Π°Π·Ρƒ.
  • RUN опрСдСляСт инструкции ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΡ€ΠΈ построСнии ΠΎΠ±Ρ€Π°Π·Π° Π² слоях ΠΏΠΎΠ²Π΅Ρ€Ρ… Π½Π΅Π³ΠΎ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ систСма ΠΈΡ‰Π΅Ρ‚ обновлСния рСпозитория послС Π½Π°Ρ‡Π°Π»Π° сборки ΠΎΠ±Ρ€Π°Π·Π° Docker. Π’ Dockerfile ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ нСсколько инструкций RUN.
  • CMD ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ исполнСно. БистСма Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π΅Π΅, Ссли Π²Ρ‹ запуститС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±Π΅Π· указания ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’Π½ΡƒΡ‚Ρ€ΠΈ Dockerfile ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° инструкция CMD.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠΌ измСнСния ΠΈ Π²Ρ‹ΠΉΠ΄Π΅ΠΌ ΠΈΠ· Ρ€Π΅ΠΆΠΈΠΌΠ° рСдактирования. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ сборкС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ Docker. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ синтаксис выглядит Ρ‚Π°ΠΊ:

sudo docker build [OPTIONS] PATH | URL | -

Запустим ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -t, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° имя ΠΎΠ±Ρ€Π°Π·Π°. Π­Ρ‚ΠΎ упростит ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈΡ… станСт нСсколько.

sudo docker build -t my_image .

ПослС сборки ΠΎΠ±Ρ€Π°Π·Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ появился Π² локальном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ². ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
my_image     latest    889af78121ad   4 seconds ago   100MB
ubuntu       latest    4dd97cefde62   2 weeks ago     72.9MB

Казалось Π±Ρ‹ ΠΌΡ‹ создали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±Ρ€Π°Π·. ΠžΡ‚ΠΊΡƒΠ΄Π° Ρ‚Π°ΠΌ появилось Π΄Π²Π°? ВсС просто β€” ΠΌΡ‹ создавали свой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ my_ubuntu Π½Π° Π½Π° Π±Π°Π·Π΅ ΠΎΠ±Ρ€Π°Π·Π° ubuntu, поэтому Π²Π½Π°Ρ‡Π°Π»Π΅ скачался ΠΎΠ±Ρ€Π°Π· ubuntu ΠΈ лишь ΠΏΠΎΡ‚ΠΎΠΌ Π±Ρ‹Π» создан my_image.

Запустим Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Docker Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π°, созданного Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΡˆΠ°Π³Π°Ρ…. НазовСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Β«testΒ» ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²Ρ‹Π²ΠΎΠ΄ Β«Hello worldΒ» Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker run. Ubuntu, CentOS ΠΈΠ»ΠΈ Debian β€” опСрационная систСма значСния Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚, синтаксис Π²Π΅Π·Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ.

sudo docker run --name test my_image
Hello World

ПослС Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, всС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π» Π·Π° врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ этого Π½Π΅ происходило, прСдусмотрСна Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ монтирования Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰. Docker автоматичСски создаСт ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ /var/lib/docker/volume, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° постоянной основС ΠΈ совмСстно ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«selectelΒ»:

sudo docker volume create selectel

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ внСшним Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ:

sudo docker run --name=test --mount source=selectel,destination=/selectel my_image

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ появятся Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /selectel Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС сСрвСра.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Docker ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для обСспСчСния ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСды со всСми Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΈ конфигурациями, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π’ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡ… количСство ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Π°ΠΎΡ‚ΠΈΡ‡Π½ΠΎ, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ появятся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. НиТС ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅ΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹:

sudo docker container ls -a
CONTAINER ID   IMAGE      COMMAND                CREATED         STATUS                     PORTS     NAMES
b52480dd6110   my_image   "echo 'Hello World'"   4 minutes ago   Exited (0) 4 minutes ago             test

Π£Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ запустили. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² β€” Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -a. Π’Π°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ список id ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:

sudo docker container ls –aq
b52480dd6110

МоТно ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

sudo docker container stop [container_id]

А ΠΌΠΎΠΆΠ½ΠΎ всС Ρ€Π°Π·ΠΎΠΌ:

sudo docker container stop $(docker container ls –aq)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅, созданныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

sudo docker container stop $(docker container ls –aq) && docker system prune –af ––volumes

Команда выполняСт остановку ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², пСрСчислСнных Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках. Атрибут && прСдписываСт Docker ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС остановлСнныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ Ρ‚ΠΎΠΌΠ°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ –af ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎ всСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ (a) Π±Π΅Π· нСобходимости подтвСрТдСния (f).

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠ΄Π°Π»ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Один ΠΈΠ»ΠΈ всС сразу:

sudo docker container rm [container_id]
sudo docker container rm $(docker container ls –aq)

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. НапримСр, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ ΡƒΠ΄Π°Π»ΠΈΠΌ всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±Π΅Π· ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠ΅ΠΉΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Β«selectelΒ».

sudo docker container prune --filter=”label!=maintainer=selectel”

Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

  • label=<ΠΊΠ»ΡŽΡ‡>
  • label=<ΠΊΠ»ΡŽΡ‡>=<Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅>
  • label!=<ΠΊΠ»ΡŽΡ‡>
  • label!=<ΠΊΠ»ΡŽΡ‡>=<Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅>

ΠžΠ±Ρ€Π°Π·Ρ‹ Docker β€” это Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ нСсколько слоСв, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для запуска ΠΊΠΎΠ΄Π° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡΡ‚Π°Ρ€Π΅Π²Π°Ρ‚ΡŒ ΠΈ, соотвСтствСнно, Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ мСсто Π½Π° дискС. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ сСйчас находятся Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС:

sudo docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
my_image     latest    889af78121ad   24 hours ago   100MB
ubuntu       latest    4dd97cefde62   2 weeks ago    72.9MB

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΡ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ· ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ IMAGE ID.

docker image rm [image_id1] [image_id2]

Аналогичным ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, удаляСмыС ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ Π΄Π°Ρ‚Π΅ создания. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт ΠΎΠ±Ρ€Π°Π·Ρ‹ с ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«selectelΒ», Π° вторая всС ΠΎΠ±Ρ€Π°Π·Ρ‹, созданныС Π·Π° послСдниС 24 часа.

sudo docker image prune ––filter=”label=selectel”
sudo docker image prune –a ––filter β€œuntil=24h”

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ послС остановки Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. НапримСр, Ссли Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚Π°ΠΌ Π·Π° врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±Ρ‹Π»ΠΈ созданы ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, послС остановки ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΠΏΠ°Π΄ΡƒΡ‚. Для этого, ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, располоТСнныС, нСпосрСдствСнно Π½Π° дискС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

sudo docker volume ls

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Docker, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

sudo docker volume rm [VolumeName]

Π‘Π΅Ρ‚ΠΈ Docker ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ свободно ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСтСвого моста Docker. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ сСти, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ:

sudo docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
1e31297e1d6a   bridge    bridge    local
783575476ed4   host      host      local
c7c5d2496494   none      null      local

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ сСти Docker, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

sudo docker network rm [networkID]

Команда prune автоматичСски удаляСт всС рСсурсы, Π½Π΅ связанныС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ способ очистки Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎΠΌΠΎΠ² ΠΈ сСтСй.

sudo docker system prune

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

  • -a β€” для удалСния всСх остановлСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ².
  • -f β€” ΠžΠ±ΠΎΠΉΡ‚ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ подтвСрТдСния
  • β€”volumes β€” УдаляСт всС Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΎΠΌΠ°.

Π­Ρ‚Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΎΠ±Ρ€Π°Π·ΠΎΠ², дисковых Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ сСтСй:

sudo docker container prune
sudo docker image prune
sudo docker volume prune
sudo docker network prune

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ -a, Π² этом случаС ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΈ зависшиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

Π Π°Π±ΠΎΡ‚Π° с Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Docker Hub

Docker Hub β€” это общСдоступный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС собствСнный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π° основС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Ubuntu), с Docker Hub загруТаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π·. Но ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, Π½ΠΎ ΠΈ Π²Ρ‹Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ расскаТСм ΠΊΠ°ΠΊ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ, понадобится учСтная запись Π½Π° Docker Hub. РСгистрация бСсплатная. БСйчас Π² нашСм тСстовом ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ Π½Π° Docker Hub Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ рСпозитория. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΡƒ создадим ΠΎΠ΄ΠΈΠ½ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ Create Repository.

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Π²Π²Π΅Π΄Π΅ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Docker Hub. На Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ΄Π°Π΄ΠΈΠΌ имя ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ ΠΏΡ€ΠΈ рСгистрации. Π—Π°Ρ‚Π΅ΠΌ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ.

sudo docker login -u [docker-hub-username]

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Установим ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΌΠ΅Ρ‚ΠΊΡƒ, Π° Π·Π°Ρ‚Π΅ΠΌ зальСм Π΅Π³ΠΎ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

sudo docker tag my_image [docker-hub-username]/my_image:0.0.1
sudo docker push [docker-hub-username]/my_image:0.0.1
The push refers to repository [docker.io/[docker-hub-username]/my_image]
8c25b6d14dcf: Pushed
c20d459170d8: Pushed
db978cae6a05: Pushed
aeb3f02e9374: Pushed
0.0.1: digest: sha256: size: 1155

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΎΠ±Ρ€Π°Π· появится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π Π°Π±ΠΎΡ‚Π° с частным Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ

Частный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ β€” это Π°Π½Π°Π»ΠΎΠ³ Docker Hub, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π² ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ вашим ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.

Запустим Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π³ ΠΊ ΠΎΠ±Ρ€Π°Π·Ρƒ, добавляСм созданный ΠΎΠ±Ρ€Π°Π· my_image Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ:

docker tag my_image localhost:5000/my_image
docker push localhost:5000/my_image
docker pull localhost:5000/my_image

Частный Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π½Π° основС Docker, ΠΈΡ… созданиС, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π² Docker Hub ΠΈ локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Docker сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ систСмных администраторов. ЛСгковСсныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡŽΡ‚ мСньшСС количСство рСсурсов (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин) ΠΈ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹.

с нуля Π΄ΠΎ кластСра Π½Π° AWS / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€?

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ:

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развёртывания ΠΈ управлСния прилоТСниями Π² срСдС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы; позволяСт Β«ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСм Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ зависимостями Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт срСду ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Ого! Как ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, Π”ΠΎΠΊΠ΅Ρ€ это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, систСмными администраторам ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ спСциалистам Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΈΡ… прилоТСния Π² пСсочницС (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ), для запуска Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Linux. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ прСимущСство Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСми Π΅Π³ΠΎ зависимостями Π² стандартизированный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, поэтому с Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму ΠΈ рСсурсы Π±ΠΎΠ»Π΅Π΅ эффСктивно.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π² индустрии Π½Π° сСгодняшний дСнь β€” это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ гостСвой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы сСрвСра.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для ΠΏΠΎΠ»Π½ΠΎΠΉ изоляции процСсса для прилоТСния: ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° софт гостСвой ОБ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Но Π·Π° Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. БущСствуСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, нСобходимая для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΆΠ΅Π»Π΅Π·Π° гостСвой ОБ.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ схоТий с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, Π½ΠΎ благодаря ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π΄Π΅Π»Π°ΡŽΡ‚ это с Π² Ρ€Π°Π·Ρ‹ мСньшСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…?

Π’Π·Π»Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±Ρ‹Π» ΠΏΠΎ-настоящСму эпичным. НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ сами ΠΏΠΎ сСбС β€” Π½Π΅ новая тСхнология, Π΄ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΊ распространСны ΠΈ популярны. Π”ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, прСдоставив стандартный API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сильно упростил созданиС ΠΈ использованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» сообщСству вмСстС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² Β The RegisterΒ Π² сСрСдинС 2014 говорится, Ρ‡Ρ‚ΠΎ Π“ΡƒΠ³Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС Π΄Π²ΡƒΡ… ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π² нСдСлю.

Google Trends для слова ‘Docker’

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ росту Π”ΠΎΠΊΠ΅Ρ€Π°, компания-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Docker Inc. Π±Ρ‹Π»Π° ΠΎΡ†Π΅Π½Π΅Π½Π° Π² Π΄Π²Π° с лишним ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²! Благодаря прСимущСствам Π² эффСктивности ΠΈ портативности, Π”ΠΎΠΊΠ΅Ρ€ Π½Π°Ρ‡Π°Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС большС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈ сСйчас стоит Π²ΠΎ Π³Π»Π°Π²Π΅ двиТСния ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (containerization). Как соврСмСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ этот Ρ‚Ρ€Π΅Π½Π΄ ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ.

Π§Π΅ΠΌΡƒ мСня Π½Π°ΡƒΡ‡ΠΈΡ‚ это пособиС?

Π­Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ пособиС ΠΏΠΎ всСм аспСктам Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ ΠΌΠΈΡ„ΠΎΠ² ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π΅ ΠΈ Π΅Π³ΠΎ экосистСмС, ΠΎΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ нСбольшой ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎ сборкС ΠΈ дСплою собствСнных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Amazon Web Services для дСплоя статичных сайтов, ΠΈ Π΄Π²Π° динамичСских Π²Π΅Π±-прилоТСния Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π° EC2 с использованиСм Elastic Beanstalk ΠΈ Elastic Container Service. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ, это пособиС даст Π²Π°ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ содСрТит нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… посвящСн ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ аспСкту Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° Π“ΠΈΡ‚Ρ…Π°Π±Π΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ этом пособии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия Π”ΠΎΠΊΠ΅Ρ€Π° 1.12.0-rc2. Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, поТалуйста, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅Β issue. Бпасибо!

ΠŸΡ€Π΅-Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹

ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для прохоТдСния этого пособия β€” это Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой ΠΈ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. ΠžΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π½ΠΎ Π½Π΅ обязатСлСн. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ столкнСмся с нСсколькими ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ сСрвисами. Π’Π°ΠΌ понадобится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° этих сайтах:

Настройка ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

Установка ΠΈ настройка всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ тяТСлой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π”ΠΎΠΊΠ΅Ρ€ стал довольно ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΈ установка ΠΈ запуск Π΅Π³ΠΎ Π½Π° любой ОБ стало ΠΎΡ‡Π΅Π½ΡŒ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π˜Ρ‚Π°ΠΊ, установим Π”ΠΎΠΊΠ΅Ρ€.

Π”ΠΎΠΊΠ΅Ρ€

Π•Ρ‰Π΅ нСсколько Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Π½Π°Π·Π°Π΄ запуск Π”ΠΎΠΊΠ΅Ρ€Π° Π½Π° OS X ΠΈ Windows Π±Ρ‹Π» Π±Ρ‹Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ. Но ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΈ сСгодня вСсь процСсс β€” ΠΏΡ€ΠΎΡ‰Π΅ Π½Π΅ΠΊΡƒΠ΄Π°. Π­Ρ‚ΠΎΡ‚ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» getting startedΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ инструкции ΠΏΠΎ установкС на Мак,Β Linux ΠΈ Windows.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, всС Π»ΠΈ установлСно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ:

$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Python

Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдустановлСн Π½Π° OS X ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠŸΠΈΡ‚ΠΎΠ½, Ρ‚ΠΎ скачайтС установщик здСсь.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ:

$ python --version
Python 2.7.11

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pip для установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для нашСго прилоТСния. Если pip Π½Π΅ установлСн, Ρ‚ΠΎ скачайтС Π²Π΅Ρ€ΡΠΈΡŽ для своСй систСмы.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ запуститС Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ pip --version
pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)

Java (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Elasticsearch для хранСния ΠΈ поиска. Для локального запуска Elasticsearch Π²Π°ΠΌ понадобится Java. Π’ этом пособии всС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ локально Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Java. Если Java установлСна, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β java -versionΒ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)


1.0 Π˜Π³Ρ€Π°Π΅ΠΌ с Busybox

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ установлСно, ΠΏΠΎΡ€Π° Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Busybox Π½Π° нашСй систСмС ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ docker run.

Для Π½Π°Ρ‡Π°Π»Π°, запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ docker pull busybox

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ устанавливали Π”ΠΎΠΊΠ΅Ρ€ Π½Π° свою систСму, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ появлСниС сообщСния permission denied. Если Π²Ρ‹ Π½Π° МакС, Ρ‚ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π”ΠΎΠΊΠ΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½. Если Π²Ρ‹ Π½Π° ЛинуксС, Ρ‚ΠΎ запуститС эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с sudo. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ dockerΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Команда pull скачиваСт ΠΎΠ±Ρ€Π°Π· busyboxΒ ΠΈΠ· рСгистра Π”ΠΎΠΊΠ΅Ρ€Π°Β ΠΈ сохраняСт Π΅Π³ΠΎ локально. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker images, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² систСмС.

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox                 latest              c51f86c28340        4 weeks ago         1.109 MB

1.1 Docker Run

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с этим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker run:

$ docker run busybox
$

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ! Π­Ρ‚ΠΎ Π±Π°Π³? Ну, Π½Π΅Ρ‚. Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ всСго. Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нашСл ΠΎΠ±Ρ€Π°Π· (Π² нашСм случаС, busybox), Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠœΡ‹ сдСлали docker run busybox, Π½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ загрузился, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ пустая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ. Ну, Π΄Π°, ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ поинтСрСснСС.

$ docker run busybox echo "hello from busybox"
hello from busybox

Π£Ρ€Π°, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄. Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΏΠΎΡΠ»ΡƒΡˆΠ½ΠΎ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· Π½Π΅Π³ΠΎ. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ быстрыС!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker ps. Она Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран список всСх Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² сСйчас Π½Π΅Ρ‚, поэтому выводится пустая строка. НС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:Β docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
305297d7a235        busybox             "uptime"            11 minutes ago      Exited (0) 11 minutes ago                       distracted_goldstine
ff0a5c3750b9        busybox             "sh"                12 minutes ago      Exited (0) 12 minutes ago                       elated_ramanujan

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π΅Π½ список всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ запускали. Π’ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ STATUS ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π°Π·Π°Π΄.

Π’Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ:

$ docker run -it busybox sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # uptime
 05:45:21 up  5:58,  0 users,  load average: 0.00, 0.01, 0.04

 

Команда run с Ρ„Π»Π°Π³ΠΎΠΌ -it ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ tty Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅.

Опасно!: Если хочСтся острых ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒΒ rm -rf binΒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Но ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ запускаСтС Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ снаруТи. Если сдСлаСтС это снаруТи, Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅Β ls,Β echo пСрСстанут Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Когда Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° всС пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, просто Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈ запуститС Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run -it busybox sh. Π”ΠΎΠΊΠ΅Ρ€ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΈ запускС, поэтому всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ снова.

На этом Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΡƒΡ€ ΠΏΠΎ возмоТностям ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker run Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ довольно часто. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ поняли ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΒ run, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ docker run --help, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ². Π‘ΠΊΠΎΡ€ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько способов использования docker run.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ рассмотрим ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker ps -a всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ остатки Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². На протяТСнии этого пособия, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker run нСсколько Ρ€Π°Π·, ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ, Π±Π΅Π·Π΄ΠΎΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡŠΠ΅Π΄Π°Ρ‚ΡŒ дисковоС пространство. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я взял Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β docker rm. ΠŸΡ€ΠΎΡΡ‚ΠΎ скопируйтС ID (ΠΌΠΎΠΆΠ½ΠΎ нСсколько) ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

$ docker rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ снова Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° экран. Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ копирования ΠΈ вставлСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker rm $(docker ps -a -q -f status=exited)

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… статус exited. Π€Π»Π°Π³Β -q Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числСнныС ID, Π° Ρ„Π»Π°Π³Β -fΒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° основС прСдоставлСнных условий. ПослСдняя полСзная Π΄Π΅Ρ‚Π°Π»ΡŒ β€” ΠΊΠΎΠΌΠ°Π½Π΄Π΅Β docker run ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ --rm, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… запусков ΠΈ экспСримСнтов с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker rmi.

1.2 ВСрминология

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали ΠΌΠ½ΠΎΠ³ΠΎ спСцифичного для Π”ΠΎΠΊΠ΅Ρ€Π° ΠΆΠ°Ρ€Π³ΠΎΠ½Π°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π°.

  • Images (ΠΎΠ±Ρ€Π°Π·Ρ‹)Β — Π‘Ρ…Π΅ΠΌΡ‹ нашСго прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ использовали ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker pullΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· busybox.
  • Containers (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹)Β — Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ создали ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker run, ΠΈ использовали ΠΎΠ±Ρ€Π°Π· busybox, скачанный Ρ€Π°Π½Π΅Π΅. Бписок Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker ps.
  • Docker Daemon (Π΄Π΅ΠΌΠΎΠ½ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ сСрвис, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π½Π° хост-машинС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС, запуск ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π”Π΅ΠΌΠΎΠ½ β€” это процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ взаимодСйствуСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚.
  • Docker Client (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, которая позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Β Kitematic, с графичСским интСрфСйсом.
  • Docker HubΒ — РСгистр ДокСр-ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π“Ρ€ΡƒΠ±ΠΎ говоря, Π°Ρ€Ρ…ΠΈΠ² всСх доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ собствСнный рСгистр ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для получСния ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

2.0 Π’Π΅Π±-прилоТСния ΠΈ Π”ΠΎΠΊΠ΅Ρ€

Π‘ΡƒΠΏΠ΅Ρ€! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Β docker run, ΠΏΠΎΠΈΠ³Ρ€Π°Π»ΠΈ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π’ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ этими знаниями, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΡˆΡ‚ΡƒΠΊΠ°ΠΌ: дСплою Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ!

2.1 БтатичСскиС сайты

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ рассмотрим самый простой статичСский Π²Π΅Π±-сайт. Π‘ΠΊΠ°Ρ‡Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· Docker Hub, запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ посмотрим, насколько Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр.

ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ. Для одностраничного сайта Π½Π°ΠΌ понадобится ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π·Π°Ρ€Π°Π½Π΅Π΅ создал для этого пособия ΠΈ размСстил Π² рСгистрС —Β prakhar1989/static-site. МоТно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run.

$ docker run prakhar1989/static-site

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π·Π° Π½Π΅ сущСствуСт локально, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт ΠΎΠ±Ρ€Π°Π· ΠΈΠ· рСгистра, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустит Π΅Π³ΠΎ. Если всС Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ сообщСниС Nginx is running... Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр Π·Π°ΠΏΡƒΡ‰Π΅Π½. Как ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сайт Π² дСйствии? На ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр? И, Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· хост-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β docker runΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π½Π΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ ΠΊ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ спокойно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΎ называСтся detachedΒ mode.

$ docker run -d -P --name static-site prakhar1989/static-site
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810

Π€Π»Π°Π³Β -dΒ ΠΎΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚ (detach) Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Ρ„Π»Π°Π³Β -P сдСлаСт всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ случайными, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ„Π»Π°Π³Β --name это имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker port [CONTAINER].

$ docker port static-site
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://localhost:32769Β Π² своСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ docker-toolbox, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker-machine ip default Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP-адрСс.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ свой ΠΏΠΎΡ€Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ соСдинСния Π½Π° Π½Π΅Π³ΠΎ.

$ docker run -p 8888:80 prakhar1989/static-site
Nginx is running...

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запуститС docker stopΒ ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ID) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, всС Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ это Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр, Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ΡˆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Π΅Π±-сСрвСр Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π·Π°, Π²Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно β€” Π° ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·? ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ эту Ρ‚Π΅ΠΌΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

2.2 ΠžΠ±Ρ€Π°Π·Ρ‹

ΠœΡ‹ касались ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Ρ€Π°Π½Π΅Π΅, Π½ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ заглянСм Π³Π»ΡƒΠ±ΠΆΠ΅: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΎΠ±Ρ€Π°Π·Ρ‹. НаконСц, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ собствСнный ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π΅Π³ΠΎ Π½Π°Β AWS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ. ΠšΡ€ΡƒΡ‚ΠΎ? ΠšΡ€ΡƒΡ‚ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ.

ΠžΠ±Ρ€Π°Π·Ρ‹ это основы для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ скачали (pull)Β ΠΎΠ±Ρ€Π°Π· ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Busybox ΠΈΠ· рСгистра, ΠΈ попросили ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, основанный Π½Π° этом ΠΎΠ±Ρ€Π°Π·Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ список доступных локально ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker images.

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
prakhar1989/catnip              latest              c7ffb5626a50        2 hours ago         697.9 MB
prakhar1989/static-site         latest              b270625a1631        21 hours ago        133.9 MB
python                          3-onbuild           cf4002b2c383        5 days ago          688.8 MB
martin/docker-cleanup-volumes   latest              b42990daaca2        7 weeks ago         22.14 MB
ubuntu                          latest              e9ae3c220b23        7 weeks ago         187.9 MB
busybox                         latest              c51f86c28340        9 weeks ago         1.109 MB
hello-world                     latest              0a6ba66e537a        11 weeks ago        960 B

Π­Ρ‚ΠΎ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я скачал ΠΈΠ· рСгистра, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ я сдСлал сам (скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ). TAG β€” это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ снимок ΠΈΠ»ΠΈ ΡΠ½ΡΠΏΡˆΠΎΡ‚ (snapshot) ΠΎΠ±Ρ€Π°Π·Π°, Π° IMAGE ID β€” это ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Π°.

Для простоты, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΊΠ°ΠΊ ΠΊ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. ΠžΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎΒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒΒ Ρ измСнСниями, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько вСрсий. Если Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ latest. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π°Β ubuntu:

$ docker pull ubuntu:12.04

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· рСгистра (Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Docker Hub) ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный. На Docker Hub Π΅ΡΡ‚ΡŒ дСсятки тысяч ΠΎΠ±Ρ€Π°Π·ΠΎΠ². МоТно ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docker search.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ:

  • Base images (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ±Ρ€Π°Π·Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ubuntu, busybox ΠΈΠ»ΠΈ debian.
  • Child images (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, построСнныС Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ… ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ.

  • ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Docker. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎ слово. Π’ спискС Π²Ρ‹ΡˆΠ΅Β python,Β ubuntu,Β busybox ΠΈ hello-worldΒ β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹Β β€” ΠΎΠ±Ρ€Π°Π·Ρ‹, созданныС простыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ мСня ΠΈ вас. Они построСны Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡƒΒ user/image-name.

2.3 Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚, самоС врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный ΠΎΠ±Ρ€Π°Π·. ЦСль этого Ρ€Π°Π·Π΄Π΅Π»Π° β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с простым ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Flask. Для этого пособия я сдСлал ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΎΠ΅Β ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ Π³ΠΈΡ„ΠΊΡƒ с кошкой. Ну, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, ΠΊΡ‚ΠΎ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ кошСк? Π‘ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊ сСбС Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ.

Π’Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ локально. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ flask-app ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ cdΒ ΠΈ установитС зависимости.

$ cd flask-app
$ pip install -r requirements.txt
$ python app.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Если всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://localhost:5000 Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² дСйствии.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если ΠΊΠΎΠΌΠ°Π½Π΄Π° pip install ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибками «permission denied», Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ с sudo. Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ pip install --user -r requirements.txt.

Выглядит ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ основаны Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Python 3. Π’ частности, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° вСрсия python:3-onbuildΒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° с ΠŸΠΈΡ‚ΠΎΠ½ΠΎΠΌ.

Π§Ρ‚ΠΎ Π·Π° вСрсия onbuild, спроситС Π²Ρ‹?

Π­Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ нСсколько Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ONBUILD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ сборкС Π±ΡƒΠ΄Π΅Ρ‚ скопирован Ρ„Π°ΠΉΠ» requirements.txt, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ pip install с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ тСкущая дирСктория Π±ΡƒΠ΄Π΅Ρ‚ скопирована Π²Β /usr/src/app.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, вСрсия onbuildΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ…Π΅Π»ΠΏΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ скучныС процСссы запуска прилоТСния. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипты), ΠΎΠ±Ρ€Π°Π·Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ всС Π·Π° вас. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ всС ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ для создания своСго ΠΎΠ±Ρ€Π°Π·Π°: Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? ΠžΡ‚Π²Π΅Ρ‚: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Dockerfile.

2.4 Dockerfile

DockerfileΒ β€” это простой тСкстовый Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится список ΠΊΠΎΠΌΠ°Π½Π΄ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ простой способ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания ΠΎΠ±Ρ€Π°Π·Π°. Π‘Π°ΠΌΠΎΠ΅ классноС, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Dockerfile ΠΏΠΎΡ‡Ρ‚ΠΈΒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ своим Π°Π½Π°Π»ΠΎΠ³Π°ΠΌ Π² Linux. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅ΡΡ‚ΡŒ Dockerfile, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ всС Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ с нуля. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ пустой Ρ„Π°ΠΉΠ» Π² любимом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, ΠΈ сохранитС Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π³Π΄Π΅ находится flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. НазовитС Ρ„Π°ΠΉΠ» Dockerfile.

Для Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово FROM.

FROM python:3-onbuild

Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для копирования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ установки зависимостСй. Но ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, onbuild-вСрсия Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π±Π΅Ρ€Π΅Ρ‚ эти Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° сСбя. Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5000, поэтому ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΅Π³ΠΎ:

EXPOSE 5000

ПослСдний шаг β€” ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для запуска прилоТСния. Π­Ρ‚ΠΎ просто python ./app.py. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ CMD:

CMD ["python", "./app.py"]

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β CMD β€” это ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ стартС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш DockerfileΒ Π³ΠΎΡ‚ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ выглядит:

# our base image
FROM python:3-onbuild

# specify the port number the container should expose
EXPOSE 5000

# run the application
CMD ["python", "./app.py"]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. Команда docker build занимаСтся слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ создания ΠΎΠ±Ρ€Π°Π·Π° Π½Π° основС Dockerfile.

Листинг Π½ΠΈΠΆΠ΅ дСмонстрируСт процСсс. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ сами (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ†Π΅), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΌ Π±Ρ‹Π» ваш username вмСсто ΠΌΠΎΠ΅Π³ΠΎ. Username Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€ΠΈ рСгистрации Π½Π° Docker hub. Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Ρ‚ΠΎ сдСлайтС это Π΄ΠΎ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Команда docker build довольно проста: ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π³ с Ρ„Π»Π°Π³ΠΎΠΌΒ -tΒ ΠΈ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚Β Dockerfile.

$ docker build -t prakhar1989/catnip .
Sending build context to Docker daemon 8.704 kB
Step 1 : FROM python:3-onbuild
# Executing 3 build triggers...
Step 1 : COPY requirements.txt /usr/src/app/
 ---> Using cache
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Using cache
Step 1 : COPY . /usr/src/app
 ---> 1d61f639ef9e
Removing intermediate container 4de6ddf5528c
Step 2 : EXPOSE 5000
 ---> Running in 12cfcf6d67ee
 ---> f423c2f179d1
Removing intermediate container 12cfcf6d67ee
Step 3 : CMD python ./app.py
 ---> Running in f01401a5ace9
 ---> 13e87ed1fbc2
Removing intermediate container f01401a5ace9
Successfully built 13e87ed1fbc2

Если Ρƒ вас Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Π°Β python:3-onbuild, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт Π΅Π³ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ΡΡ Π·Π° созданиС вашСго ΠΎΠ±Ρ€Π°Π·Π°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠΎΠ΅Π³ΠΎ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ onbuild. Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· Π³ΠΎΡ‚ΠΎΠ²! ЗапуститС docker imagesΒ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ свой ΠΎΠ±Ρ€Π°Π· Π² спискС.

ПослСдний шаг β€” Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ username Π½Π° свой):

$ docker run -p 8888:5000 prakhar1989/catnip
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создали свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π”ΠΎΠΊΠ΅Ρ€Π°!

2.5 Docker Π½Π° AWS

Π§Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСльзя ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ нашС ΠΎΡ„ΠΈΠ³Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AWSΒ Elastic Beanstalk Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π·Π° ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΠΈΠΊΠΎΠ². ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Beanstalk Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Docker push

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ Π½Π° AWS это ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π· Π² рСгистрС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· AWS. Π•ΡΡ‚ΡŒ нСсколько Docker-рСгистров (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный). Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΒ Docker Hub. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

$ docker push prakhar1989/catnip

Если это ваша пСрвая публикация, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ попросит вас Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Π²Ρ…ΠΎΠ΄Π° Π² Docker Hub.

$ docker login
Username: prakhar1989
WARNING: login credentials saved in /Users/prakhar/.docker/config.json
Login Succeeded

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° своС. ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ username/image_name, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΠΊΡƒΠ΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·.

ПослС этого ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° свой ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. НапримСр, Π²ΠΎΡ‚ страница ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ β€” Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ рСгистрС (ΠΈΠ»ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ рСгистрС Π²ΠΎΠΎΠ±Ρ‰Π΅) Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ стартапа-Π΅Π΄ΠΈΠ½ΠΎΡ€ΠΎΠ³Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот шаг. ΠœΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ свой ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ, пропустив нСсколько ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… шагов.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш ΠΎΠ±Ρ€Π°Π· ΠΎΠ½Π»Π°ΠΉΠ½, ΠΈ любой Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ docker run -p 8888:5000 prakhar1989/catnip

Если Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π²Ρ‹ ΠΌΡƒΡ‡Π°Π»ΠΈΡΡŒ с установкой локального Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ окруТСния ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΡ‚ΠΎ это Π·Π²ΡƒΡ‡ΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π”ΠΎΠΊΠ΅Ρ€ β€” это сила!

Beanstalk

AWS Elastic Beanstalk (EB) это PaaS (Platform as a Service β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊ сСрвис) ΠΎΡ‚ Amazon Web Services. Если Π²Ρ‹ использовали Heroku, Google App Engine ΠΈ Ρ‚.Π΄., Ρ‚ΠΎ всС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ. Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ сообщаСтС EB ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° EB занимаСтся всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ, Π² Ρ‚ΠΎΠΌ числС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°ΠΌΠΈ. Π’ Π°ΠΏΡ€Π΅Π»Π΅ 2014 Π² EB Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для дСплоя. Π£ EB ΠΎΡ‡Π΅Π½ΡŒ понятный интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, поэтому для простоты Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Π±-интСрфСйс для запуска нашСго прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π²Π°ΠΌ потрСбуСтся Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° AWS. Если Ρƒ вас Π΅Π³ΠΎ Π½Π΅Ρ‚, Ρ‚ΠΎ создайтС Π΅Π³ΠΎ. Для этого потрСбуСтся ввСсти Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, эта услуга бСсплатна, ΠΈ всС, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого пособия Ρ‚ΠΎΠΆΠ΅ бСсплатно.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ:

  • Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² свою консоль AWS.
  • НаТмитС Π½Π° Elastic Beanstalk. Бсылка находится Π² сСкции compute, Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ. Или просто ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ сюда.

  • НаТмитС Π½Π° «Create New Application» Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ.
  • Π”Π°ΠΉΡ‚Π΅ своСму ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ (Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅) имя ΠΈ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ описаниС.
  • Π½Π° экранС New EnvironmentΒ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅Β Web Server Environment.
  • Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ экран ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ DockerΒ ΠΈΠ· Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. МоТно ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒΒ Environment typeΒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. НаТмитС Next.

  • Π’ΡƒΡ‚ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ систСмС EB ΠΎ нашСм ΠΎΠ±Ρ€Π°Π·Π΅. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β Ρ„Π°ΠΉΠ» Dockerrun.aws.jsonΒ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ flask-appΒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅Β NameΒ ΠΎΠ±Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ соотвСтствовало названию вашСго ΠΎΠ±Ρ€Π°Π·Π°. НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, я ΠΎΠΏΠΈΡˆΡƒ содСрТаниС Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅. ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ «upload your own» ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ».
  • Π”Π°Π»Π΅Π΅, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ окруТСния ΠΈ URL. Π­Ρ‚ΠΎΡ‚ URL ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅.
  • Пока Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π°Π²ΠΎΠΊ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽΒ Additional Resources. НаТмитС Next ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Configuration Details.
  • Π’ этой сСкции Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ инстанса t1.micro. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это бСсплатный тип ΠΎΡ‚ AWS. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π²Ρ…ΠΎΠ΄Π°. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‚ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈ просто пропуститС эту Ρ‡Π°ΡΡ‚ΡŒ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ.
  • Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Environment TagsΒ andΒ Permissions, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ просто ΠΆΠΌΠΈΡ‚Π΅ Next Π΄Π²Π° Ρ€Π°Π·Π° подряд. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ экран Review. Если всС выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π½Π°ΠΆΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒΒ Launch.
  • На послСднСм экранС Π±ΡƒΠ΄Π΅Ρ‚ нСсколько спиннСров. Π­Ρ‚ΠΎ поднимаСтся ΠΈ настраиваСтся вашС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ пяти ΠΌΠΈΠ½ΡƒΡ‚ для ΠΏΠ΅Ρ€Π²ΠΎΠΉ настройки.

Пока ΠΆΠ΄Π΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ взглянСм Π½Π° Ρ„Π°ΠΉΠ»Β Dockerrun.aws.json. Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» для AWS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится информация ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π”ΠΎΠΊΠ΅Ρ€Π°. EB ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°.

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "prakhar1989/catnip",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ],
  "Logging": "/var/log/nginx"
}

Π€Π°ΠΉΠ» довольно понятный, Π½ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°, ΠΈ EB Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ инстанс ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ². Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EB ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска прилоТСния.

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всС красС. ΠŸΠΎΡˆΠ»ΠΈΡ‚Π΅ адрСс своим Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ Π³ΠΈΡ„ΠΊΠ°ΠΌΠΈ с кошками.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅! ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ шагов, Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ EB ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π₯Π΅Ρ€ΠΎΠΊΡƒ нСсколькими наТатиями клавиш. НадСюсь, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π”ΠΎΠΊΠ΅Ρ€ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ дСплоя Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π― ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ AWSΒ ΠΏΡ€ΠΎ single-container Docker environment Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ возмоТности Π² EB.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ, послСднСй части пособия, ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дальшС ΠΈ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ постоянноС бэкэнд-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

3.0 ΠœΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ окруТСния

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΈ просто Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с простого статичСского сайта, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустили Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ локально ΠΈΠ»ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ΅, нСсколькими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. ΠžΠ±Ρ‰Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎΒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ управлСния сСрвисами Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ соврСмСнныС прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ простыС. ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда Π΅ΡΡ‚ΡŒ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°). БистСмы Π²Ρ€ΠΎΠ΄Π΅ Redis ΠΈ Memcached стали практичСски ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся «Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся нСсколько Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… сСрвисов.

Π’ частности, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π”ΠΎΠΊΠ΅Ρ€-окруТСниями. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², спроситС Π²Ρ‹? Ну, ΠΎΠ΄Π½Π° ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдоставляСт ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ. ИдСя совмСщСния процСсса ΠΈ Π΅Π³ΠΎ зависимостСй Π² ΠΎΠ΄Π½ΠΎΠΉ пСсочницС (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ) ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом.

Аналогично Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ Π½Π° части, стоит ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Π Π°Π·Π½Ρ‹ΠΌ частям скорСС всСго Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ рСсурсы, ΠΈ трСбования ΠΌΠΎΠ³ΡƒΡ‚ расти с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Если ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ эти части ΠΈ помСстим Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий Ρ‚ΠΈΠΏ рСсурсов. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ совмСщаСтся с ΠΈΠ΄Π΅Π΅ΠΉ ΠΌΠΈΠΊΡ€ΠΎ сСрвисов. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π”ΠΎΠΊΠ΅Ρ€ (ΠΈ любая другая тСхнология ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ) находится на пСрСдовой соврСмСнных ΠΌΠΈΠΊΡ€ΠΎ сСрвисных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€.

3.1 SF Food Trucks

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅ΠΌ Π² Π”ΠΎΠΊΠ΅Ρ€, называСтся SF Food Trucks (ΠΊ соТалСнию, сСйчас ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.). Моя Ρ†Π΅Π»ΡŒ Π±Ρ‹Π»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ (ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° настоящСС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°), Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ сСрвис, Π½ΠΎ Π½Π΅ слишком слоТноС для этого пособия. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π».

Бэкэнд прилоТСния написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅ (Flask), Π° для поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡΒ Elasticsearch. Как ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² этом пособии, ΠΊΠΎΠ΄ находится Π½Π°Β Github. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ завСлись (надСюсь), Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ этот процСсс. Π’ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ бэкэнд Π½Π° Flask ΠΈ сСрвис Elasticsearch. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: ΠΎΠ΄ΠΈΠ½ для Flask, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для Elasticsearch (ES). Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ станСт популярным, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС, смотря Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ·ΠΊΠΎΠ΅ мСсто.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎ Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ Π½Π΅ слоТно, ΠΏΡ€Π°Π²Π΄Π°? ΠœΡ‹ ΡƒΠΆΠ΅ создавали Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. А для Elasticsearch… Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Ρ…Π°Π±Π΅:

$ docker search elasticsearch
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
elasticsearch                     Elasticsearch is a powerful open source se...   697       [OK]
itzg/elasticsearch                Provides an easily configurable Elasticsea...   17                   [OK]
tutum/elasticsearch               Elasticsearch image - listens in port 9200.     15                   [OK]
barnybug/elasticsearch            Latest Elasticsearch 1.7.2 and previous re...   15                   [OK]
digitalwonderland/elasticsearch   Latest Elasticsearch with Marvel & Kibana       12                   [OK]
monsantoco/elasticsearch          ElasticSearch Docker image                      9                    [OK]

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· для Elasticsearch. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ES, Π½ΡƒΠΆΠ½ΠΎ всСго лишь Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ docker run, ΠΈ вскорС Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ ES.

$ docker run -dp 9200:9200 elasticsearch
d582e031a005f41eea704cdc6b21e62e7a8a42021297ce7ce123b945ae3d3763

$ curl 0.0.0.0:9200
{
  "name" : "Ultra-Marine",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с Flask. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ΅Π½ Dockerfile. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ сСкции ΠΌΡ‹ использовали ΠΎΠ±Ρ€Π°Π·Β python:3-onbuild Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ. Однако, Π² этом Ρ€Π°Π·, ΠΊΡ€ΠΎΠΌΠ΅ установки зависимостСй Ρ‡Π΅Ρ€Π΅Π· pip, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Javascript-Ρ„Π°ΠΉΠ» для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°. Для этого понадобится Nodejs. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ свой Π±ΠΈΠ»Π΄ с нуля, поэтому Π½Π°Ρ‡Π½Π΅ΠΌ с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ubuntu.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли оказываСтся, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π· Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ спокойно создавайтС свой ΠΎΠ±Ρ€Π°Π· Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСм, для ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π° Docker Hub ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉΒ Dockerfile Π½Π° Github. ΠŸΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π”ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Ρ‹ β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… способов Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹.

Наш Dockerfile для Flask-прилоТСния выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# start from base
FROM ubuntu:14.04
MAINTAINER Prakhar Srivastav <[email protected]>

# install system-wide deps for python and node
RUN apt-get -yqq update
RUN apt-get -yqq install python-pip python-dev
RUN apt-get -yqq install nodejs npm
RUN ln -s /usr/bin/nodejs /usr/bin/node

# copy our application code
ADD flask-app /opt/flask-app
WORKDIR /opt/flask-app

# fetch app specific deps
RUN npm install
RUN npm run build
RUN pip install -r requirements.txt

# expose port
EXPOSE 5000

# start app
CMD [ "python", "./app.py" ]

Π’ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ всСго Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Ubuntu LTS, ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Β apt-get для установки зависимостСй, Π² частности β€” Python ΠΈ Node. Π€Π»Π°Π³Β yqq Π½ΡƒΠΆΠ΅Π½ для игнорирования Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ автоматичСского Π²Ρ‹Π±ΠΎΡ€Π° «Yes» Π²ΠΎ всСх мСстах. Π’Π°ΠΊΠΆΠ΅ создаСтся символичСская ссылка для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° node. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ ADD для копирования прилоТСния Π² Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ β€” /opt/flask-app. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вСсь наш ΠΊΠΎΠ΄. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСм эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² контСкстС этой Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° наши систСмныС зависимости установлСны, ΠΏΠΎΡ€Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости уровня прилоТСния. НачнСм с Node, установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· npm ΠΈ запуска ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сборки, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² нашСм Ρ„Π°ΠΉΠ»Π΅Β package.json. Π’ ΠΊΠΎΠ½Ρ†Π΅ устанавливаСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Python, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ€Ρ‚ ΠΈ опрСдСляСм запуск прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒ CMD, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ prakhar1989 Π½Π° свой username Π½ΠΈΠΆΠ΅).

$ docker build -t prakhar1989/foodtrucks-web .

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ubuntu, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ запуск docker build послС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ практичСски ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

$ docker run -P prakhar1989/foodtrucks-web
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Out of retries. Bailing out...

Упс! НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ смогло Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Elasticsearch. Как ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ? ΠžΡ‚Π²Π΅Ρ‚ β€” Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСкции.

3.2 Π‘Π΅Ρ‚ΠΈ Docker

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ возмоТности Π”ΠΎΠΊΠ΅Ρ€Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ описанной Π·Π°Π΄Π°Ρ‡ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΡƒΠΌΠ°ΡŽ, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ удобство Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ вскорС ΠΈΠ·ΡƒΡ‡ΠΈΠΌ.

Π›Π°Π΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим docker ps, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Ρƒ нас:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   2 seconds ago       Up 2 seconds        0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES ΠΏΠΎ адрСсу ΠΈ ΠΏΠΎΡ€Ρ‚ΡƒΒ 0.0.0.0:9200, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ. Если ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ этому адрСсу, Ρ‚ΠΎ ΠΎΠ½ΠΎ смоТСт ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с ES, Π²Π΅Ρ€Π½ΠΎ? Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ описано ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

es = Elasticsearch(host='es')

НуТно ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° хостС 0.0.0.0Β (ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ 9200), ΠΈ всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΄Π°? К соТалСнию, Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IP 0.0.0.0 это адрСс для доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ с  хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΌΠΎΠ΅Π³ΠΎ Мака. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ этому адрСсу. Π›Π°Π΄Π½ΠΎ, Ссли Π½Π΅ этот адрСс, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ адрСс Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ES? Π Π°Π΄, Ρ‡Ρ‚ΠΎ Π²Ρ‹ спросили.

Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСти Π² Π”ΠΎΠΊΠ΅Ρ€Π΅. ПослС установки, Π”ΠΎΠΊΠ΅Ρ€ автоматичСски создаСт Ρ‚Ρ€ΠΈ сСти:

$ docker network ls
NETWORK ID          NAME                DRIVER
075b9f628ccc        none                null
be0f7178486c        host                host
8022115322ec        bridge              bridge

Π‘Π΅Ρ‚ΡŒΒ bridgeΒ β€” это ΡΠ΅Ρ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² этой сСти bridge. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "8022115322ec80613421b0282e7ee158ec41e16f565a3e86fa53496105deb2d7",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "e931ab24dedc1640cddf6286d08f115a83897c88223058305460d7bd793c1947": {
                "EndpointID": "66965e83bf7171daeb8652b39590b1f8c23d066ded16522daeb0128c9c25c189",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β e931ab24dedc находится Π² сСкции Containers. Π’Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½ IP-адрСс, Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ этому ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ β€” 172.17.0.2. ИмСнно этот адрСс ΠΌΡ‹ ΠΈ искали? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ: запустим Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ IP:

$ docker run -it --rm prakhar1989/foodtrucks-web bash
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
bash: curl: command not found
root@35180ccc206a:/opt/flask-app# apt-get -yqq install curl
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
{
  "name" : "Jane Foster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@35180ccc206a:/opt/flask-app# exit

БСйчас всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ понятно. ΠœΡ‹ запустили ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ с процСссом bash. Π€Π»Π°Π³ --rm Π½ΡƒΠΆΠ΅Π½ для удобства, благодаря Π½Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски удаляСтся послС Π²Ρ‹Ρ…ΠΎΠ΄Π°. ΠœΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ curl, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ адрСсу 172.17.0.2:9200 Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ES! Π‘ΡƒΠΏΠ΅Ρ€!

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ нашли способ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, сущСствуСт нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с этим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ:

  1. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ записи Π² Ρ„Π°ΠΉΠ»Β /etc/hostsΒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΎ, Ρ‡Ρ‚ΠΎ имя хоста esΒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚Β 172.17.0.2. Если IP-адрСс мСняСтся, Ρ‚ΠΎ придСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ΅Π½ΡΡ‚ΡŒ запись.
  2. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Ρ‚ΡŒΒ bridge ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄Β Π½Π΅ бСзопасСн.

Но Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΠΎΠΊΠ΅Ρ€ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сСти. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ /etc/hosts, сСйчас ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим свою ΡΠ΅Ρ‚ΡŒ:

$ docker network create foodtrucks
1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89

$ docker network ls
NETWORK ID          NAME                DRIVER
1a3386375797        foodtrucks          bridge
8022115322ec        bridge              bridge
075b9f628ccc        none                null
be0f7178486c        host                host

Команда network create создаСт Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚ΡŒΒ bridge. Нам сСйчас Π½ΡƒΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ сСтСй, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… Π²Β ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ наши ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° --net. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΈ сдСлаСм, Π½ΠΎ сначала остановим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ElasticSearch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² сСти bridge ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   4 hours ago         Up 4 hours          0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

$ docker stop e931ab24dedc
e931ab24dedc

$ docker run -dp 9200:9200 --net foodtrucks --name es elasticsearch
2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651

$ docker network inspect foodtrucks
[
    {
        "Name": "foodtrucks",
        "Id": "1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651": {
                "EndpointID": "15eabc7989ef78952fb577d0013243dae5199e8f5c55f1661606077d5b78e72a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

ΠœΡ‹ сдСлали Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π΄Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ es. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° запуск происходит Π² сСти.

$ docker run -it --rm --net foodtrucks prakhar1989/foodtrucks-web bash
root@53af252b771a:/opt/flask-app# cat /etc/hosts
172.18.0.3  53af252b771a
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  es
172.18.0.2  es.foodtrucks

root@53af252b771a:/opt/flask-app# curl es:9200
bash: curl: command not found
root@53af252b771a:/opt/flask-app# apt-get -yqq install curl
root@53af252b771a:/opt/flask-app# curl es:9200
{
  "name" : "Doctor Leery",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@53af252b771a:/opt/flask-app# ls
app.py  node_modules  package.json  requirements.txt  static  templates  webpack.config.js
root@53af252b771a:/opt/flask-app# python app.py
Index not found...
Loading data in elasticsearch ...
Total trucks loaded:  733
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
root@53af252b771a:/opt/flask-app# exit

Π£Ρ€Π°! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π”ΠΎΠΊΠ΅Ρ€ внСс Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ Π² Ρ„Π°ΠΉΠ» /etc/hosts, ΠΈ поэтому es:9200 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ β€” этот адрСс ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ направляСт запросы Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запустим Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎ-настоящСму:

$ docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web
2a1b77e066e646686f669bab4759ec1611db359362a031667cacbe45c3ddb413

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                              NAMES
2a1b77e066e6        prakhar1989/foodtrucks-web   "python ./app.py"        2 seconds ago       Up 1 seconds        0.0.0.0:5000->5000/tcp             foodtrucks-web
2c0b96f9b803        elasticsearch                "/docker-entrypoint.s"   21 minutes ago      Up 21 minutes       0.0.0.0:9200->9200/tcp, 9300/tcp   es

$ curl -I 0.0.0.0:5000
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 3697
Server: Werkzeug/0.11.2 Python/2.7.6
Date: Sun, 10 Jan 2016 23:58:53 GMT

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://0.0.0.0:5000, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ всСго 4 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‡Ρ‚ΠΎΠ±Ρ‹ с нуля Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния. Π― собрал эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² bash-скрипт.

#!/bin/bash

# build the flask container
docker build -t prakhar1989/foodtrucks-web .

# create the network
docker network create foodtrucks

# start the ES container
docker run -d --net foodtrucks -p 9200:9200 -p 9300:9300 --name es elasticsearch

# start the flask app container
docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Или Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° сСрвСрС, Π³Π΄Π΅ установлСн Π”ΠΎΠΊΠ΅Ρ€. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всю систСму с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹!

$ git clone https://github.com/prakhar1989/FoodTrucks
$ cd FoodTrucks
$ ./setup-docker.sh

Π’ΠΎΡ‚ ΠΈ всС! По-ΠΌΠΎΠ΅ΠΌΡƒ, это нСвСроятно ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния!

Docker Links

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π», стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΒ docker network это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ новая Ρ„ΠΈΡ‡Π°, ΠΎΠ½Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅Π»ΠΈΠ· Docker 1.9Β .

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ появился network, ссылки Π±Ρ‹Π»ΠΈ допустимым способом настройки взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ соотвСтствии с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, linking вскорС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² статус deprecated. Если Π²Π°ΠΌ попадСтся Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ link для соСдинСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ просто Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого network (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° links являСтся legacy, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.)

3.3 Docker Compose

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°. Но Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… это:

  1. Docker Machine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-хосты Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°.
  2. Docker ComposeΒ β€” инструмСнт для опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  3. Docker Swarm β€” Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для кластСризации.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этих инструмСнтов β€” Docker Compose, ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Π£ Docker Compose довольно интСрСсная прСдыстория. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ компания OrchardUp запустила инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Fig. ИдСя Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ окруТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ восприняли Π½Π° Hacker NewsΒ — я смутно помню, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π» ΠΎ Π½Π΅ΠΌ, Π½ΠΎ Π½Π΅ особо понял Π΅Π³ΠΎ смысла.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉΒ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Fig ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚:

На самом Π΄Π΅Π»Π΅, смысл Π”ΠΎΠΊΠ΅Ρ€Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСссы. БСгодня Ρƒ Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠ΅ API для запуска процСссов: Ρ€Π°ΡΡˆΠ°Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (ΠΈΠ½Ρ‹ΠΌΠΈ словами, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ) Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (shared volumes), ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚ΠΎΠ² с хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΎΠ³ΠΎΠ², ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Но большС Π½ΠΈΡ‡Π΅Π³ΠΎ: Π”ΠΎΠΊΠ΅Ρ€ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСссов.

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ содСрТатся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности оркСстрации Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для создания Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ «ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ», Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΎ Π±Ρ‹ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. И Π²ΠΎΡ‚ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ инструмСнт Π²Ρ€ΠΎΠ΄Π΅ Fig: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ с Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ «Π·Π°ΠΏΡƒΡΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ» (ΠΈΠ½Ρ‹ΠΌΠΈ словами, «Π·Π°ΠΏΡƒΡΠΊΠ΅ оркСстрированного кластСра ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²») вмСсто «Π·Π°ΠΏΡƒΡΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²».

Оказалось, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π”ΠΎΠΊΠ΅Ρ€Π° согласны с Ρ‚Π°ΠΊΠΈΠΌΠΈ мыслями. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ, Fig Π½Π°Π±Ρ€Π°Π» ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, Docker Inc. Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, ΠΊΡƒΠΏΠΈΠ»ΠΈ компанию ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Docker Compose.

Π˜Ρ‚Π°ΠΊ, Π·Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Compose? Π­Ρ‚ΠΎ инструмСнт для простого опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» docker-compose.yml, ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ сСрвисов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, смоТСм Π»ΠΈ ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Β docker-compose.yml для нашСго прилоТСния SF-Foodtrucks ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, способСн Π»ΠΈ ΠΎΠ½ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚.

Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose. Π•ΡΡ‚ΡŒ Ρƒ вас Windows ΠΈΠ»ΠΈ Mac, Ρ‚ΠΎ Docker Compose ΡƒΠΆΠ΅ установлСн β€” ΠΎΠ½ ΠΈΠ΄Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Docker Toolbox. На Linux ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose слСдуя простым инструкциям Π½Π° сайтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Compose написан Π½Π° Python, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просто pip install docker-compose. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker-compose version
docker-compose version 1.7.1, build 0a9ab35
docker-py version: 1.8.1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ созданию Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml. Бинтаксис yml-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ простой, ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

version: "2"
services:
  es:
    image: elasticsearch
  web:
    image: prakhar1989/foodtrucks-web
    command: python app.py
    ports:
      - "5000:5000"
    volumes:
      - .:/code

      

Π”Π°Π²Π°ΠΉΡ‚Π΅ я Ρ€Π°Π·Π±Π΅Ρ€Ρƒ это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. На Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нСймспСйса для Π½Π°ΡˆΠΈΡ… сСрвисов: esΒ ΠΈΒ web. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСрвису ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… image β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Для es ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ доступный Π½Π° Docker Hub ΠΎΠ±Ρ€Π°Π· elasticsearch. Для Flask-прилоТСния β€” Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ command ΠΈ portsΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. volumes ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ монтирования, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ web. Π­Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΠΎΠ³Π°ΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: НуТно Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с файлом docker-compose.yml Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Compose.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π€Π°ΠΉΠ» Π³ΠΎΡ‚ΠΎΠ², Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π°Β docker-composeΒ Π² дСйствии. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚Ρ‹ свободны. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Flask ΠΈ ES, Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΈΡ… ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ:

$ docker stop $(docker ps -q)
39a2f5df14ef
2a1b77e066e6

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker-compose. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Foodtrucks ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker-compose up.

$ docker-compose up
Creating network "foodtrucks_default" with the default driver
Creating foodtrucks_es_1
Creating foodtrucks_web_1
Attaching to foodtrucks_es_1, foodtrucks_web_1
es_1  | [2016-01-11 03:43:50,300][INFO ][node                     ] [Comet] version[2.1.1], pid[1], build[40e2c53/2015-12-15T13:05:55Z]
es_1  | [2016-01-11 03:43:50,307][INFO ][node                     ] [Comet] initializing ...
es_1  | [2016-01-11 03:43:50,366][INFO ][plugins                  ] [Comet] loaded [], sites []
es_1  | [2016-01-11 03:43:50,421][INFO ][env                      ] [Comet] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [16gb], net total_space [18.1gb], spins? [possibly], types [ext4]
es_1  | [2016-01-11 03:43:52,626][INFO ][node                     ] [Comet] initialized
es_1  | [2016-01-11 03:43:52,632][INFO ][node                     ] [Comet] starting ...
es_1  | [2016-01-11 03:43:52,703][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:52,704][INFO ][transport                ] [Comet] publish_address {172.17.0.2:9300}, bound_addresses {[::]:9300}
es_1  | [2016-01-11 03:43:52,721][INFO ][discovery                ] [Comet] elasticsearch/cEk4s7pdQ-evRc9MqS2wqw
es_1  | [2016-01-11 03:43:55,785][INFO ][cluster.service          ] [Comet] new_master {Comet}{cEk4s7pdQ-evRc9MqS2wqw}{172.17.0.2}{172.17.0.2:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
es_1  | [2016-01-11 03:43:55,818][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:55,819][INFO ][http                     ] [Comet] publish_address {172.17.0.2:9200}, bound_addresses {[::]:9200}
es_1  | [2016-01-11 03:43:55,819][INFO ][node                     ] [Comet] started
es_1  | [2016-01-11 03:43:55,826][INFO ][gateway                  ] [Comet] recovered [0] indices into cluster_state
es_1  | [2016-01-11 03:44:01,825][INFO ][cluster.metadata         ] [Comet] [sfdata] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [truck]
es_1  | [2016-01-11 03:44:02,373][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,510][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,593][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,708][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:03,047][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ IP Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΡ€ΡƒΡ‚ΠΎ, Π΄Π°? ВсСго лишь ΠΏΠ°Ρ€Π° строк ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ нСсколько Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² унисон. Π”Π°Π²Π°ΠΉΡ‚Π΅ остановим сСрвисы ΠΈ пСрСзапустим Π² detached mode:

web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Killing foodtrucks_web_1 ... done
Killing foodtrucks_es_1 ... done

$ docker-compose up -d
Starting foodtrucks_es_1
Starting foodtrucks_web_1

$ docker-compose ps
      Name                    Command               State           Ports
----------------------------------------------------------------------------------
foodtrucks_es_1    /docker-entrypoint.sh elas ...   Up      9200/tcp, 9300/tcp
foodtrucks_web_1   python app.py                    Up      0.0.0.0:5000->5000/tcp

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹. ΠžΡ‚ΠΊΡƒΠ΄Π° бСрутся ΠΈΠΌΠ΅Π½Π°? Π˜Ρ… Compose ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» сам. Но Ρ‡Ρ‚ΠΎ насчСт сСти? Π•Π³ΠΎ Compose Ρ‚ΠΎΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ сам? Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ вопрос, Π΄Π°Π²Π°ΠΉΡ‚Π΅ выясним.

Для Π½Π°Ρ‡Π°Π»Π°, остановим Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ сСрвисы. Π˜Ρ… всСгда ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ docker-compose stop
Stopping foodtrucks_web_1 ... done
Stopping foodtrucks_es_1 ... done

Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ ΡΠ΅Ρ‚ΡŒΒ foodtrucks, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ создали Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·. Π­Ρ‚Π° ΡΠ΅Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ потрСбуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Compose автоматичСски сдСлаСт всС Π·Π° нас.

$ docker network rm foodtrucks
$ docker network ls
NETWORK ID          NAME                DRIVER
4eec273c054e        bridge              bridge
9347ae8783bd        none                null
54df57d7f493        host                host

Класс! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² этом чистом состоянии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, способСн Π»ΠΈΒ Compose Π½Π° Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ.

$ docker-compose up -d
Recreating foodtrucks_es_1
Recreating foodtrucks_web_1
$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
f50bb33a3242        prakhar1989/foodtrucks-web   "python app.py"          14 seconds ago      Up 13 seconds       0.0.0.0:5000->5000/tcp   foodtrucks_web_1
e299ceeb4caa        elasticsearch                "/docker-entrypoint.s"   14 seconds ago      Up 14 seconds       9200/tcp, 9300/tcp       foodtrucks_es_1

Пока всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, создались Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сСти:

$ docker network ls
NETWORK ID          NAME                 DRIVER
0c8b474a9241        bridge               bridge              
293a141faac3        foodtrucks_default   bridge              
b44db703cd69        host                 host                
0474c9517805        none                 null  

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Compose ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ создал ΡΠ΅Ρ‚ΡŒΒ foodtrucks_defaultΒ ΠΈ подсоСдинил ΠΎΠ±Π° сСрвиса Π² эту ΡΠ΅Ρ‚ΡŒ, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для сСрвиса ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ сСти, ΠΈ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° доступны Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ Π² сСти. Они доступны ΠΏΠΎ hostname, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, находится Π»ΠΈ эта информация Π² /etc/hosts.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
bb72dcebd379        prakhar1989/foodtrucks-web   "python app.py"          20 hours ago        Up 19 hours         0.0.0.0:5000->5000/tcp   foodtrucks_web_1
3338fc79be4b        elasticsearch                "/docker-entrypoint.s"   20 hours ago        Up 19 hours         9200/tcp, 9300/tcp       foodtrucks_es_1

$ docker exec -it bb72dcebd379 bash
root@bb72dcebd379:/opt/flask-app# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  bb72dcebd379

Упс! ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ„Π°ΠΉΠ» понятия Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎ es. Как ΠΆΠ΅ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΠΈΠ½Π³ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ названию хоста:

root@bb72dcebd379:/opt/flask-app# ping es
PING es (172.18.0.3) 56(84) bytes of data.
64 bytes from foodtrucks_es_1.C
--- es ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.049/0.056/0.064/0.010 ms

Вуаля! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! Каким-Ρ‚ΠΎ магичСским ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ хоста es. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Docker 1.10 Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ систСму, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ сСрвисов Ρ‡Π΅Ρ€Π΅Π· DNS-сСрвСр. Если интСрСсно, Ρ‚ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ release notes.

На этом наш Ρ‚ΡƒΡ€ ΠΏΠΎ Docker Compose Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. Π‘ этим инструмСнтом ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрвисы Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Docker Compose.

НадСюсь, я продСмонстрировал ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ просто ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ срСдой с Compose. Π’ послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ всС Π½Π° AWS!

3.4 AWS Elastic Container Service

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали docker-composeΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:Β docker-compose up. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΈΡ€Ρƒ, Π·Π°ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡŽΠ·Π΅Ρ€ΠΎΠ², ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π΄Π΅Π½Π΅Π³ ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ большой Π΄ΠΎΠΌ Π² Майами. ПослСдниС Ρ‚Ρ€ΠΈ шага выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ этого пособия, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ займСмся выяснСниСм Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ³ΠΎ прилоТСния Π² ΠΎΠ±Π»Π°ΠΊΠΎ AWS.

Если Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ этого мСста, Ρ‚ΠΎ скорСС всСго ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Docker β€” довольно крутая тСхнология. И Π²Ρ‹ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ. ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост популярности Π”ΠΎΠΊΠ΅Ρ€Π° ΠΈ стали Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² свои сСрвисы. БСгодня, Π”ΠΎΠΊΠ΅Ρ€-прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS,Β Azure,Rackspace,Β DigitalOceanΒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…. ΠœΡ‹ ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π½Π° Elastic Beanstalk, Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ AWS Elastic Container Service (ΠΈΠ»ΠΈ ECS).

AWS ECS β€” это ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ сСрвис ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ кластСром Π½Π° EC2 Ρ‡Π΅Ρ€Π΅Π· простой API. Π’ Beanstalk Π±Ρ‹Π»ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ECS позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ аспСкт окруТСния ΠΏΠΎ вашим потрСбностям. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ECS β€” Π½Π΅ самый простой инструмСнт Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ ECS Π΅ΡΡ‚ΡŒ удобный инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (CLI) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Docker Compose ΠΈ автоматичСской ΠΏΡ€ΠΎΠ²ΠΈΠ·ΠΈΠ΅ΠΉ Π½Π° ECS! Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ„Π°ΠΉΠ»Β docker-compose.yml, настройка ΠΈ запуск Π½Π° AWS Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно Π»Π΅Π³ΠΊΠΎΠΉ. НачнСм!

Π’Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ CLI. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π΅ доступна Π½Π° Windows. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ установкС CLI Π½Π° Mac ΠΈ Linux Ρ…ΠΎΡ€ΠΎΡˆΠΎ описаны Π½Π° сайтС с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. УстановитС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ ecs-cli --version
ecs-cli version 0.1.0 (*cbdc2d5)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг β€” Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° инстансах. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EC2 ConsoleΒ ΠΈ создайтС Π½ΠΎΠ²Ρ‹ΠΉ keypair. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈ Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² бСзопасном мСстС. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” имя Ρ€Π΅Π³ΠΈΠΎΠ½Π°. Π― Π½Π°Π·Π²Π°Π» свой ΠΊΠ»ΡŽΡ‡Β ecs ΠΈ ΡƒΠΊΠ°Π·Π°Π» Ρ€Π΅Π³ΠΈΠΎΠ½ us-east-1. Π― ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ повСствованиС с этим Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ настройтС CLI:

$ ecs-cli configure --region us-east-1 --cluster foodtrucks
INFO[0000] Saved ECS CLI configuration for cluster (foodtrucks)

Команда configure с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наш кластСр, ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ кластСра. НуТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€Ρ€ΠΈ создании ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если Ρƒ вас Π½Π΅ настроСн AWS CLI, то слСдуйтС руководству, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описываСт всС шаги.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг позволяСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ шаблон CloudFormation.

$ ecs-cli up --keypair ecs --capability-iam --size 2 --instance-type t2.micro
INFO[0000] Created cluster                               cluster=foodtrucks
INFO[0001] Waiting for your cluster resources to be created
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0122] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0182] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0242] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ названия ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ скачали (Π² ΠΌΠΎΠ΅ΠΌ случаС ecs), количСство инстансов (--size) ΠΈ Ρ‚ΠΈΠΏ инстансов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π€Π»Π°Π³ --capability-iamΒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ рСсурсы IAM.

Π’ послСднСм шагС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» docker-compose.yml. ВрСбуСтся нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ вмСсто ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм копию ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ aws-compose.yml. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ этого Ρ„Π°ΠΉΠ»Π°Β (послС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ):

es:
  image: elasticsearch
  cpu_shares: 100
  mem_limit: 262144000
web:
  image: prakhar1989/foodtrucks-web
  cpu_shares: 100
  mem_limit: 262144000
  ports:
    - "80:5000"
  links:
    - es

    

ЕдинствСнныС отличия ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β mem_limit ΠΈ cpu_shares для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΡƒΠ±Ρ€Π°Π»ΠΈ versionΒ ΠΈ services, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ AWS Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 2 Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Compose. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° инстансах Ρ‚ΠΈΠΏΠ° t2.micro, ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ 250 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ памяти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия, ecs-cliΒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ build. Но Docker Compose ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

$ docker push prakhar1989/foodtrucks-web

ΠšΡ€Π°ΡΠΎΡ‚Π°! Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° ECS!

$ ecs-cli compose --file aws-compose.yml up
INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-foodtrucks:2
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0036] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ Docker Compose β€” Π½Π΅ совпадСниС. АргумСнт --file ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСопрСдСлСния Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (docker-compose.yml). Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ строку desiredStatus=RUNNING lastStatus=RUNNING Π² самом ΠΊΠΎΠ½Ρ†Π΅.

ΠšΡ€ΡƒΡ‚ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ. Как ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ?

ecs-cli ps
Name                                      State    Ports                     TaskDefinition
845e2368-170d-44a7-bf9f-84c7fcd9ae29/web  RUNNING  54.86.14.14:80->5000/tcp  ecscompose-foodtrucks:2
845e2368-170d-44a7-bf9f-84c7fcd9ae29/es   RUNNING                            ecscompose-foodtrucks:2

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://54.86.14.14Β Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Food Trucks Π²ΠΎ всСй своСй ΠΆΠ΅Π»Ρ‚ΠΎ-Ρ‡Π΅Ρ€Π½ΠΎΠΉ красС! Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° консоль AWS ECS.

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» создан ECS-кластСр ‘foodtrucks’, ΠΈ Π² Π½Π΅ΠΌ выполняСтся ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° с двумя инстансами. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΠΎΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒΡΡ Π² этой консоли ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΅Π΅ части ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ ΠΈ всС. ВсСго нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ β€” ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° AWS!

4.0 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. ПослС Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ, Π½ΠΎ интСрСсного пособия Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²! Если Π²Ρ‹ слСдовали пособию Π΄ΠΎ самого ΠΊΠΎΠ½Ρ†Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ заслуТСнно Π³ΠΎΡ€Π΄ΠΈΡ‚ΡŒΡΡ собой. Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ статичСскиС ΠΈ динамичСскиС Π²Π΅Π±-сайты ΠΈ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠΏΡ‹Ρ‚ дСплоя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠΎ.

НадСюсь, ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ этого руководства ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Π΅Π΅ Π² своих способностях ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с сСрвСрами. Когда Ρƒ вас появится новая идСя для сайта ΠΈΠ»ΠΈ прилоТСния, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ смоТСтС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ людям с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями.

4.1 Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

Π’Π°ΡˆΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Π² ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ. МоСй Ρ†Π΅Π»ΡŒΡŽ Π² этом руководствС Π±Ρ‹Π»ΠΎ Π½Π°Π³ΡƒΠ»ΡΡ‚ΡŒ ваш Π°ΠΏΠΏΠ΅Ρ‚ΠΈΡ‚ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΡ‰ΡŒ Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΌΠΈΡ€Π΅ соврСмСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ руководства Π²Ρ€ΠΎΠ΄Π΅ этого ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Π²Π°ΠΌ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пособиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ знакомился с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ сам. НадСюсь, Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ вас, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° прогрСссом Π² этом области Π½Π΅ со стороны, Π° с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π·Π½Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

НиТС β€” список Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… рСсурсов. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ Π² вашСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ β€” ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Ρƒ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

Π£Π΄Π°Ρ‡ΠΈ, ΡŽΠ½Ρ‹ΠΉ ΠΏΠ°Π΄Π°Π²Π°Π½!

4.2 Π€ΠΈΠ΄Π±Π΅ΠΊ Π°Π²Ρ‚ΠΎΡ€Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ моя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы. Π’Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ пособиС? Оно показалось Π²Π°ΠΌ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ?

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ (Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° [email protected]Β ΠΈΠ»ΠΈ просто создайтС issue. Π― Π΅ΡΡ‚ΡŒ Π²Β Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π°.

(Автор ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎ-английски, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ваши ΠΎΡ‚Π·Ρ‹Π²Ρ‹. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΌΠΎΠΈ ошибки. Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это пособиС стало ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… стартовых руководств Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π£ мСня Π½Π΅ получится это Π±Π΅Π· вашСй ΠΏΠΎΠΌΠΎΡ‰ΠΈ.

с нуля Π΄ΠΎ кластСра Π½Π° AWS / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€?

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ:

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развёртывания ΠΈ управлСния прилоТСниями Π² срСдС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы; позволяСт Β«ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСм Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ зависимостями Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт срСду ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Ого! Как ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, Π”ΠΎΠΊΠ΅Ρ€ это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, систСмными администраторам ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ спСциалистам Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΈΡ… прилоТСния Π² пСсочницС (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ), для запуска Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Linux. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ прСимущСство Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСми Π΅Π³ΠΎ зависимостями Π² стандартизированный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, поэтому с Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму ΠΈ рСсурсы Π±ΠΎΠ»Π΅Π΅ эффСктивно.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π² индустрии Π½Π° сСгодняшний дСнь β€” это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ гостСвой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы сСрвСра.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для ΠΏΠΎΠ»Π½ΠΎΠΉ изоляции процСсса для прилоТСния: ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° софт гостСвой ОБ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Но Π·Π° Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. БущСствуСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, нСобходимая для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΆΠ΅Π»Π΅Π·Π° гостСвой ОБ.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ схоТий с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, Π½ΠΎ благодаря ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π΄Π΅Π»Π°ΡŽΡ‚ это с Π² Ρ€Π°Π·Ρ‹ мСньшСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…?

Π’Π·Π»Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±Ρ‹Π» ΠΏΠΎ-настоящСму эпичным. НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ сами ΠΏΠΎ сСбС β€” Π½Π΅ новая тСхнология, Π΄ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΊ распространСны ΠΈ популярны. Π”ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, прСдоставив стандартный API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сильно упростил созданиС ΠΈ использованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» сообщСству вмСстС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² Β The RegisterΒ Π² сСрСдинС 2014 говорится, Ρ‡Ρ‚ΠΎ Π“ΡƒΠ³Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС Π΄Π²ΡƒΡ… ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π² нСдСлю.

Google Trends для слова ‘Docker’

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ росту Π”ΠΎΠΊΠ΅Ρ€Π°, компания-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Docker Inc. Π±Ρ‹Π»Π° ΠΎΡ†Π΅Π½Π΅Π½Π° Π² Π΄Π²Π° с лишним ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²! Благодаря прСимущСствам Π² эффСктивности ΠΈ портативности, Π”ΠΎΠΊΠ΅Ρ€ Π½Π°Ρ‡Π°Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС большС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈ сСйчас стоит Π²ΠΎ Π³Π»Π°Π²Π΅ двиТСния ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (containerization). Как соврСмСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ этот Ρ‚Ρ€Π΅Π½Π΄ ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ.

Π§Π΅ΠΌΡƒ мСня Π½Π°ΡƒΡ‡ΠΈΡ‚ это пособиС?

Π­Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ пособиС ΠΏΠΎ всСм аспСктам Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ ΠΌΠΈΡ„ΠΎΠ² ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π΅ ΠΈ Π΅Π³ΠΎ экосистСмС, ΠΎΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ нСбольшой ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎ сборкС ΠΈ дСплою собствСнных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Amazon Web Services для дСплоя статичных сайтов, ΠΈ Π΄Π²Π° динамичСских Π²Π΅Π±-прилоТСния Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π° EC2 с использованиСм Elastic Beanstalk ΠΈ Elastic Container Service. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ, это пособиС даст Π²Π°ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ содСрТит нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… посвящСн ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ аспСкту Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° Π“ΠΈΡ‚Ρ…Π°Π±Π΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ этом пособии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия Π”ΠΎΠΊΠ΅Ρ€Π° 1.12.0-rc2. Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, поТалуйста, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅Β issue. Бпасибо!

ΠŸΡ€Π΅-Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹

ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для прохоТдСния этого пособия β€” это Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой ΠΈ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. ΠžΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π½ΠΎ Π½Π΅ обязатСлСн. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ столкнСмся с нСсколькими ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ сСрвисами. Π’Π°ΠΌ понадобится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° этих сайтах:

Настройка ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

Установка ΠΈ настройка всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ тяТСлой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π”ΠΎΠΊΠ΅Ρ€ стал довольно ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΈ установка ΠΈ запуск Π΅Π³ΠΎ Π½Π° любой ОБ стало ΠΎΡ‡Π΅Π½ΡŒ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π˜Ρ‚Π°ΠΊ, установим Π”ΠΎΠΊΠ΅Ρ€.

Π”ΠΎΠΊΠ΅Ρ€

Π•Ρ‰Π΅ нСсколько Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Π½Π°Π·Π°Π΄ запуск Π”ΠΎΠΊΠ΅Ρ€Π° Π½Π° OS X ΠΈ Windows Π±Ρ‹Π» Π±Ρ‹Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ. Но ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΈ сСгодня вСсь процСсс β€” ΠΏΡ€ΠΎΡ‰Π΅ Π½Π΅ΠΊΡƒΠ΄Π°. Π­Ρ‚ΠΎΡ‚ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» getting startedΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ инструкции ΠΏΠΎ установкС на Мак,Β Linux ΠΈ Windows.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, всС Π»ΠΈ установлСно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ:

$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Python

Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдустановлСн Π½Π° OS X ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠŸΠΈΡ‚ΠΎΠ½, Ρ‚ΠΎ скачайтС установщик здСсь.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ:

$ python --version
Python 2.7.11

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pip для установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для нашСго прилоТСния. Если pip Π½Π΅ установлСн, Ρ‚ΠΎ скачайтС Π²Π΅Ρ€ΡΠΈΡŽ для своСй систСмы.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ запуститС Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ pip --version
pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)

Java (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Elasticsearch для хранСния ΠΈ поиска. Для локального запуска Elasticsearch Π²Π°ΠΌ понадобится Java. Π’ этом пособии всС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ локально Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Java. Если Java установлСна, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β java -versionΒ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)


1.0 Π˜Π³Ρ€Π°Π΅ΠΌ с Busybox

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ установлСно, ΠΏΠΎΡ€Π° Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Busybox Π½Π° нашСй систСмС ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ docker run.

Для Π½Π°Ρ‡Π°Π»Π°, запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ docker pull busybox

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ устанавливали Π”ΠΎΠΊΠ΅Ρ€ Π½Π° свою систСму, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ появлСниС сообщСния permission denied. Если Π²Ρ‹ Π½Π° МакС, Ρ‚ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π”ΠΎΠΊΠ΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½. Если Π²Ρ‹ Π½Π° ЛинуксС, Ρ‚ΠΎ запуститС эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с sudo. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ dockerΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Команда pull скачиваСт ΠΎΠ±Ρ€Π°Π· busyboxΒ ΠΈΠ· рСгистра Π”ΠΎΠΊΠ΅Ρ€Π°Β ΠΈ сохраняСт Π΅Π³ΠΎ локально. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker images, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² систСмС.

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox                 latest              c51f86c28340        4 weeks ago         1.109 MB

1.1 Docker Run

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с этим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker run:

$ docker run busybox
$

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ! Π­Ρ‚ΠΎ Π±Π°Π³? Ну, Π½Π΅Ρ‚. Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ всСго. Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нашСл ΠΎΠ±Ρ€Π°Π· (Π² нашСм случаС, busybox), Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠœΡ‹ сдСлали docker run busybox, Π½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ загрузился, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ пустая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ. Ну, Π΄Π°, ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ поинтСрСснСС.

$ docker run busybox echo "hello from busybox"
hello from busybox

Π£Ρ€Π°, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄. Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΏΠΎΡΠ»ΡƒΡˆΠ½ΠΎ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· Π½Π΅Π³ΠΎ. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ быстрыС!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker ps. Она Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран список всСх Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² сСйчас Π½Π΅Ρ‚, поэтому выводится пустая строка. НС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:Β docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
305297d7a235        busybox             "uptime"            11 minutes ago      Exited (0) 11 minutes ago                       distracted_goldstine
ff0a5c3750b9        busybox             "sh"                12 minutes ago      Exited (0) 12 minutes ago                       elated_ramanujan

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π΅Π½ список всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ запускали. Π’ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ STATUS ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π°Π·Π°Π΄.

Π’Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ:

$ docker run -it busybox sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # uptime
 05:45:21 up  5:58,  0 users,  load average: 0.00, 0.01, 0.04

 

Команда run с Ρ„Π»Π°Π³ΠΎΠΌ -it ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ tty Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅.

Опасно!: Если хочСтся острых ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒΒ rm -rf binΒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Но ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ запускаСтС Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ снаруТи. Если сдСлаСтС это снаруТи, Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅Β ls,Β echo пСрСстанут Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Когда Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° всС пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, просто Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈ запуститС Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run -it busybox sh. Π”ΠΎΠΊΠ΅Ρ€ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΈ запускС, поэтому всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ снова.

На этом Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΡƒΡ€ ΠΏΠΎ возмоТностям ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker run Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ довольно часто. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ поняли ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΒ run, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ docker run --help, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ². Π‘ΠΊΠΎΡ€ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько способов использования docker run.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ рассмотрим ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker ps -a всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ остатки Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². На протяТСнии этого пособия, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker run нСсколько Ρ€Π°Π·, ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ, Π±Π΅Π·Π΄ΠΎΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡŠΠ΅Π΄Π°Ρ‚ΡŒ дисковоС пространство. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я взял Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β docker rm. ΠŸΡ€ΠΎΡΡ‚ΠΎ скопируйтС ID (ΠΌΠΎΠΆΠ½ΠΎ нСсколько) ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

$ docker rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ снова Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° экран. Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ копирования ΠΈ вставлСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker rm $(docker ps -a -q -f status=exited)

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… статус exited. Π€Π»Π°Π³Β -q Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числСнныС ID, Π° Ρ„Π»Π°Π³Β -fΒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° основС прСдоставлСнных условий. ПослСдняя полСзная Π΄Π΅Ρ‚Π°Π»ΡŒ β€” ΠΊΠΎΠΌΠ°Π½Π΄Π΅Β docker run ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ --rm, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… запусков ΠΈ экспСримСнтов с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker rmi.

1.2 ВСрминология

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали ΠΌΠ½ΠΎΠ³ΠΎ спСцифичного для Π”ΠΎΠΊΠ΅Ρ€Π° ΠΆΠ°Ρ€Π³ΠΎΠ½Π°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π°.

  • Images (ΠΎΠ±Ρ€Π°Π·Ρ‹)Β — Π‘Ρ…Π΅ΠΌΡ‹ нашСго прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ использовали ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker pullΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· busybox.
  • Containers (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹)Β — Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ создали ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker run, ΠΈ использовали ΠΎΠ±Ρ€Π°Π· busybox, скачанный Ρ€Π°Π½Π΅Π΅. Бписок Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker ps.
  • Docker Daemon (Π΄Π΅ΠΌΠΎΠ½ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ сСрвис, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π½Π° хост-машинС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС, запуск ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π”Π΅ΠΌΠΎΠ½ β€” это процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ взаимодСйствуСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚.
  • Docker Client (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, которая позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Β Kitematic, с графичСским интСрфСйсом.
  • Docker HubΒ — РСгистр ДокСр-ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π“Ρ€ΡƒΠ±ΠΎ говоря, Π°Ρ€Ρ…ΠΈΠ² всСх доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ собствСнный рСгистр ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для получСния ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

2.0 Π’Π΅Π±-прилоТСния ΠΈ Π”ΠΎΠΊΠ΅Ρ€

Π‘ΡƒΠΏΠ΅Ρ€! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Β docker run, ΠΏΠΎΠΈΠ³Ρ€Π°Π»ΠΈ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π’ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ этими знаниями, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΡˆΡ‚ΡƒΠΊΠ°ΠΌ: дСплою Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ!

2.1 БтатичСскиС сайты

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ рассмотрим самый простой статичСский Π²Π΅Π±-сайт. Π‘ΠΊΠ°Ρ‡Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· Docker Hub, запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ посмотрим, насколько Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр.

ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ. Для одностраничного сайта Π½Π°ΠΌ понадобится ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π·Π°Ρ€Π°Π½Π΅Π΅ создал для этого пособия ΠΈ размСстил Π² рСгистрС —Β prakhar1989/static-site. МоТно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run.

$ docker run prakhar1989/static-site

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π·Π° Π½Π΅ сущСствуСт локально, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт ΠΎΠ±Ρ€Π°Π· ΠΈΠ· рСгистра, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустит Π΅Π³ΠΎ. Если всС Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ сообщСниС Nginx is running... Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр Π·Π°ΠΏΡƒΡ‰Π΅Π½. Как ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сайт Π² дСйствии? На ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр? И, Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· хост-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β docker runΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π½Π΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ ΠΊ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ спокойно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΎ называСтся detachedΒ mode.

$ docker run -d -P --name static-site prakhar1989/static-site
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810

Π€Π»Π°Π³Β -dΒ ΠΎΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚ (detach) Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Ρ„Π»Π°Π³Β -P сдСлаСт всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ случайными, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ„Π»Π°Π³Β --name это имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker port [CONTAINER].

$ docker port static-site
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://localhost:32769Β Π² своСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ docker-toolbox, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker-machine ip default Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP-адрСс.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ свой ΠΏΠΎΡ€Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ соСдинСния Π½Π° Π½Π΅Π³ΠΎ.

$ docker run -p 8888:80 prakhar1989/static-site
Nginx is running...

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запуститС docker stopΒ ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ID) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, всС Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ это Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр, Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ΡˆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Π΅Π±-сСрвСр Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π·Π°, Π²Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно β€” Π° ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·? ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ эту Ρ‚Π΅ΠΌΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

2.2 ΠžΠ±Ρ€Π°Π·Ρ‹

ΠœΡ‹ касались ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Ρ€Π°Π½Π΅Π΅, Π½ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ заглянСм Π³Π»ΡƒΠ±ΠΆΠ΅: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΎΠ±Ρ€Π°Π·Ρ‹. НаконСц, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ собствСнный ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π΅Π³ΠΎ Π½Π°Β AWS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ. ΠšΡ€ΡƒΡ‚ΠΎ? ΠšΡ€ΡƒΡ‚ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ.

ΠžΠ±Ρ€Π°Π·Ρ‹ это основы для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ скачали (pull)Β ΠΎΠ±Ρ€Π°Π· ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Busybox ΠΈΠ· рСгистра, ΠΈ попросили ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, основанный Π½Π° этом ΠΎΠ±Ρ€Π°Π·Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ список доступных локально ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker images.

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
prakhar1989/catnip              latest              c7ffb5626a50        2 hours ago         697.9 MB
prakhar1989/static-site         latest              b270625a1631        21 hours ago        133.9 MB
python                          3-onbuild           cf4002b2c383        5 days ago          688.8 MB
martin/docker-cleanup-volumes   latest              b42990daaca2        7 weeks ago         22.14 MB
ubuntu                          latest              e9ae3c220b23        7 weeks ago         187.9 MB
busybox                         latest              c51f86c28340        9 weeks ago         1.109 MB
hello-world                     latest              0a6ba66e537a        11 weeks ago        960 B

Π­Ρ‚ΠΎ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я скачал ΠΈΠ· рСгистра, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ я сдСлал сам (скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ). TAG β€” это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ снимок ΠΈΠ»ΠΈ ΡΠ½ΡΠΏΡˆΠΎΡ‚ (snapshot) ΠΎΠ±Ρ€Π°Π·Π°, Π° IMAGE ID β€” это ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Π°.

Для простоты, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΊΠ°ΠΊ ΠΊ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. ΠžΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎΒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒΒ Ρ измСнСниями, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько вСрсий. Если Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ latest. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π°Β ubuntu:

$ docker pull ubuntu:12.04

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· рСгистра (Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Docker Hub) ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный. На Docker Hub Π΅ΡΡ‚ΡŒ дСсятки тысяч ΠΎΠ±Ρ€Π°Π·ΠΎΠ². МоТно ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docker search.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ:

  • Base images (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ±Ρ€Π°Π·Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ubuntu, busybox ΠΈΠ»ΠΈ debian.
  • Child images (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, построСнныС Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ… ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ.

  • ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Docker. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎ слово. Π’ спискС Π²Ρ‹ΡˆΠ΅Β python,Β ubuntu,Β busybox ΠΈ hello-worldΒ β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹Β β€” ΠΎΠ±Ρ€Π°Π·Ρ‹, созданныС простыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ мСня ΠΈ вас. Они построСны Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡƒΒ user/image-name.

2.3 Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚, самоС врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный ΠΎΠ±Ρ€Π°Π·. ЦСль этого Ρ€Π°Π·Π΄Π΅Π»Π° β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с простым ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Flask. Для этого пособия я сдСлал ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΎΠ΅Β ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ Π³ΠΈΡ„ΠΊΡƒ с кошкой. Ну, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, ΠΊΡ‚ΠΎ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ кошСк? Π‘ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊ сСбС Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ.

Π’Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ локально. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ flask-app ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ cdΒ ΠΈ установитС зависимости.

$ cd flask-app
$ pip install -r requirements.txt
$ python app.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Если всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://localhost:5000 Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² дСйствии.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если ΠΊΠΎΠΌΠ°Π½Π΄Π° pip install ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибками «permission denied», Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ с sudo. Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ pip install --user -r requirements.txt.

Выглядит ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ основаны Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Python 3. Π’ частности, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° вСрсия python:3-onbuildΒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° с ΠŸΠΈΡ‚ΠΎΠ½ΠΎΠΌ.

Π§Ρ‚ΠΎ Π·Π° вСрсия onbuild, спроситС Π²Ρ‹?

Π­Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ нСсколько Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ONBUILD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ сборкС Π±ΡƒΠ΄Π΅Ρ‚ скопирован Ρ„Π°ΠΉΠ» requirements.txt, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ pip install с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ тСкущая дирСктория Π±ΡƒΠ΄Π΅Ρ‚ скопирована Π²Β /usr/src/app.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, вСрсия onbuildΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ…Π΅Π»ΠΏΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ скучныС процСссы запуска прилоТСния. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипты), ΠΎΠ±Ρ€Π°Π·Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ всС Π·Π° вас. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ всС ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ для создания своСго ΠΎΠ±Ρ€Π°Π·Π°: Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? ΠžΡ‚Π²Π΅Ρ‚: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Dockerfile.

2.4 Dockerfile

DockerfileΒ β€” это простой тСкстовый Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится список ΠΊΠΎΠΌΠ°Π½Π΄ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ простой способ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания ΠΎΠ±Ρ€Π°Π·Π°. Π‘Π°ΠΌΠΎΠ΅ классноС, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Dockerfile ΠΏΠΎΡ‡Ρ‚ΠΈΒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ своим Π°Π½Π°Π»ΠΎΠ³Π°ΠΌ Π² Linux. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅ΡΡ‚ΡŒ Dockerfile, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ всС Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ с нуля. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ пустой Ρ„Π°ΠΉΠ» Π² любимом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, ΠΈ сохранитС Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π³Π΄Π΅ находится flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. НазовитС Ρ„Π°ΠΉΠ» Dockerfile.

Для Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово FROM.

FROM python:3-onbuild

Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для копирования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ установки зависимостСй. Но ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, onbuild-вСрсия Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π±Π΅Ρ€Π΅Ρ‚ эти Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° сСбя. Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5000, поэтому ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΅Π³ΠΎ:

EXPOSE 5000

ПослСдний шаг β€” ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для запуска прилоТСния. Π­Ρ‚ΠΎ просто python ./app.py. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ CMD:

CMD ["python", "./app.py"]

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β CMD β€” это ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ стартС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш DockerfileΒ Π³ΠΎΡ‚ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ выглядит:

# our base image
FROM python:3-onbuild

# specify the port number the container should expose
EXPOSE 5000

# run the application
CMD ["python", "./app.py"]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. Команда docker build занимаСтся слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ создания ΠΎΠ±Ρ€Π°Π·Π° Π½Π° основС Dockerfile.

Листинг Π½ΠΈΠΆΠ΅ дСмонстрируСт процСсс. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ сами (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ†Π΅), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΌ Π±Ρ‹Π» ваш username вмСсто ΠΌΠΎΠ΅Π³ΠΎ. Username Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€ΠΈ рСгистрации Π½Π° Docker hub. Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Ρ‚ΠΎ сдСлайтС это Π΄ΠΎ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Команда docker build довольно проста: ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π³ с Ρ„Π»Π°Π³ΠΎΠΌΒ -tΒ ΠΈ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚Β Dockerfile.

$ docker build -t prakhar1989/catnip .
Sending build context to Docker daemon 8.704 kB
Step 1 : FROM python:3-onbuild
# Executing 3 build triggers...
Step 1 : COPY requirements.txt /usr/src/app/
 ---> Using cache
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Using cache
Step 1 : COPY . /usr/src/app
 ---> 1d61f639ef9e
Removing intermediate container 4de6ddf5528c
Step 2 : EXPOSE 5000
 ---> Running in 12cfcf6d67ee
 ---> f423c2f179d1
Removing intermediate container 12cfcf6d67ee
Step 3 : CMD python ./app.py
 ---> Running in f01401a5ace9
 ---> 13e87ed1fbc2
Removing intermediate container f01401a5ace9
Successfully built 13e87ed1fbc2

Если Ρƒ вас Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Π°Β python:3-onbuild, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт Π΅Π³ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ΡΡ Π·Π° созданиС вашСго ΠΎΠ±Ρ€Π°Π·Π°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠΎΠ΅Π³ΠΎ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ onbuild. Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· Π³ΠΎΡ‚ΠΎΠ²! ЗапуститС docker imagesΒ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ свой ΠΎΠ±Ρ€Π°Π· Π² спискС.

ПослСдний шаг β€” Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ username Π½Π° свой):

$ docker run -p 8888:5000 prakhar1989/catnip
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создали свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π”ΠΎΠΊΠ΅Ρ€Π°!

2.5 Docker Π½Π° AWS

Π§Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСльзя ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ нашС ΠΎΡ„ΠΈΠ³Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AWSΒ Elastic Beanstalk Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π·Π° ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΠΈΠΊΠΎΠ². ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Beanstalk Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Docker push

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ Π½Π° AWS это ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π· Π² рСгистрС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· AWS. Π•ΡΡ‚ΡŒ нСсколько Docker-рСгистров (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный). Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΒ Docker Hub. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

$ docker push prakhar1989/catnip

Если это ваша пСрвая публикация, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ попросит вас Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Π²Ρ…ΠΎΠ΄Π° Π² Docker Hub.

$ docker login
Username: prakhar1989
WARNING: login credentials saved in /Users/prakhar/.docker/config.json
Login Succeeded

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° своС. ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ username/image_name, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΠΊΡƒΠ΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·.

ПослС этого ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° свой ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. НапримСр, Π²ΠΎΡ‚ страница ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ β€” Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ рСгистрС (ΠΈΠ»ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ рСгистрС Π²ΠΎΠΎΠ±Ρ‰Π΅) Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ стартапа-Π΅Π΄ΠΈΠ½ΠΎΡ€ΠΎΠ³Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот шаг. ΠœΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ свой ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ, пропустив нСсколько ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… шагов.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш ΠΎΠ±Ρ€Π°Π· ΠΎΠ½Π»Π°ΠΉΠ½, ΠΈ любой Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ docker run -p 8888:5000 prakhar1989/catnip

Если Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π²Ρ‹ ΠΌΡƒΡ‡Π°Π»ΠΈΡΡŒ с установкой локального Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ окруТСния ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΡ‚ΠΎ это Π·Π²ΡƒΡ‡ΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π”ΠΎΠΊΠ΅Ρ€ β€” это сила!

Beanstalk

AWS Elastic Beanstalk (EB) это PaaS (Platform as a Service β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊ сСрвис) ΠΎΡ‚ Amazon Web Services. Если Π²Ρ‹ использовали Heroku, Google App Engine ΠΈ Ρ‚.Π΄., Ρ‚ΠΎ всС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ. Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ сообщаСтС EB ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° EB занимаСтся всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ, Π² Ρ‚ΠΎΠΌ числС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°ΠΌΠΈ. Π’ Π°ΠΏΡ€Π΅Π»Π΅ 2014 Π² EB Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для дСплоя. Π£ EB ΠΎΡ‡Π΅Π½ΡŒ понятный интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, поэтому для простоты Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Π±-интСрфСйс для запуска нашСго прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π²Π°ΠΌ потрСбуСтся Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° AWS. Если Ρƒ вас Π΅Π³ΠΎ Π½Π΅Ρ‚, Ρ‚ΠΎ создайтС Π΅Π³ΠΎ. Для этого потрСбуСтся ввСсти Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, эта услуга бСсплатна, ΠΈ всС, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого пособия Ρ‚ΠΎΠΆΠ΅ бСсплатно.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ:

  • Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² свою консоль AWS.
  • НаТмитС Π½Π° Elastic Beanstalk. Бсылка находится Π² сСкции compute, Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ. Или просто ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ сюда.

  • НаТмитС Π½Π° «Create New Application» Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ.
  • Π”Π°ΠΉΡ‚Π΅ своСму ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ (Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅) имя ΠΈ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ описаниС.
  • Π½Π° экранС New EnvironmentΒ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅Β Web Server Environment.
  • Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ экран ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ DockerΒ ΠΈΠ· Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. МоТно ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒΒ Environment typeΒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. НаТмитС Next.

  • Π’ΡƒΡ‚ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ систСмС EB ΠΎ нашСм ΠΎΠ±Ρ€Π°Π·Π΅. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β Ρ„Π°ΠΉΠ» Dockerrun.aws.jsonΒ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ flask-appΒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅Β NameΒ ΠΎΠ±Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ соотвСтствовало названию вашСго ΠΎΠ±Ρ€Π°Π·Π°. НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, я ΠΎΠΏΠΈΡˆΡƒ содСрТаниС Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅. ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ «upload your own» ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ».
  • Π”Π°Π»Π΅Π΅, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ окруТСния ΠΈ URL. Π­Ρ‚ΠΎΡ‚ URL ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅.
  • Пока Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π°Π²ΠΎΠΊ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽΒ Additional Resources. НаТмитС Next ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Configuration Details.
  • Π’ этой сСкции Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ инстанса t1.micro. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это бСсплатный тип ΠΎΡ‚ AWS. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π²Ρ…ΠΎΠ΄Π°. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‚ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈ просто пропуститС эту Ρ‡Π°ΡΡ‚ΡŒ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ.
  • Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Environment TagsΒ andΒ Permissions, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ просто ΠΆΠΌΠΈΡ‚Π΅ Next Π΄Π²Π° Ρ€Π°Π·Π° подряд. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ экран Review. Если всС выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π½Π°ΠΆΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒΒ Launch.
  • На послСднСм экранС Π±ΡƒΠ΄Π΅Ρ‚ нСсколько спиннСров. Π­Ρ‚ΠΎ поднимаСтся ΠΈ настраиваСтся вашС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ пяти ΠΌΠΈΠ½ΡƒΡ‚ для ΠΏΠ΅Ρ€Π²ΠΎΠΉ настройки.

Пока ΠΆΠ΄Π΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ взглянСм Π½Π° Ρ„Π°ΠΉΠ»Β Dockerrun.aws.json. Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» для AWS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится информация ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π”ΠΎΠΊΠ΅Ρ€Π°. EB ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°.

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "prakhar1989/catnip",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ],
  "Logging": "/var/log/nginx"
}

Π€Π°ΠΉΠ» довольно понятный, Π½ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°, ΠΈ EB Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ инстанс ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ². Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EB ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска прилоТСния.

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всС красС. ΠŸΠΎΡˆΠ»ΠΈΡ‚Π΅ адрСс своим Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ Π³ΠΈΡ„ΠΊΠ°ΠΌΠΈ с кошками.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅! ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ шагов, Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ EB ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π₯Π΅Ρ€ΠΎΠΊΡƒ нСсколькими наТатиями клавиш. НадСюсь, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π”ΠΎΠΊΠ΅Ρ€ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ дСплоя Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π― ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ AWSΒ ΠΏΡ€ΠΎ single-container Docker environment Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ возмоТности Π² EB.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ, послСднСй части пособия, ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дальшС ΠΈ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ постоянноС бэкэнд-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

3.0 ΠœΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ окруТСния

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΈ просто Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с простого статичСского сайта, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустили Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ локально ΠΈΠ»ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ΅, нСсколькими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. ΠžΠ±Ρ‰Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎΒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ управлСния сСрвисами Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ соврСмСнныС прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ простыС. ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда Π΅ΡΡ‚ΡŒ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°). БистСмы Π²Ρ€ΠΎΠ΄Π΅ Redis ΠΈ Memcached стали практичСски ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся «Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся нСсколько Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… сСрвисов.

Π’ частности, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π”ΠΎΠΊΠ΅Ρ€-окруТСниями. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², спроситС Π²Ρ‹? Ну, ΠΎΠ΄Π½Π° ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдоставляСт ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ. ИдСя совмСщСния процСсса ΠΈ Π΅Π³ΠΎ зависимостСй Π² ΠΎΠ΄Π½ΠΎΠΉ пСсочницС (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ) ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом.

Аналогично Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ Π½Π° части, стоит ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Π Π°Π·Π½Ρ‹ΠΌ частям скорСС всСго Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ рСсурсы, ΠΈ трСбования ΠΌΠΎΠ³ΡƒΡ‚ расти с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Если ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ эти части ΠΈ помСстим Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий Ρ‚ΠΈΠΏ рСсурсов. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ совмСщаСтся с ΠΈΠ΄Π΅Π΅ΠΉ ΠΌΠΈΠΊΡ€ΠΎ сСрвисов. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π”ΠΎΠΊΠ΅Ρ€ (ΠΈ любая другая тСхнология ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ) находится на пСрСдовой соврСмСнных ΠΌΠΈΠΊΡ€ΠΎ сСрвисных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€.

3.1 SF Food Trucks

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅ΠΌ Π² Π”ΠΎΠΊΠ΅Ρ€, называСтся SF Food Trucks (ΠΊ соТалСнию, сСйчас ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.). Моя Ρ†Π΅Π»ΡŒ Π±Ρ‹Π»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ (ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° настоящСС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°), Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ сСрвис, Π½ΠΎ Π½Π΅ слишком слоТноС для этого пособия. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π».

Бэкэнд прилоТСния написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅ (Flask), Π° для поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡΒ Elasticsearch. Как ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² этом пособии, ΠΊΠΎΠ΄ находится Π½Π°Β Github. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ завСлись (надСюсь), Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ этот процСсс. Π’ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ бэкэнд Π½Π° Flask ΠΈ сСрвис Elasticsearch. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: ΠΎΠ΄ΠΈΠ½ для Flask, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для Elasticsearch (ES). Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ станСт популярным, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС, смотря Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ·ΠΊΠΎΠ΅ мСсто.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎ Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ Π½Π΅ слоТно, ΠΏΡ€Π°Π²Π΄Π°? ΠœΡ‹ ΡƒΠΆΠ΅ создавали Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. А для Elasticsearch… Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Ρ…Π°Π±Π΅:

$ docker search elasticsearch
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
elasticsearch                     Elasticsearch is a powerful open source se...   697       [OK]
itzg/elasticsearch                Provides an easily configurable Elasticsea...   17                   [OK]
tutum/elasticsearch               Elasticsearch image - listens in port 9200.     15                   [OK]
barnybug/elasticsearch            Latest Elasticsearch 1.7.2 and previous re...   15                   [OK]
digitalwonderland/elasticsearch   Latest Elasticsearch with Marvel & Kibana       12                   [OK]
monsantoco/elasticsearch          ElasticSearch Docker image                      9                    [OK]

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· для Elasticsearch. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ES, Π½ΡƒΠΆΠ½ΠΎ всСго лишь Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ docker run, ΠΈ вскорС Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ ES.

$ docker run -dp 9200:9200 elasticsearch
d582e031a005f41eea704cdc6b21e62e7a8a42021297ce7ce123b945ae3d3763

$ curl 0.0.0.0:9200
{
  "name" : "Ultra-Marine",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с Flask. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ΅Π½ Dockerfile. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ сСкции ΠΌΡ‹ использовали ΠΎΠ±Ρ€Π°Π·Β python:3-onbuild Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ. Однако, Π² этом Ρ€Π°Π·, ΠΊΡ€ΠΎΠΌΠ΅ установки зависимостСй Ρ‡Π΅Ρ€Π΅Π· pip, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Javascript-Ρ„Π°ΠΉΠ» для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°. Для этого понадобится Nodejs. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ свой Π±ΠΈΠ»Π΄ с нуля, поэтому Π½Π°Ρ‡Π½Π΅ΠΌ с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ubuntu.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли оказываСтся, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π· Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ спокойно создавайтС свой ΠΎΠ±Ρ€Π°Π· Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСм, для ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π° Docker Hub ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉΒ Dockerfile Π½Π° Github. ΠŸΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π”ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Ρ‹ β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… способов Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹.

Наш Dockerfile для Flask-прилоТСния выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# start from base
FROM ubuntu:14.04
MAINTAINER Prakhar Srivastav <[email protected]>

# install system-wide deps for python and node
RUN apt-get -yqq update
RUN apt-get -yqq install python-pip python-dev
RUN apt-get -yqq install nodejs npm
RUN ln -s /usr/bin/nodejs /usr/bin/node

# copy our application code
ADD flask-app /opt/flask-app
WORKDIR /opt/flask-app

# fetch app specific deps
RUN npm install
RUN npm run build
RUN pip install -r requirements.txt

# expose port
EXPOSE 5000

# start app
CMD [ "python", "./app.py" ]

Π’ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ всСго Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Ubuntu LTS, ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Β apt-get для установки зависимостСй, Π² частности β€” Python ΠΈ Node. Π€Π»Π°Π³Β yqq Π½ΡƒΠΆΠ΅Π½ для игнорирования Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ автоматичСского Π²Ρ‹Π±ΠΎΡ€Π° «Yes» Π²ΠΎ всСх мСстах. Π’Π°ΠΊΠΆΠ΅ создаСтся символичСская ссылка для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° node. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ ADD для копирования прилоТСния Π² Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ β€” /opt/flask-app. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вСсь наш ΠΊΠΎΠ΄. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСм эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² контСкстС этой Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° наши систСмныС зависимости установлСны, ΠΏΠΎΡ€Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости уровня прилоТСния. НачнСм с Node, установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· npm ΠΈ запуска ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сборки, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² нашСм Ρ„Π°ΠΉΠ»Π΅Β package.json. Π’ ΠΊΠΎΠ½Ρ†Π΅ устанавливаСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Python, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ€Ρ‚ ΠΈ опрСдСляСм запуск прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒ CMD, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ prakhar1989 Π½Π° свой username Π½ΠΈΠΆΠ΅).

$ docker build -t prakhar1989/foodtrucks-web .

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ubuntu, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ запуск docker build послС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ практичСски ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

$ docker run -P prakhar1989/foodtrucks-web
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Out of retries. Bailing out...

Упс! НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ смогло Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Elasticsearch. Как ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ? ΠžΡ‚Π²Π΅Ρ‚ β€” Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСкции.

3.2 Π‘Π΅Ρ‚ΠΈ Docker

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ возмоТности Π”ΠΎΠΊΠ΅Ρ€Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ описанной Π·Π°Π΄Π°Ρ‡ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΡƒΠΌΠ°ΡŽ, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ удобство Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ вскорС ΠΈΠ·ΡƒΡ‡ΠΈΠΌ.

Π›Π°Π΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим docker ps, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Ρƒ нас:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   2 seconds ago       Up 2 seconds        0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES ΠΏΠΎ адрСсу ΠΈ ΠΏΠΎΡ€Ρ‚ΡƒΒ 0.0.0.0:9200, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ. Если ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ этому адрСсу, Ρ‚ΠΎ ΠΎΠ½ΠΎ смоТСт ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с ES, Π²Π΅Ρ€Π½ΠΎ? Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ описано ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

es = Elasticsearch(host='es')

НуТно ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° хостС 0.0.0.0Β (ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ 9200), ΠΈ всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΄Π°? К соТалСнию, Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IP 0.0.0.0 это адрСс для доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ с  хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΌΠΎΠ΅Π³ΠΎ Мака. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ этому адрСсу. Π›Π°Π΄Π½ΠΎ, Ссли Π½Π΅ этот адрСс, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ адрСс Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ES? Π Π°Π΄, Ρ‡Ρ‚ΠΎ Π²Ρ‹ спросили.

Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСти Π² Π”ΠΎΠΊΠ΅Ρ€Π΅. ПослС установки, Π”ΠΎΠΊΠ΅Ρ€ автоматичСски создаСт Ρ‚Ρ€ΠΈ сСти:

$ docker network ls
NETWORK ID          NAME                DRIVER
075b9f628ccc        none                null
be0f7178486c        host                host
8022115322ec        bridge              bridge

Π‘Π΅Ρ‚ΡŒΒ bridgeΒ β€” это ΡΠ΅Ρ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² этой сСти bridge. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "8022115322ec80613421b0282e7ee158ec41e16f565a3e86fa53496105deb2d7",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "e931ab24dedc1640cddf6286d08f115a83897c88223058305460d7bd793c1947": {
                "EndpointID": "66965e83bf7171daeb8652b39590b1f8c23d066ded16522daeb0128c9c25c189",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β e931ab24dedc находится Π² сСкции Containers. Π’Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½ IP-адрСс, Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ этому ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ β€” 172.17.0.2. ИмСнно этот адрСс ΠΌΡ‹ ΠΈ искали? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ: запустим Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ IP:

$ docker run -it --rm prakhar1989/foodtrucks-web bash
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
bash: curl: command not found
root@35180ccc206a:/opt/flask-app# apt-get -yqq install curl
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
{
  "name" : "Jane Foster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@35180ccc206a:/opt/flask-app# exit

БСйчас всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ понятно. ΠœΡ‹ запустили ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ с процСссом bash. Π€Π»Π°Π³ --rm Π½ΡƒΠΆΠ΅Π½ для удобства, благодаря Π½Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски удаляСтся послС Π²Ρ‹Ρ…ΠΎΠ΄Π°. ΠœΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ curl, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ адрСсу 172.17.0.2:9200 Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ES! Π‘ΡƒΠΏΠ΅Ρ€!

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ нашли способ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, сущСствуСт нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с этим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ:

  1. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ записи Π² Ρ„Π°ΠΉΠ»Β /etc/hostsΒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΎ, Ρ‡Ρ‚ΠΎ имя хоста esΒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚Β 172.17.0.2. Если IP-адрСс мСняСтся, Ρ‚ΠΎ придСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ΅Π½ΡΡ‚ΡŒ запись.
  2. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Ρ‚ΡŒΒ bridge ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄Β Π½Π΅ бСзопасСн.

Но Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΠΎΠΊΠ΅Ρ€ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сСти. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ /etc/hosts, сСйчас ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим свою ΡΠ΅Ρ‚ΡŒ:

$ docker network create foodtrucks
1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89

$ docker network ls
NETWORK ID          NAME                DRIVER
1a3386375797        foodtrucks          bridge
8022115322ec        bridge              bridge
075b9f628ccc        none                null
be0f7178486c        host                host

Команда network create создаСт Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚ΡŒΒ bridge. Нам сСйчас Π½ΡƒΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ сСтСй, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… Π²Β ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ наши ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° --net. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΈ сдСлаСм, Π½ΠΎ сначала остановим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ElasticSearch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² сСти bridge ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   4 hours ago         Up 4 hours          0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

$ docker stop e931ab24dedc
e931ab24dedc

$ docker run -dp 9200:9200 --net foodtrucks --name es elasticsearch
2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651

$ docker network inspect foodtrucks
[
    {
        "Name": "foodtrucks",
        "Id": "1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651": {
                "EndpointID": "15eabc7989ef78952fb577d0013243dae5199e8f5c55f1661606077d5b78e72a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

ΠœΡ‹ сдСлали Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π΄Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ es. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° запуск происходит Π² сСти.

$ docker run -it --rm --net foodtrucks prakhar1989/foodtrucks-web bash
root@53af252b771a:/opt/flask-app# cat /etc/hosts
172.18.0.3  53af252b771a
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  es
172.18.0.2  es.foodtrucks

root@53af252b771a:/opt/flask-app# curl es:9200
bash: curl: command not found
root@53af252b771a:/opt/flask-app# apt-get -yqq install curl
root@53af252b771a:/opt/flask-app# curl es:9200
{
  "name" : "Doctor Leery",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@53af252b771a:/opt/flask-app# ls
app.py  node_modules  package.json  requirements.txt  static  templates  webpack.config.js
root@53af252b771a:/opt/flask-app# python app.py
Index not found...
Loading data in elasticsearch ...
Total trucks loaded:  733
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
root@53af252b771a:/opt/flask-app# exit

Π£Ρ€Π°! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π”ΠΎΠΊΠ΅Ρ€ внСс Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ Π² Ρ„Π°ΠΉΠ» /etc/hosts, ΠΈ поэтому es:9200 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ β€” этот адрСс ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ направляСт запросы Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запустим Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎ-настоящСму:

$ docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web
2a1b77e066e646686f669bab4759ec1611db359362a031667cacbe45c3ddb413

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                              NAMES
2a1b77e066e6        prakhar1989/foodtrucks-web   "python ./app.py"        2 seconds ago       Up 1 seconds        0.0.0.0:5000->5000/tcp             foodtrucks-web
2c0b96f9b803        elasticsearch                "/docker-entrypoint.s"   21 minutes ago      Up 21 minutes       0.0.0.0:9200->9200/tcp, 9300/tcp   es

$ curl -I 0.0.0.0:5000
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 3697
Server: Werkzeug/0.11.2 Python/2.7.6
Date: Sun, 10 Jan 2016 23:58:53 GMT

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://0.0.0.0:5000, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ всСго 4 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‡Ρ‚ΠΎΠ±Ρ‹ с нуля Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния. Π― собрал эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² bash-скрипт.

#!/bin/bash

# build the flask container
docker build -t prakhar1989/foodtrucks-web .

# create the network
docker network create foodtrucks

# start the ES container
docker run -d --net foodtrucks -p 9200:9200 -p 9300:9300 --name es elasticsearch

# start the flask app container
docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Или Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° сСрвСрС, Π³Π΄Π΅ установлСн Π”ΠΎΠΊΠ΅Ρ€. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всю систСму с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹!

$ git clone https://github.com/prakhar1989/FoodTrucks
$ cd FoodTrucks
$ ./setup-docker.sh

Π’ΠΎΡ‚ ΠΈ всС! По-ΠΌΠΎΠ΅ΠΌΡƒ, это нСвСроятно ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния!

Docker Links

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π», стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΒ docker network это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ новая Ρ„ΠΈΡ‡Π°, ΠΎΠ½Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅Π»ΠΈΠ· Docker 1.9Β .

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ появился network, ссылки Π±Ρ‹Π»ΠΈ допустимым способом настройки взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ соотвСтствии с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, linking вскорС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² статус deprecated. Если Π²Π°ΠΌ попадСтся Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ link для соСдинСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ просто Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого network (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° links являСтся legacy, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.)

3.3 Docker Compose

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°. Но Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… это:

  1. Docker Machine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-хосты Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°.
  2. Docker ComposeΒ β€” инструмСнт для опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  3. Docker Swarm β€” Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для кластСризации.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этих инструмСнтов β€” Docker Compose, ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Π£ Docker Compose довольно интСрСсная прСдыстория. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ компания OrchardUp запустила инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Fig. ИдСя Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ окруТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ восприняли Π½Π° Hacker NewsΒ — я смутно помню, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π» ΠΎ Π½Π΅ΠΌ, Π½ΠΎ Π½Π΅ особо понял Π΅Π³ΠΎ смысла.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉΒ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Fig ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚:

На самом Π΄Π΅Π»Π΅, смысл Π”ΠΎΠΊΠ΅Ρ€Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСссы. БСгодня Ρƒ Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠ΅ API для запуска процСссов: Ρ€Π°ΡΡˆΠ°Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (ΠΈΠ½Ρ‹ΠΌΠΈ словами, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ) Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (shared volumes), ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚ΠΎΠ² с хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΎΠ³ΠΎΠ², ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Но большС Π½ΠΈΡ‡Π΅Π³ΠΎ: Π”ΠΎΠΊΠ΅Ρ€ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСссов.

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ содСрТатся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности оркСстрации Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для создания Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ «ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ», Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΎ Π±Ρ‹ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. И Π²ΠΎΡ‚ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ инструмСнт Π²Ρ€ΠΎΠ΄Π΅ Fig: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ с Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ «Π·Π°ΠΏΡƒΡΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ» (ΠΈΠ½Ρ‹ΠΌΠΈ словами, «Π·Π°ΠΏΡƒΡΠΊΠ΅ оркСстрированного кластСра ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²») вмСсто «Π·Π°ΠΏΡƒΡΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²».

Оказалось, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π”ΠΎΠΊΠ΅Ρ€Π° согласны с Ρ‚Π°ΠΊΠΈΠΌΠΈ мыслями. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ, Fig Π½Π°Π±Ρ€Π°Π» ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, Docker Inc. Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, ΠΊΡƒΠΏΠΈΠ»ΠΈ компанию ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Docker Compose.

Π˜Ρ‚Π°ΠΊ, Π·Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Compose? Π­Ρ‚ΠΎ инструмСнт для простого опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» docker-compose.yml, ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ сСрвисов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, смоТСм Π»ΠΈ ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Β docker-compose.yml для нашСго прилоТСния SF-Foodtrucks ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, способСн Π»ΠΈ ΠΎΠ½ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚.

Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose. Π•ΡΡ‚ΡŒ Ρƒ вас Windows ΠΈΠ»ΠΈ Mac, Ρ‚ΠΎ Docker Compose ΡƒΠΆΠ΅ установлСн β€” ΠΎΠ½ ΠΈΠ΄Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Docker Toolbox. На Linux ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose слСдуя простым инструкциям Π½Π° сайтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Compose написан Π½Π° Python, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просто pip install docker-compose. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker-compose version
docker-compose version 1.7.1, build 0a9ab35
docker-py version: 1.8.1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ созданию Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml. Бинтаксис yml-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ простой, ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

version: "2"
services:
  es:
    image: elasticsearch
  web:
    image: prakhar1989/foodtrucks-web
    command: python app.py
    ports:
      - "5000:5000"
    volumes:
      - .:/code

      

Π”Π°Π²Π°ΠΉΡ‚Π΅ я Ρ€Π°Π·Π±Π΅Ρ€Ρƒ это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. На Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нСймспСйса для Π½Π°ΡˆΠΈΡ… сСрвисов: esΒ ΠΈΒ web. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСрвису ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… image β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Для es ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ доступный Π½Π° Docker Hub ΠΎΠ±Ρ€Π°Π· elasticsearch. Для Flask-прилоТСния β€” Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ command ΠΈ portsΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. volumes ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ монтирования, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ web. Π­Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΠΎΠ³Π°ΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: НуТно Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с файлом docker-compose.yml Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Compose.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π€Π°ΠΉΠ» Π³ΠΎΡ‚ΠΎΠ², Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π°Β docker-composeΒ Π² дСйствии. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚Ρ‹ свободны. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Flask ΠΈ ES, Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΈΡ… ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ:

$ docker stop $(docker ps -q)
39a2f5df14ef
2a1b77e066e6

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker-compose. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Foodtrucks ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker-compose up.

$ docker-compose up
Creating network "foodtrucks_default" with the default driver
Creating foodtrucks_es_1
Creating foodtrucks_web_1
Attaching to foodtrucks_es_1, foodtrucks_web_1
es_1  | [2016-01-11 03:43:50,300][INFO ][node                     ] [Comet] version[2.1.1], pid[1], build[40e2c53/2015-12-15T13:05:55Z]
es_1  | [2016-01-11 03:43:50,307][INFO ][node                     ] [Comet] initializing ...
es_1  | [2016-01-11 03:43:50,366][INFO ][plugins                  ] [Comet] loaded [], sites []
es_1  | [2016-01-11 03:43:50,421][INFO ][env                      ] [Comet] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [16gb], net total_space [18.1gb], spins? [possibly], types [ext4]
es_1  | [2016-01-11 03:43:52,626][INFO ][node                     ] [Comet] initialized
es_1  | [2016-01-11 03:43:52,632][INFO ][node                     ] [Comet] starting ...
es_1  | [2016-01-11 03:43:52,703][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:52,704][INFO ][transport                ] [Comet] publish_address {172.17.0.2:9300}, bound_addresses {[::]:9300}
es_1  | [2016-01-11 03:43:52,721][INFO ][discovery                ] [Comet] elasticsearch/cEk4s7pdQ-evRc9MqS2wqw
es_1  | [2016-01-11 03:43:55,785][INFO ][cluster.service          ] [Comet] new_master {Comet}{cEk4s7pdQ-evRc9MqS2wqw}{172.17.0.2}{172.17.0.2:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
es_1  | [2016-01-11 03:43:55,818][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:55,819][INFO ][http                     ] [Comet] publish_address {172.17.0.2:9200}, bound_addresses {[::]:9200}
es_1  | [2016-01-11 03:43:55,819][INFO ][node                     ] [Comet] started
es_1  | [2016-01-11 03:43:55,826][INFO ][gateway                  ] [Comet] recovered [0] indices into cluster_state
es_1  | [2016-01-11 03:44:01,825][INFO ][cluster.metadata         ] [Comet] [sfdata] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [truck]
es_1  | [2016-01-11 03:44:02,373][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,510][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,593][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,708][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:03,047][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ IP Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΡ€ΡƒΡ‚ΠΎ, Π΄Π°? ВсСго лишь ΠΏΠ°Ρ€Π° строк ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ нСсколько Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² унисон. Π”Π°Π²Π°ΠΉΡ‚Π΅ остановим сСрвисы ΠΈ пСрСзапустим Π² detached mode:

web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Killing foodtrucks_web_1 ... done
Killing foodtrucks_es_1 ... done

$ docker-compose up -d
Starting foodtrucks_es_1
Starting foodtrucks_web_1

$ docker-compose ps
      Name                    Command               State           Ports
----------------------------------------------------------------------------------
foodtrucks_es_1    /docker-entrypoint.sh elas ...   Up      9200/tcp, 9300/tcp
foodtrucks_web_1   python app.py                    Up      0.0.0.0:5000->5000/tcp

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹. ΠžΡ‚ΠΊΡƒΠ΄Π° бСрутся ΠΈΠΌΠ΅Π½Π°? Π˜Ρ… Compose ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» сам. Но Ρ‡Ρ‚ΠΎ насчСт сСти? Π•Π³ΠΎ Compose Ρ‚ΠΎΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ сам? Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ вопрос, Π΄Π°Π²Π°ΠΉΡ‚Π΅ выясним.

Для Π½Π°Ρ‡Π°Π»Π°, остановим Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ сСрвисы. Π˜Ρ… всСгда ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ docker-compose stop
Stopping foodtrucks_web_1 ... done
Stopping foodtrucks_es_1 ... done

Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ ΡΠ΅Ρ‚ΡŒΒ foodtrucks, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ создали Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·. Π­Ρ‚Π° ΡΠ΅Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ потрСбуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Compose автоматичСски сдСлаСт всС Π·Π° нас.

$ docker network rm foodtrucks
$ docker network ls
NETWORK ID          NAME                DRIVER
4eec273c054e        bridge              bridge
9347ae8783bd        none                null
54df57d7f493        host                host

Класс! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² этом чистом состоянии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, способСн Π»ΠΈΒ Compose Π½Π° Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ.

$ docker-compose up -d
Recreating foodtrucks_es_1
Recreating foodtrucks_web_1
$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
f50bb33a3242        prakhar1989/foodtrucks-web   "python app.py"          14 seconds ago      Up 13 seconds       0.0.0.0:5000->5000/tcp   foodtrucks_web_1
e299ceeb4caa        elasticsearch                "/docker-entrypoint.s"   14 seconds ago      Up 14 seconds       9200/tcp, 9300/tcp       foodtrucks_es_1

Пока всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, создались Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сСти:

$ docker network ls
NETWORK ID          NAME                 DRIVER
0c8b474a9241        bridge               bridge              
293a141faac3        foodtrucks_default   bridge              
b44db703cd69        host                 host                
0474c9517805        none                 null  

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Compose ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ создал ΡΠ΅Ρ‚ΡŒΒ foodtrucks_defaultΒ ΠΈ подсоСдинил ΠΎΠ±Π° сСрвиса Π² эту ΡΠ΅Ρ‚ΡŒ, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для сСрвиса ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ сСти, ΠΈ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° доступны Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ Π² сСти. Они доступны ΠΏΠΎ hostname, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, находится Π»ΠΈ эта информация Π² /etc/hosts.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
bb72dcebd379        prakhar1989/foodtrucks-web   "python app.py"          20 hours ago        Up 19 hours         0.0.0.0:5000->5000/tcp   foodtrucks_web_1
3338fc79be4b        elasticsearch                "/docker-entrypoint.s"   20 hours ago        Up 19 hours         9200/tcp, 9300/tcp       foodtrucks_es_1

$ docker exec -it bb72dcebd379 bash
root@bb72dcebd379:/opt/flask-app# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  bb72dcebd379

Упс! ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ„Π°ΠΉΠ» понятия Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎ es. Как ΠΆΠ΅ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΠΈΠ½Π³ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ названию хоста:

root@bb72dcebd379:/opt/flask-app# ping es
PING es (172.18.0.3) 56(84) bytes of data.
64 bytes from foodtrucks_es_1.C
--- es ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.049/0.056/0.064/0.010 ms

Вуаля! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! Каким-Ρ‚ΠΎ магичСским ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ хоста es. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Docker 1.10 Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ систСму, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ сСрвисов Ρ‡Π΅Ρ€Π΅Π· DNS-сСрвСр. Если интСрСсно, Ρ‚ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ release notes.

На этом наш Ρ‚ΡƒΡ€ ΠΏΠΎ Docker Compose Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. Π‘ этим инструмСнтом ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрвисы Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Docker Compose.

НадСюсь, я продСмонстрировал ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ просто ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ срСдой с Compose. Π’ послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ всС Π½Π° AWS!

3.4 AWS Elastic Container Service

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали docker-composeΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:Β docker-compose up. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΈΡ€Ρƒ, Π·Π°ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡŽΠ·Π΅Ρ€ΠΎΠ², ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π΄Π΅Π½Π΅Π³ ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ большой Π΄ΠΎΠΌ Π² Майами. ПослСдниС Ρ‚Ρ€ΠΈ шага выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ этого пособия, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ займСмся выяснСниСм Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ³ΠΎ прилоТСния Π² ΠΎΠ±Π»Π°ΠΊΠΎ AWS.

Если Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ этого мСста, Ρ‚ΠΎ скорСС всСго ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Docker β€” довольно крутая тСхнология. И Π²Ρ‹ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ. ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост популярности Π”ΠΎΠΊΠ΅Ρ€Π° ΠΈ стали Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² свои сСрвисы. БСгодня, Π”ΠΎΠΊΠ΅Ρ€-прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS,Β Azure,Rackspace,Β DigitalOceanΒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…. ΠœΡ‹ ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π½Π° Elastic Beanstalk, Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ AWS Elastic Container Service (ΠΈΠ»ΠΈ ECS).

AWS ECS β€” это ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ сСрвис ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ кластСром Π½Π° EC2 Ρ‡Π΅Ρ€Π΅Π· простой API. Π’ Beanstalk Π±Ρ‹Π»ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ECS позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ аспСкт окруТСния ΠΏΠΎ вашим потрСбностям. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ECS β€” Π½Π΅ самый простой инструмСнт Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ ECS Π΅ΡΡ‚ΡŒ удобный инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (CLI) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Docker Compose ΠΈ автоматичСской ΠΏΡ€ΠΎΠ²ΠΈΠ·ΠΈΠ΅ΠΉ Π½Π° ECS! Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ„Π°ΠΉΠ»Β docker-compose.yml, настройка ΠΈ запуск Π½Π° AWS Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно Π»Π΅Π³ΠΊΠΎΠΉ. НачнСм!

Π’Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ CLI. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π΅ доступна Π½Π° Windows. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ установкС CLI Π½Π° Mac ΠΈ Linux Ρ…ΠΎΡ€ΠΎΡˆΠΎ описаны Π½Π° сайтС с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. УстановитС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ ecs-cli --version
ecs-cli version 0.1.0 (*cbdc2d5)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг β€” Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° инстансах. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EC2 ConsoleΒ ΠΈ создайтС Π½ΠΎΠ²Ρ‹ΠΉ keypair. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈ Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² бСзопасном мСстС. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” имя Ρ€Π΅Π³ΠΈΠΎΠ½Π°. Π― Π½Π°Π·Π²Π°Π» свой ΠΊΠ»ΡŽΡ‡Β ecs ΠΈ ΡƒΠΊΠ°Π·Π°Π» Ρ€Π΅Π³ΠΈΠΎΠ½ us-east-1. Π― ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ повСствованиС с этим Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ настройтС CLI:

$ ecs-cli configure --region us-east-1 --cluster foodtrucks
INFO[0000] Saved ECS CLI configuration for cluster (foodtrucks)

Команда configure с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наш кластСр, ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ кластСра. НуТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€Ρ€ΠΈ создании ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если Ρƒ вас Π½Π΅ настроСн AWS CLI, то слСдуйтС руководству, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описываСт всС шаги.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг позволяСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ шаблон CloudFormation.

$ ecs-cli up --keypair ecs --capability-iam --size 2 --instance-type t2.micro
INFO[0000] Created cluster                               cluster=foodtrucks
INFO[0001] Waiting for your cluster resources to be created
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0122] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0182] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0242] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ названия ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ скачали (Π² ΠΌΠΎΠ΅ΠΌ случаС ecs), количСство инстансов (--size) ΠΈ Ρ‚ΠΈΠΏ инстансов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π€Π»Π°Π³ --capability-iamΒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ рСсурсы IAM.

Π’ послСднСм шагС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» docker-compose.yml. ВрСбуСтся нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ вмСсто ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм копию ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ aws-compose.yml. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ этого Ρ„Π°ΠΉΠ»Π°Β (послС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ):

es:
  image: elasticsearch
  cpu_shares: 100
  mem_limit: 262144000
web:
  image: prakhar1989/foodtrucks-web
  cpu_shares: 100
  mem_limit: 262144000
  ports:
    - "80:5000"
  links:
    - es

    

ЕдинствСнныС отличия ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β mem_limit ΠΈ cpu_shares для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΡƒΠ±Ρ€Π°Π»ΠΈ versionΒ ΠΈ services, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ AWS Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 2 Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Compose. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° инстансах Ρ‚ΠΈΠΏΠ° t2.micro, ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ 250 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ памяти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия, ecs-cliΒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ build. Но Docker Compose ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

$ docker push prakhar1989/foodtrucks-web

ΠšΡ€Π°ΡΠΎΡ‚Π°! Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° ECS!

$ ecs-cli compose --file aws-compose.yml up
INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-foodtrucks:2
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0036] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ Docker Compose β€” Π½Π΅ совпадСниС. АргумСнт --file ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСопрСдСлСния Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (docker-compose.yml). Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ строку desiredStatus=RUNNING lastStatus=RUNNING Π² самом ΠΊΠΎΠ½Ρ†Π΅.

ΠšΡ€ΡƒΡ‚ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ. Как ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ?

ecs-cli ps
Name                                      State    Ports                     TaskDefinition
845e2368-170d-44a7-bf9f-84c7fcd9ae29/web  RUNNING  54.86.14.14:80->5000/tcp  ecscompose-foodtrucks:2
845e2368-170d-44a7-bf9f-84c7fcd9ae29/es   RUNNING                            ecscompose-foodtrucks:2

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://54.86.14.14Β Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Food Trucks Π²ΠΎ всСй своСй ΠΆΠ΅Π»Ρ‚ΠΎ-Ρ‡Π΅Ρ€Π½ΠΎΠΉ красС! Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° консоль AWS ECS.

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» создан ECS-кластСр ‘foodtrucks’, ΠΈ Π² Π½Π΅ΠΌ выполняСтся ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° с двумя инстансами. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΠΎΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒΡΡ Π² этой консоли ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΅Π΅ части ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ ΠΈ всС. ВсСго нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ β€” ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° AWS!

4.0 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. ПослС Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ, Π½ΠΎ интСрСсного пособия Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²! Если Π²Ρ‹ слСдовали пособию Π΄ΠΎ самого ΠΊΠΎΠ½Ρ†Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ заслуТСнно Π³ΠΎΡ€Π΄ΠΈΡ‚ΡŒΡΡ собой. Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ статичСскиС ΠΈ динамичСскиС Π²Π΅Π±-сайты ΠΈ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠΏΡ‹Ρ‚ дСплоя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠΎ.

НадСюсь, ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ этого руководства ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Π΅Π΅ Π² своих способностях ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с сСрвСрами. Когда Ρƒ вас появится новая идСя для сайта ΠΈΠ»ΠΈ прилоТСния, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ смоТСтС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ людям с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями.

4.1 Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

Π’Π°ΡˆΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Π² ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ. МоСй Ρ†Π΅Π»ΡŒΡŽ Π² этом руководствС Π±Ρ‹Π»ΠΎ Π½Π°Π³ΡƒΠ»ΡΡ‚ΡŒ ваш Π°ΠΏΠΏΠ΅Ρ‚ΠΈΡ‚ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΡ‰ΡŒ Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΌΠΈΡ€Π΅ соврСмСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ руководства Π²Ρ€ΠΎΠ΄Π΅ этого ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Π²Π°ΠΌ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пособиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ знакомился с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ сам. НадСюсь, Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ вас, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° прогрСссом Π² этом области Π½Π΅ со стороны, Π° с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π·Π½Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

НиТС β€” список Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… рСсурсов. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ Π² вашСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ β€” ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Ρƒ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

Π£Π΄Π°Ρ‡ΠΈ, ΡŽΠ½Ρ‹ΠΉ ΠΏΠ°Π΄Π°Π²Π°Π½!

4.2 Π€ΠΈΠ΄Π±Π΅ΠΊ Π°Π²Ρ‚ΠΎΡ€Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ моя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы. Π’Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ пособиС? Оно показалось Π²Π°ΠΌ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ?

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ (Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° [email protected]Β ΠΈΠ»ΠΈ просто создайтС issue. Π― Π΅ΡΡ‚ΡŒ Π²Β Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π°.

(Автор ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎ-английски, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ваши ΠΎΡ‚Π·Ρ‹Π²Ρ‹. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΌΠΎΠΈ ошибки. Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это пособиС стало ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… стартовых руководств Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π£ мСня Π½Π΅ получится это Π±Π΅Π· вашСй ΠΏΠΎΠΌΠΎΡ‰ΠΈ.

с нуля Π΄ΠΎ кластСра Π½Π° AWS / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€?

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ:

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развёртывания ΠΈ управлСния прилоТСниями Π² срСдС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы; позволяСт Β«ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСм Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ зависимостями Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт срСду ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Ого! Как ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, Π”ΠΎΠΊΠ΅Ρ€ это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, систСмными администраторам ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ спСциалистам Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΈΡ… прилоТСния Π² пСсочницС (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ), для запуска Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Linux. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ прСимущСство Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСми Π΅Π³ΠΎ зависимостями Π² стандартизированный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, поэтому с Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму ΠΈ рСсурсы Π±ΠΎΠ»Π΅Π΅ эффСктивно.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π² индустрии Π½Π° сСгодняшний дСнь β€” это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ гостСвой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы сСрвСра.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для ΠΏΠΎΠ»Π½ΠΎΠΉ изоляции процСсса для прилоТСния: ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° софт гостСвой ОБ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Но Π·Π° Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. БущСствуСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, нСобходимая для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΆΠ΅Π»Π΅Π·Π° гостСвой ОБ.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ схоТий с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, Π½ΠΎ благодаря ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π΄Π΅Π»Π°ΡŽΡ‚ это с Π² Ρ€Π°Π·Ρ‹ мСньшСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…?

Π’Π·Π»Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±Ρ‹Π» ΠΏΠΎ-настоящСму эпичным. НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ сами ΠΏΠΎ сСбС β€” Π½Π΅ новая тСхнология, Π΄ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΊ распространСны ΠΈ популярны. Π”ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, прСдоставив стандартный API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сильно упростил созданиС ΠΈ использованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» сообщСству вмСстС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² Β The RegisterΒ Π² сСрСдинС 2014 говорится, Ρ‡Ρ‚ΠΎ Π“ΡƒΠ³Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС Π΄Π²ΡƒΡ… ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π² нСдСлю.

Google Trends для слова ‘Docker’

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ росту Π”ΠΎΠΊΠ΅Ρ€Π°, компания-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Docker Inc. Π±Ρ‹Π»Π° ΠΎΡ†Π΅Π½Π΅Π½Π° Π² Π΄Π²Π° с лишним ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²! Благодаря прСимущСствам Π² эффСктивности ΠΈ портативности, Π”ΠΎΠΊΠ΅Ρ€ Π½Π°Ρ‡Π°Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС большС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈ сСйчас стоит Π²ΠΎ Π³Π»Π°Π²Π΅ двиТСния ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (containerization). Как соврСмСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ этот Ρ‚Ρ€Π΅Π½Π΄ ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ.

Π§Π΅ΠΌΡƒ мСня Π½Π°ΡƒΡ‡ΠΈΡ‚ это пособиС?

Π­Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ пособиС ΠΏΠΎ всСм аспСктам Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ ΠΌΠΈΡ„ΠΎΠ² ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π΅ ΠΈ Π΅Π³ΠΎ экосистСмС, ΠΎΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ нСбольшой ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎ сборкС ΠΈ дСплою собствСнных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Amazon Web Services для дСплоя статичных сайтов, ΠΈ Π΄Π²Π° динамичСских Π²Π΅Π±-прилоТСния Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π° EC2 с использованиСм Elastic Beanstalk ΠΈ Elastic Container Service. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ, это пособиС даст Π²Π°ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ содСрТит нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… посвящСн ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ аспСкту Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° Π“ΠΈΡ‚Ρ…Π°Π±Π΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ этом пособии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия Π”ΠΎΠΊΠ΅Ρ€Π° 1.12.0-rc2. Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, поТалуйста, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅Β issue. Бпасибо!

ΠŸΡ€Π΅-Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹

ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для прохоТдСния этого пособия β€” это Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой ΠΈ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. ΠžΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π½ΠΎ Π½Π΅ обязатСлСн. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ столкнСмся с нСсколькими ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ сСрвисами. Π’Π°ΠΌ понадобится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° этих сайтах:

Настройка ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

Установка ΠΈ настройка всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ тяТСлой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π”ΠΎΠΊΠ΅Ρ€ стал довольно ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΈ установка ΠΈ запуск Π΅Π³ΠΎ Π½Π° любой ОБ стало ΠΎΡ‡Π΅Π½ΡŒ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π˜Ρ‚Π°ΠΊ, установим Π”ΠΎΠΊΠ΅Ρ€.

Π”ΠΎΠΊΠ΅Ρ€

Π•Ρ‰Π΅ нСсколько Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Π½Π°Π·Π°Π΄ запуск Π”ΠΎΠΊΠ΅Ρ€Π° Π½Π° OS X ΠΈ Windows Π±Ρ‹Π» Π±Ρ‹Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ. Но ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΈ сСгодня вСсь процСсс β€” ΠΏΡ€ΠΎΡ‰Π΅ Π½Π΅ΠΊΡƒΠ΄Π°. Π­Ρ‚ΠΎΡ‚ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» getting startedΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ инструкции ΠΏΠΎ установкС на Мак,Β Linux ΠΈ Windows.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, всС Π»ΠΈ установлСно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ:

$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Python

Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдустановлСн Π½Π° OS X ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠŸΠΈΡ‚ΠΎΠ½, Ρ‚ΠΎ скачайтС установщик здСсь.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ:

$ python --version
Python 2.7.11

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pip для установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для нашСго прилоТСния. Если pip Π½Π΅ установлСн, Ρ‚ΠΎ скачайтС Π²Π΅Ρ€ΡΠΈΡŽ для своСй систСмы.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ запуститС Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ pip --version
pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)

Java (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Elasticsearch для хранСния ΠΈ поиска. Для локального запуска Elasticsearch Π²Π°ΠΌ понадобится Java. Π’ этом пособии всС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ локально Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Java. Если Java установлСна, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β java -versionΒ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)


1.0 Π˜Π³Ρ€Π°Π΅ΠΌ с Busybox

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ установлСно, ΠΏΠΎΡ€Π° Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Busybox Π½Π° нашСй систСмС ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ docker run.

Для Π½Π°Ρ‡Π°Π»Π°, запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ docker pull busybox

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ устанавливали Π”ΠΎΠΊΠ΅Ρ€ Π½Π° свою систСму, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ появлСниС сообщСния permission denied. Если Π²Ρ‹ Π½Π° МакС, Ρ‚ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π”ΠΎΠΊΠ΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½. Если Π²Ρ‹ Π½Π° ЛинуксС, Ρ‚ΠΎ запуститС эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с sudo. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ dockerΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Команда pull скачиваСт ΠΎΠ±Ρ€Π°Π· busyboxΒ ΠΈΠ· рСгистра Π”ΠΎΠΊΠ΅Ρ€Π°Β ΠΈ сохраняСт Π΅Π³ΠΎ локально. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker images, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² систСмС.

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox                 latest              c51f86c28340        4 weeks ago         1.109 MB

1.1 Docker Run

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с этим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker run:

$ docker run busybox
$

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ! Π­Ρ‚ΠΎ Π±Π°Π³? Ну, Π½Π΅Ρ‚. Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ всСго. Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нашСл ΠΎΠ±Ρ€Π°Π· (Π² нашСм случаС, busybox), Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠœΡ‹ сдСлали docker run busybox, Π½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ загрузился, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ пустая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ. Ну, Π΄Π°, ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ поинтСрСснСС.

$ docker run busybox echo "hello from busybox"
hello from busybox

Π£Ρ€Π°, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄. Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΏΠΎΡΠ»ΡƒΡˆΠ½ΠΎ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· Π½Π΅Π³ΠΎ. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ быстрыС!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker ps. Она Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран список всСх Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² сСйчас Π½Π΅Ρ‚, поэтому выводится пустая строка. НС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:Β docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
305297d7a235        busybox             "uptime"            11 minutes ago      Exited (0) 11 minutes ago                       distracted_goldstine
ff0a5c3750b9        busybox             "sh"                12 minutes ago      Exited (0) 12 minutes ago                       elated_ramanujan

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π΅Π½ список всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ запускали. Π’ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ STATUS ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π°Π·Π°Π΄.

Π’Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ:

$ docker run -it busybox sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # uptime
 05:45:21 up  5:58,  0 users,  load average: 0.00, 0.01, 0.04

 

Команда run с Ρ„Π»Π°Π³ΠΎΠΌ -it ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ tty Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅.

Опасно!: Если хочСтся острых ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒΒ rm -rf binΒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Но ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ запускаСтС Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ снаруТи. Если сдСлаСтС это снаруТи, Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅Β ls,Β echo пСрСстанут Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Когда Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° всС пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, просто Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈ запуститС Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run -it busybox sh. Π”ΠΎΠΊΠ΅Ρ€ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΈ запускС, поэтому всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ снова.

На этом Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΡƒΡ€ ΠΏΠΎ возмоТностям ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker run Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ довольно часто. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ поняли ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΒ run, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ docker run --help, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ². Π‘ΠΊΠΎΡ€ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько способов использования docker run.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ рассмотрим ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker ps -a всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ остатки Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². На протяТСнии этого пособия, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker run нСсколько Ρ€Π°Π·, ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ, Π±Π΅Π·Π΄ΠΎΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡŠΠ΅Π΄Π°Ρ‚ΡŒ дисковоС пространство. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я взял Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β docker rm. ΠŸΡ€ΠΎΡΡ‚ΠΎ скопируйтС ID (ΠΌΠΎΠΆΠ½ΠΎ нСсколько) ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

$ docker rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ снова Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° экран. Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ копирования ΠΈ вставлСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker rm $(docker ps -a -q -f status=exited)

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… статус exited. Π€Π»Π°Π³Β -q Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числСнныС ID, Π° Ρ„Π»Π°Π³Β -fΒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° основС прСдоставлСнных условий. ПослСдняя полСзная Π΄Π΅Ρ‚Π°Π»ΡŒ β€” ΠΊΠΎΠΌΠ°Π½Π΄Π΅Β docker run ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ --rm, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… запусков ΠΈ экспСримСнтов с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker rmi.

1.2 ВСрминология

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали ΠΌΠ½ΠΎΠ³ΠΎ спСцифичного для Π”ΠΎΠΊΠ΅Ρ€Π° ΠΆΠ°Ρ€Π³ΠΎΠ½Π°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π°.

  • Images (ΠΎΠ±Ρ€Π°Π·Ρ‹)Β — Π‘Ρ…Π΅ΠΌΡ‹ нашСго прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ использовали ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker pullΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· busybox.
  • Containers (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹)Β — Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ создали ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker run, ΠΈ использовали ΠΎΠ±Ρ€Π°Π· busybox, скачанный Ρ€Π°Π½Π΅Π΅. Бписок Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker ps.
  • Docker Daemon (Π΄Π΅ΠΌΠΎΠ½ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ сСрвис, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π½Π° хост-машинС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС, запуск ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π”Π΅ΠΌΠΎΠ½ β€” это процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ взаимодСйствуСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚.
  • Docker Client (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, которая позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Β Kitematic, с графичСским интСрфСйсом.
  • Docker HubΒ — РСгистр ДокСр-ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π“Ρ€ΡƒΠ±ΠΎ говоря, Π°Ρ€Ρ…ΠΈΠ² всСх доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ собствСнный рСгистр ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для получСния ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

2.0 Π’Π΅Π±-прилоТСния ΠΈ Π”ΠΎΠΊΠ΅Ρ€

Π‘ΡƒΠΏΠ΅Ρ€! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Β docker run, ΠΏΠΎΠΈΠ³Ρ€Π°Π»ΠΈ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π’ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ этими знаниями, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΡˆΡ‚ΡƒΠΊΠ°ΠΌ: дСплою Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ!

2.1 БтатичСскиС сайты

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ рассмотрим самый простой статичСский Π²Π΅Π±-сайт. Π‘ΠΊΠ°Ρ‡Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· Docker Hub, запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ посмотрим, насколько Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр.

ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ. Для одностраничного сайта Π½Π°ΠΌ понадобится ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π·Π°Ρ€Π°Π½Π΅Π΅ создал для этого пособия ΠΈ размСстил Π² рСгистрС —Β prakhar1989/static-site. МоТно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run.

$ docker run prakhar1989/static-site

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π·Π° Π½Π΅ сущСствуСт локально, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт ΠΎΠ±Ρ€Π°Π· ΠΈΠ· рСгистра, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустит Π΅Π³ΠΎ. Если всС Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ сообщСниС Nginx is running... Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр Π·Π°ΠΏΡƒΡ‰Π΅Π½. Как ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сайт Π² дСйствии? На ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр? И, Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· хост-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β docker runΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π½Π΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ ΠΊ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ спокойно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΎ называСтся detachedΒ mode.

$ docker run -d -P --name static-site prakhar1989/static-site
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810

Π€Π»Π°Π³Β -dΒ ΠΎΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚ (detach) Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Ρ„Π»Π°Π³Β -P сдСлаСт всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ случайными, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ„Π»Π°Π³Β --name это имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker port [CONTAINER].

$ docker port static-site
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://localhost:32769Β Π² своСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ docker-toolbox, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker-machine ip default Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP-адрСс.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ свой ΠΏΠΎΡ€Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ соСдинСния Π½Π° Π½Π΅Π³ΠΎ.

$ docker run -p 8888:80 prakhar1989/static-site
Nginx is running...

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запуститС docker stopΒ ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ID) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, всС Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ это Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр, Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ΡˆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Π΅Π±-сСрвСр Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π·Π°, Π²Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно β€” Π° ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·? ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ эту Ρ‚Π΅ΠΌΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

2.2 ΠžΠ±Ρ€Π°Π·Ρ‹

ΠœΡ‹ касались ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Ρ€Π°Π½Π΅Π΅, Π½ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ заглянСм Π³Π»ΡƒΠ±ΠΆΠ΅: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΎΠ±Ρ€Π°Π·Ρ‹. НаконСц, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ собствСнный ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π΅Π³ΠΎ Π½Π°Β AWS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ. ΠšΡ€ΡƒΡ‚ΠΎ? ΠšΡ€ΡƒΡ‚ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ.

ΠžΠ±Ρ€Π°Π·Ρ‹ это основы для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ скачали (pull)Β ΠΎΠ±Ρ€Π°Π· ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Busybox ΠΈΠ· рСгистра, ΠΈ попросили ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, основанный Π½Π° этом ΠΎΠ±Ρ€Π°Π·Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ список доступных локально ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker images.

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
prakhar1989/catnip              latest              c7ffb5626a50        2 hours ago         697.9 MB
prakhar1989/static-site         latest              b270625a1631        21 hours ago        133.9 MB
python                          3-onbuild           cf4002b2c383        5 days ago          688.8 MB
martin/docker-cleanup-volumes   latest              b42990daaca2        7 weeks ago         22.14 MB
ubuntu                          latest              e9ae3c220b23        7 weeks ago         187.9 MB
busybox                         latest              c51f86c28340        9 weeks ago         1.109 MB
hello-world                     latest              0a6ba66e537a        11 weeks ago        960 B

Π­Ρ‚ΠΎ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я скачал ΠΈΠ· рСгистра, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ я сдСлал сам (скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ). TAG β€” это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ снимок ΠΈΠ»ΠΈ ΡΠ½ΡΠΏΡˆΠΎΡ‚ (snapshot) ΠΎΠ±Ρ€Π°Π·Π°, Π° IMAGE ID β€” это ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Π°.

Для простоты, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΊΠ°ΠΊ ΠΊ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. ΠžΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎΒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒΒ Ρ измСнСниями, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько вСрсий. Если Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ latest. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π°Β ubuntu:

$ docker pull ubuntu:12.04

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· рСгистра (Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Docker Hub) ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный. На Docker Hub Π΅ΡΡ‚ΡŒ дСсятки тысяч ΠΎΠ±Ρ€Π°Π·ΠΎΠ². МоТно ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docker search.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ:

  • Base images (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ±Ρ€Π°Π·Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ubuntu, busybox ΠΈΠ»ΠΈ debian.
  • Child images (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, построСнныС Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ… ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ.

  • ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Docker. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎ слово. Π’ спискС Π²Ρ‹ΡˆΠ΅Β python,Β ubuntu,Β busybox ΠΈ hello-worldΒ β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹Β β€” ΠΎΠ±Ρ€Π°Π·Ρ‹, созданныС простыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ мСня ΠΈ вас. Они построСны Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡƒΒ user/image-name.

2.3 Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚, самоС врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный ΠΎΠ±Ρ€Π°Π·. ЦСль этого Ρ€Π°Π·Π΄Π΅Π»Π° β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с простым ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Flask. Для этого пособия я сдСлал ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΎΠ΅Β ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ Π³ΠΈΡ„ΠΊΡƒ с кошкой. Ну, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, ΠΊΡ‚ΠΎ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ кошСк? Π‘ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊ сСбС Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ.

Π’Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ локально. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ flask-app ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ cdΒ ΠΈ установитС зависимости.

$ cd flask-app
$ pip install -r requirements.txt
$ python app.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Если всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://localhost:5000 Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² дСйствии.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если ΠΊΠΎΠΌΠ°Π½Π΄Π° pip install ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибками «permission denied», Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ с sudo. Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ pip install --user -r requirements.txt.

Выглядит ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ основаны Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Python 3. Π’ частности, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° вСрсия python:3-onbuildΒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° с ΠŸΠΈΡ‚ΠΎΠ½ΠΎΠΌ.

Π§Ρ‚ΠΎ Π·Π° вСрсия onbuild, спроситС Π²Ρ‹?

Π­Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ нСсколько Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ONBUILD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ сборкС Π±ΡƒΠ΄Π΅Ρ‚ скопирован Ρ„Π°ΠΉΠ» requirements.txt, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ pip install с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ тСкущая дирСктория Π±ΡƒΠ΄Π΅Ρ‚ скопирована Π²Β /usr/src/app.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, вСрсия onbuildΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ…Π΅Π»ΠΏΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ скучныС процСссы запуска прилоТСния. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипты), ΠΎΠ±Ρ€Π°Π·Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ всС Π·Π° вас. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ всС ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ для создания своСго ΠΎΠ±Ρ€Π°Π·Π°: Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? ΠžΡ‚Π²Π΅Ρ‚: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Dockerfile.

2.4 Dockerfile

DockerfileΒ β€” это простой тСкстовый Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится список ΠΊΠΎΠΌΠ°Π½Π΄ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ простой способ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания ΠΎΠ±Ρ€Π°Π·Π°. Π‘Π°ΠΌΠΎΠ΅ классноС, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Dockerfile ΠΏΠΎΡ‡Ρ‚ΠΈΒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ своим Π°Π½Π°Π»ΠΎΠ³Π°ΠΌ Π² Linux. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅ΡΡ‚ΡŒ Dockerfile, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ всС Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ с нуля. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ пустой Ρ„Π°ΠΉΠ» Π² любимом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, ΠΈ сохранитС Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π³Π΄Π΅ находится flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. НазовитС Ρ„Π°ΠΉΠ» Dockerfile.

Для Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово FROM.

FROM python:3-onbuild

Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для копирования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ установки зависимостСй. Но ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, onbuild-вСрсия Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π±Π΅Ρ€Π΅Ρ‚ эти Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° сСбя. Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5000, поэтому ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΅Π³ΠΎ:

EXPOSE 5000

ПослСдний шаг β€” ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для запуска прилоТСния. Π­Ρ‚ΠΎ просто python ./app.py. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ CMD:

CMD ["python", "./app.py"]

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β CMD β€” это ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ стартС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш DockerfileΒ Π³ΠΎΡ‚ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ выглядит:

# our base image
FROM python:3-onbuild

# specify the port number the container should expose
EXPOSE 5000

# run the application
CMD ["python", "./app.py"]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. Команда docker build занимаСтся слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ создания ΠΎΠ±Ρ€Π°Π·Π° Π½Π° основС Dockerfile.

Листинг Π½ΠΈΠΆΠ΅ дСмонстрируСт процСсс. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ сами (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ†Π΅), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΌ Π±Ρ‹Π» ваш username вмСсто ΠΌΠΎΠ΅Π³ΠΎ. Username Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€ΠΈ рСгистрации Π½Π° Docker hub. Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Ρ‚ΠΎ сдСлайтС это Π΄ΠΎ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Команда docker build довольно проста: ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π³ с Ρ„Π»Π°Π³ΠΎΠΌΒ -tΒ ΠΈ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚Β Dockerfile.

$ docker build -t prakhar1989/catnip .
Sending build context to Docker daemon 8.704 kB
Step 1 : FROM python:3-onbuild
# Executing 3 build triggers...
Step 1 : COPY requirements.txt /usr/src/app/
 ---> Using cache
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Using cache
Step 1 : COPY . /usr/src/app
 ---> 1d61f639ef9e
Removing intermediate container 4de6ddf5528c
Step 2 : EXPOSE 5000
 ---> Running in 12cfcf6d67ee
 ---> f423c2f179d1
Removing intermediate container 12cfcf6d67ee
Step 3 : CMD python ./app.py
 ---> Running in f01401a5ace9
 ---> 13e87ed1fbc2
Removing intermediate container f01401a5ace9
Successfully built 13e87ed1fbc2

Если Ρƒ вас Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Π°Β python:3-onbuild, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт Π΅Π³ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ΡΡ Π·Π° созданиС вашСго ΠΎΠ±Ρ€Π°Π·Π°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠΎΠ΅Π³ΠΎ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ onbuild. Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· Π³ΠΎΡ‚ΠΎΠ²! ЗапуститС docker imagesΒ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ свой ΠΎΠ±Ρ€Π°Π· Π² спискС.

ПослСдний шаг β€” Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ username Π½Π° свой):

$ docker run -p 8888:5000 prakhar1989/catnip
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создали свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π”ΠΎΠΊΠ΅Ρ€Π°!

2.5 Docker Π½Π° AWS

Π§Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСльзя ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ нашС ΠΎΡ„ΠΈΠ³Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AWSΒ Elastic Beanstalk Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π·Π° ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΠΈΠΊΠΎΠ². ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Beanstalk Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Docker push

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ Π½Π° AWS это ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π· Π² рСгистрС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· AWS. Π•ΡΡ‚ΡŒ нСсколько Docker-рСгистров (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный). Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΒ Docker Hub. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

$ docker push prakhar1989/catnip

Если это ваша пСрвая публикация, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ попросит вас Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Π²Ρ…ΠΎΠ΄Π° Π² Docker Hub.

$ docker login
Username: prakhar1989
WARNING: login credentials saved in /Users/prakhar/.docker/config.json
Login Succeeded

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° своС. ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ username/image_name, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΠΊΡƒΠ΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·.

ПослС этого ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° свой ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. НапримСр, Π²ΠΎΡ‚ страница ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ β€” Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ рСгистрС (ΠΈΠ»ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ рСгистрС Π²ΠΎΠΎΠ±Ρ‰Π΅) Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ стартапа-Π΅Π΄ΠΈΠ½ΠΎΡ€ΠΎΠ³Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот шаг. ΠœΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ свой ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ, пропустив нСсколько ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… шагов.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш ΠΎΠ±Ρ€Π°Π· ΠΎΠ½Π»Π°ΠΉΠ½, ΠΈ любой Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ docker run -p 8888:5000 prakhar1989/catnip

Если Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π²Ρ‹ ΠΌΡƒΡ‡Π°Π»ΠΈΡΡŒ с установкой локального Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ окруТСния ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΡ‚ΠΎ это Π·Π²ΡƒΡ‡ΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π”ΠΎΠΊΠ΅Ρ€ β€” это сила!

Beanstalk

AWS Elastic Beanstalk (EB) это PaaS (Platform as a Service β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊ сСрвис) ΠΎΡ‚ Amazon Web Services. Если Π²Ρ‹ использовали Heroku, Google App Engine ΠΈ Ρ‚.Π΄., Ρ‚ΠΎ всС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ. Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ сообщаСтС EB ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° EB занимаСтся всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ, Π² Ρ‚ΠΎΠΌ числС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°ΠΌΠΈ. Π’ Π°ΠΏΡ€Π΅Π»Π΅ 2014 Π² EB Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для дСплоя. Π£ EB ΠΎΡ‡Π΅Π½ΡŒ понятный интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, поэтому для простоты Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Π±-интСрфСйс для запуска нашСго прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π²Π°ΠΌ потрСбуСтся Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° AWS. Если Ρƒ вас Π΅Π³ΠΎ Π½Π΅Ρ‚, Ρ‚ΠΎ создайтС Π΅Π³ΠΎ. Для этого потрСбуСтся ввСсти Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, эта услуга бСсплатна, ΠΈ всС, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого пособия Ρ‚ΠΎΠΆΠ΅ бСсплатно.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ:

  • Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² свою консоль AWS.
  • НаТмитС Π½Π° Elastic Beanstalk. Бсылка находится Π² сСкции compute, Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ. Или просто ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ сюда.

  • НаТмитС Π½Π° «Create New Application» Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ.
  • Π”Π°ΠΉΡ‚Π΅ своСму ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ (Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅) имя ΠΈ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ описаниС.
  • Π½Π° экранС New EnvironmentΒ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅Β Web Server Environment.
  • Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ экран ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ DockerΒ ΠΈΠ· Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. МоТно ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒΒ Environment typeΒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. НаТмитС Next.

  • Π’ΡƒΡ‚ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ систСмС EB ΠΎ нашСм ΠΎΠ±Ρ€Π°Π·Π΅. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β Ρ„Π°ΠΉΠ» Dockerrun.aws.jsonΒ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ flask-appΒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅Β NameΒ ΠΎΠ±Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ соотвСтствовало названию вашСго ΠΎΠ±Ρ€Π°Π·Π°. НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, я ΠΎΠΏΠΈΡˆΡƒ содСрТаниС Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅. ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ «upload your own» ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ».
  • Π”Π°Π»Π΅Π΅, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ окруТСния ΠΈ URL. Π­Ρ‚ΠΎΡ‚ URL ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅.
  • Пока Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π°Π²ΠΎΠΊ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽΒ Additional Resources. НаТмитС Next ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Configuration Details.
  • Π’ этой сСкции Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ инстанса t1.micro. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это бСсплатный тип ΠΎΡ‚ AWS. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π²Ρ…ΠΎΠ΄Π°. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‚ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈ просто пропуститС эту Ρ‡Π°ΡΡ‚ΡŒ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ.
  • Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Environment TagsΒ andΒ Permissions, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ просто ΠΆΠΌΠΈΡ‚Π΅ Next Π΄Π²Π° Ρ€Π°Π·Π° подряд. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ экран Review. Если всС выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π½Π°ΠΆΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒΒ Launch.
  • На послСднСм экранС Π±ΡƒΠ΄Π΅Ρ‚ нСсколько спиннСров. Π­Ρ‚ΠΎ поднимаСтся ΠΈ настраиваСтся вашС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ пяти ΠΌΠΈΠ½ΡƒΡ‚ для ΠΏΠ΅Ρ€Π²ΠΎΠΉ настройки.

Пока ΠΆΠ΄Π΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ взглянСм Π½Π° Ρ„Π°ΠΉΠ»Β Dockerrun.aws.json. Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» для AWS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится информация ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π”ΠΎΠΊΠ΅Ρ€Π°. EB ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°.

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "prakhar1989/catnip",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ],
  "Logging": "/var/log/nginx"
}

Π€Π°ΠΉΠ» довольно понятный, Π½ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°, ΠΈ EB Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ инстанс ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ². Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EB ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска прилоТСния.

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всС красС. ΠŸΠΎΡˆΠ»ΠΈΡ‚Π΅ адрСс своим Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ Π³ΠΈΡ„ΠΊΠ°ΠΌΠΈ с кошками.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅! ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ шагов, Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ EB ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π₯Π΅Ρ€ΠΎΠΊΡƒ нСсколькими наТатиями клавиш. НадСюсь, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π”ΠΎΠΊΠ΅Ρ€ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ дСплоя Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π― ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ AWSΒ ΠΏΡ€ΠΎ single-container Docker environment Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ возмоТности Π² EB.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ, послСднСй части пособия, ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дальшС ΠΈ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ постоянноС бэкэнд-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

3.0 ΠœΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ окруТСния

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΈ просто Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с простого статичСского сайта, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустили Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ локально ΠΈΠ»ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ΅, нСсколькими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. ΠžΠ±Ρ‰Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎΒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ управлСния сСрвисами Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ соврСмСнныС прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ простыС. ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда Π΅ΡΡ‚ΡŒ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°). БистСмы Π²Ρ€ΠΎΠ΄Π΅ Redis ΠΈ Memcached стали практичСски ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся «Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся нСсколько Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… сСрвисов.

Π’ частности, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π”ΠΎΠΊΠ΅Ρ€-окруТСниями. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², спроситС Π²Ρ‹? Ну, ΠΎΠ΄Π½Π° ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдоставляСт ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ. ИдСя совмСщСния процСсса ΠΈ Π΅Π³ΠΎ зависимостСй Π² ΠΎΠ΄Π½ΠΎΠΉ пСсочницС (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ) ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом.

Аналогично Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ Π½Π° части, стоит ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Π Π°Π·Π½Ρ‹ΠΌ частям скорСС всСго Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ рСсурсы, ΠΈ трСбования ΠΌΠΎΠ³ΡƒΡ‚ расти с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Если ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ эти части ΠΈ помСстим Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий Ρ‚ΠΈΠΏ рСсурсов. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ совмСщаСтся с ΠΈΠ΄Π΅Π΅ΠΉ ΠΌΠΈΠΊΡ€ΠΎ сСрвисов. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π”ΠΎΠΊΠ΅Ρ€ (ΠΈ любая другая тСхнология ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ) находится на пСрСдовой соврСмСнных ΠΌΠΈΠΊΡ€ΠΎ сСрвисных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€.

3.1 SF Food Trucks

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅ΠΌ Π² Π”ΠΎΠΊΠ΅Ρ€, называСтся SF Food Trucks (ΠΊ соТалСнию, сСйчас ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.). Моя Ρ†Π΅Π»ΡŒ Π±Ρ‹Π»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ (ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° настоящСС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°), Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ сСрвис, Π½ΠΎ Π½Π΅ слишком слоТноС для этого пособия. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π».

Бэкэнд прилоТСния написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅ (Flask), Π° для поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡΒ Elasticsearch. Как ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² этом пособии, ΠΊΠΎΠ΄ находится Π½Π°Β Github. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ завСлись (надСюсь), Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ этот процСсс. Π’ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ бэкэнд Π½Π° Flask ΠΈ сСрвис Elasticsearch. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: ΠΎΠ΄ΠΈΠ½ для Flask, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для Elasticsearch (ES). Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ станСт популярным, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС, смотря Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ·ΠΊΠΎΠ΅ мСсто.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎ Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ Π½Π΅ слоТно, ΠΏΡ€Π°Π²Π΄Π°? ΠœΡ‹ ΡƒΠΆΠ΅ создавали Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. А для Elasticsearch… Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Ρ…Π°Π±Π΅:

$ docker search elasticsearch
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
elasticsearch                     Elasticsearch is a powerful open source se...   697       [OK]
itzg/elasticsearch                Provides an easily configurable Elasticsea...   17                   [OK]
tutum/elasticsearch               Elasticsearch image - listens in port 9200.     15                   [OK]
barnybug/elasticsearch            Latest Elasticsearch 1.7.2 and previous re...   15                   [OK]
digitalwonderland/elasticsearch   Latest Elasticsearch with Marvel & Kibana       12                   [OK]
monsantoco/elasticsearch          ElasticSearch Docker image                      9                    [OK]

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· для Elasticsearch. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ES, Π½ΡƒΠΆΠ½ΠΎ всСго лишь Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ docker run, ΠΈ вскорС Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ ES.

$ docker run -dp 9200:9200 elasticsearch
d582e031a005f41eea704cdc6b21e62e7a8a42021297ce7ce123b945ae3d3763

$ curl 0.0.0.0:9200
{
  "name" : "Ultra-Marine",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с Flask. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ΅Π½ Dockerfile. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ сСкции ΠΌΡ‹ использовали ΠΎΠ±Ρ€Π°Π·Β python:3-onbuild Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ. Однако, Π² этом Ρ€Π°Π·, ΠΊΡ€ΠΎΠΌΠ΅ установки зависимостСй Ρ‡Π΅Ρ€Π΅Π· pip, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Javascript-Ρ„Π°ΠΉΠ» для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°. Для этого понадобится Nodejs. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ свой Π±ΠΈΠ»Π΄ с нуля, поэтому Π½Π°Ρ‡Π½Π΅ΠΌ с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ubuntu.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли оказываСтся, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π· Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ спокойно создавайтС свой ΠΎΠ±Ρ€Π°Π· Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСм, для ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π° Docker Hub ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉΒ Dockerfile Π½Π° Github. ΠŸΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π”ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Ρ‹ β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… способов Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹.

Наш Dockerfile для Flask-прилоТСния выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# start from base
FROM ubuntu:14.04
MAINTAINER Prakhar Srivastav <[email protected]>

# install system-wide deps for python and node
RUN apt-get -yqq update
RUN apt-get -yqq install python-pip python-dev
RUN apt-get -yqq install nodejs npm
RUN ln -s /usr/bin/nodejs /usr/bin/node

# copy our application code
ADD flask-app /opt/flask-app
WORKDIR /opt/flask-app

# fetch app specific deps
RUN npm install
RUN npm run build
RUN pip install -r requirements.txt

# expose port
EXPOSE 5000

# start app
CMD [ "python", "./app.py" ]

Π’ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ всСго Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Ubuntu LTS, ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Β apt-get для установки зависимостСй, Π² частности β€” Python ΠΈ Node. Π€Π»Π°Π³Β yqq Π½ΡƒΠΆΠ΅Π½ для игнорирования Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ автоматичСского Π²Ρ‹Π±ΠΎΡ€Π° «Yes» Π²ΠΎ всСх мСстах. Π’Π°ΠΊΠΆΠ΅ создаСтся символичСская ссылка для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° node. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ ADD для копирования прилоТСния Π² Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ β€” /opt/flask-app. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вСсь наш ΠΊΠΎΠ΄. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСм эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² контСкстС этой Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° наши систСмныС зависимости установлСны, ΠΏΠΎΡ€Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости уровня прилоТСния. НачнСм с Node, установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· npm ΠΈ запуска ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сборки, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² нашСм Ρ„Π°ΠΉΠ»Π΅Β package.json. Π’ ΠΊΠΎΠ½Ρ†Π΅ устанавливаСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Python, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ€Ρ‚ ΠΈ опрСдСляСм запуск прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒ CMD, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ prakhar1989 Π½Π° свой username Π½ΠΈΠΆΠ΅).

$ docker build -t prakhar1989/foodtrucks-web .

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ubuntu, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ запуск docker build послС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ практичСски ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

$ docker run -P prakhar1989/foodtrucks-web
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Out of retries. Bailing out...

Упс! НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ смогло Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Elasticsearch. Как ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ? ΠžΡ‚Π²Π΅Ρ‚ β€” Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСкции.

3.2 Π‘Π΅Ρ‚ΠΈ Docker

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ возмоТности Π”ΠΎΠΊΠ΅Ρ€Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ описанной Π·Π°Π΄Π°Ρ‡ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΡƒΠΌΠ°ΡŽ, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ удобство Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ вскорС ΠΈΠ·ΡƒΡ‡ΠΈΠΌ.

Π›Π°Π΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим docker ps, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Ρƒ нас:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   2 seconds ago       Up 2 seconds        0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES ΠΏΠΎ адрСсу ΠΈ ΠΏΠΎΡ€Ρ‚ΡƒΒ 0.0.0.0:9200, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ. Если ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ этому адрСсу, Ρ‚ΠΎ ΠΎΠ½ΠΎ смоТСт ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с ES, Π²Π΅Ρ€Π½ΠΎ? Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ описано ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

es = Elasticsearch(host='es')

НуТно ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° хостС 0.0.0.0Β (ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ 9200), ΠΈ всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΄Π°? К соТалСнию, Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IP 0.0.0.0 это адрСс для доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ с  хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΌΠΎΠ΅Π³ΠΎ Мака. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ этому адрСсу. Π›Π°Π΄Π½ΠΎ, Ссли Π½Π΅ этот адрСс, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ адрСс Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ES? Π Π°Π΄, Ρ‡Ρ‚ΠΎ Π²Ρ‹ спросили.

Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСти Π² Π”ΠΎΠΊΠ΅Ρ€Π΅. ПослС установки, Π”ΠΎΠΊΠ΅Ρ€ автоматичСски создаСт Ρ‚Ρ€ΠΈ сСти:

$ docker network ls
NETWORK ID          NAME                DRIVER
075b9f628ccc        none                null
be0f7178486c        host                host
8022115322ec        bridge              bridge

Π‘Π΅Ρ‚ΡŒΒ bridgeΒ β€” это ΡΠ΅Ρ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² этой сСти bridge. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "8022115322ec80613421b0282e7ee158ec41e16f565a3e86fa53496105deb2d7",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "e931ab24dedc1640cddf6286d08f115a83897c88223058305460d7bd793c1947": {
                "EndpointID": "66965e83bf7171daeb8652b39590b1f8c23d066ded16522daeb0128c9c25c189",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β e931ab24dedc находится Π² сСкции Containers. Π’Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½ IP-адрСс, Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ этому ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ β€” 172.17.0.2. ИмСнно этот адрСс ΠΌΡ‹ ΠΈ искали? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ: запустим Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ IP:

$ docker run -it --rm prakhar1989/foodtrucks-web bash
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
bash: curl: command not found
root@35180ccc206a:/opt/flask-app# apt-get -yqq install curl
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
{
  "name" : "Jane Foster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@35180ccc206a:/opt/flask-app# exit

БСйчас всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ понятно. ΠœΡ‹ запустили ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ с процСссом bash. Π€Π»Π°Π³ --rm Π½ΡƒΠΆΠ΅Π½ для удобства, благодаря Π½Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски удаляСтся послС Π²Ρ‹Ρ…ΠΎΠ΄Π°. ΠœΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ curl, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ адрСсу 172.17.0.2:9200 Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ES! Π‘ΡƒΠΏΠ΅Ρ€!

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ нашли способ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, сущСствуСт нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с этим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ:

  1. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ записи Π² Ρ„Π°ΠΉΠ»Β /etc/hostsΒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΎ, Ρ‡Ρ‚ΠΎ имя хоста esΒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚Β 172.17.0.2. Если IP-адрСс мСняСтся, Ρ‚ΠΎ придСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ΅Π½ΡΡ‚ΡŒ запись.
  2. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Ρ‚ΡŒΒ bridge ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄Β Π½Π΅ бСзопасСн.

Но Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΠΎΠΊΠ΅Ρ€ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сСти. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ /etc/hosts, сСйчас ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим свою ΡΠ΅Ρ‚ΡŒ:

$ docker network create foodtrucks
1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89

$ docker network ls
NETWORK ID          NAME                DRIVER
1a3386375797        foodtrucks          bridge
8022115322ec        bridge              bridge
075b9f628ccc        none                null
be0f7178486c        host                host

Команда network create создаСт Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚ΡŒΒ bridge. Нам сСйчас Π½ΡƒΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ сСтСй, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… Π²Β ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ наши ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° --net. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΈ сдСлаСм, Π½ΠΎ сначала остановим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ElasticSearch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² сСти bridge ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   4 hours ago         Up 4 hours          0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

$ docker stop e931ab24dedc
e931ab24dedc

$ docker run -dp 9200:9200 --net foodtrucks --name es elasticsearch
2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651

$ docker network inspect foodtrucks
[
    {
        "Name": "foodtrucks",
        "Id": "1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651": {
                "EndpointID": "15eabc7989ef78952fb577d0013243dae5199e8f5c55f1661606077d5b78e72a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

ΠœΡ‹ сдСлали Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π΄Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ es. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° запуск происходит Π² сСти.

$ docker run -it --rm --net foodtrucks prakhar1989/foodtrucks-web bash
root@53af252b771a:/opt/flask-app# cat /etc/hosts
172.18.0.3  53af252b771a
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  es
172.18.0.2  es.foodtrucks

root@53af252b771a:/opt/flask-app# curl es:9200
bash: curl: command not found
root@53af252b771a:/opt/flask-app# apt-get -yqq install curl
root@53af252b771a:/opt/flask-app# curl es:9200
{
  "name" : "Doctor Leery",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@53af252b771a:/opt/flask-app# ls
app.py  node_modules  package.json  requirements.txt  static  templates  webpack.config.js
root@53af252b771a:/opt/flask-app# python app.py
Index not found...
Loading data in elasticsearch ...
Total trucks loaded:  733
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
root@53af252b771a:/opt/flask-app# exit

Π£Ρ€Π°! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π”ΠΎΠΊΠ΅Ρ€ внСс Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ Π² Ρ„Π°ΠΉΠ» /etc/hosts, ΠΈ поэтому es:9200 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ β€” этот адрСс ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ направляСт запросы Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запустим Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎ-настоящСму:

$ docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web
2a1b77e066e646686f669bab4759ec1611db359362a031667cacbe45c3ddb413

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                              NAMES
2a1b77e066e6        prakhar1989/foodtrucks-web   "python ./app.py"        2 seconds ago       Up 1 seconds        0.0.0.0:5000->5000/tcp             foodtrucks-web
2c0b96f9b803        elasticsearch                "/docker-entrypoint.s"   21 minutes ago      Up 21 minutes       0.0.0.0:9200->9200/tcp, 9300/tcp   es

$ curl -I 0.0.0.0:5000
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 3697
Server: Werkzeug/0.11.2 Python/2.7.6
Date: Sun, 10 Jan 2016 23:58:53 GMT

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://0.0.0.0:5000, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ всСго 4 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‡Ρ‚ΠΎΠ±Ρ‹ с нуля Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния. Π― собрал эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² bash-скрипт.

#!/bin/bash

# build the flask container
docker build -t prakhar1989/foodtrucks-web .

# create the network
docker network create foodtrucks

# start the ES container
docker run -d --net foodtrucks -p 9200:9200 -p 9300:9300 --name es elasticsearch

# start the flask app container
docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Или Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° сСрвСрС, Π³Π΄Π΅ установлСн Π”ΠΎΠΊΠ΅Ρ€. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всю систСму с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹!

$ git clone https://github.com/prakhar1989/FoodTrucks
$ cd FoodTrucks
$ ./setup-docker.sh

Π’ΠΎΡ‚ ΠΈ всС! По-ΠΌΠΎΠ΅ΠΌΡƒ, это нСвСроятно ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния!

Docker Links

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π», стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΒ docker network это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ новая Ρ„ΠΈΡ‡Π°, ΠΎΠ½Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅Π»ΠΈΠ· Docker 1.9Β .

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ появился network, ссылки Π±Ρ‹Π»ΠΈ допустимым способом настройки взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ соотвСтствии с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, linking вскорС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² статус deprecated. Если Π²Π°ΠΌ попадСтся Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ link для соСдинСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ просто Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого network (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° links являСтся legacy, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.)

3.3 Docker Compose

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°. Но Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… это:

  1. Docker Machine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-хосты Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°.
  2. Docker ComposeΒ β€” инструмСнт для опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  3. Docker Swarm β€” Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для кластСризации.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этих инструмСнтов β€” Docker Compose, ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Π£ Docker Compose довольно интСрСсная прСдыстория. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ компания OrchardUp запустила инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Fig. ИдСя Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ окруТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ восприняли Π½Π° Hacker NewsΒ — я смутно помню, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π» ΠΎ Π½Π΅ΠΌ, Π½ΠΎ Π½Π΅ особо понял Π΅Π³ΠΎ смысла.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉΒ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Fig ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚:

На самом Π΄Π΅Π»Π΅, смысл Π”ΠΎΠΊΠ΅Ρ€Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСссы. БСгодня Ρƒ Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠ΅ API для запуска процСссов: Ρ€Π°ΡΡˆΠ°Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (ΠΈΠ½Ρ‹ΠΌΠΈ словами, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ) Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (shared volumes), ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚ΠΎΠ² с хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΎΠ³ΠΎΠ², ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Но большС Π½ΠΈΡ‡Π΅Π³ΠΎ: Π”ΠΎΠΊΠ΅Ρ€ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСссов.

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ содСрТатся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности оркСстрации Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для создания Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ «ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ», Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΎ Π±Ρ‹ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. И Π²ΠΎΡ‚ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ инструмСнт Π²Ρ€ΠΎΠ΄Π΅ Fig: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ с Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ «Π·Π°ΠΏΡƒΡΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ» (ΠΈΠ½Ρ‹ΠΌΠΈ словами, «Π·Π°ΠΏΡƒΡΠΊΠ΅ оркСстрированного кластСра ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²») вмСсто «Π·Π°ΠΏΡƒΡΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²».

Оказалось, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π”ΠΎΠΊΠ΅Ρ€Π° согласны с Ρ‚Π°ΠΊΠΈΠΌΠΈ мыслями. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ, Fig Π½Π°Π±Ρ€Π°Π» ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, Docker Inc. Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, ΠΊΡƒΠΏΠΈΠ»ΠΈ компанию ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Docker Compose.

Π˜Ρ‚Π°ΠΊ, Π·Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Compose? Π­Ρ‚ΠΎ инструмСнт для простого опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» docker-compose.yml, ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ сСрвисов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, смоТСм Π»ΠΈ ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Β docker-compose.yml для нашСго прилоТСния SF-Foodtrucks ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, способСн Π»ΠΈ ΠΎΠ½ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚.

Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose. Π•ΡΡ‚ΡŒ Ρƒ вас Windows ΠΈΠ»ΠΈ Mac, Ρ‚ΠΎ Docker Compose ΡƒΠΆΠ΅ установлСн β€” ΠΎΠ½ ΠΈΠ΄Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Docker Toolbox. На Linux ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose слСдуя простым инструкциям Π½Π° сайтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Compose написан Π½Π° Python, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просто pip install docker-compose. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker-compose version
docker-compose version 1.7.1, build 0a9ab35
docker-py version: 1.8.1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ созданию Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml. Бинтаксис yml-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ простой, ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

version: "2"
services:
  es:
    image: elasticsearch
  web:
    image: prakhar1989/foodtrucks-web
    command: python app.py
    ports:
      - "5000:5000"
    volumes:
      - .:/code

      

Π”Π°Π²Π°ΠΉΡ‚Π΅ я Ρ€Π°Π·Π±Π΅Ρ€Ρƒ это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. На Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нСймспСйса для Π½Π°ΡˆΠΈΡ… сСрвисов: esΒ ΠΈΒ web. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСрвису ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… image β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Для es ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ доступный Π½Π° Docker Hub ΠΎΠ±Ρ€Π°Π· elasticsearch. Для Flask-прилоТСния β€” Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ command ΠΈ portsΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. volumes ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ монтирования, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ web. Π­Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΠΎΠ³Π°ΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: НуТно Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с файлом docker-compose.yml Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Compose.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π€Π°ΠΉΠ» Π³ΠΎΡ‚ΠΎΠ², Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π°Β docker-composeΒ Π² дСйствии. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚Ρ‹ свободны. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Flask ΠΈ ES, Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΈΡ… ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ:

$ docker stop $(docker ps -q)
39a2f5df14ef
2a1b77e066e6

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker-compose. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Foodtrucks ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker-compose up.

$ docker-compose up
Creating network "foodtrucks_default" with the default driver
Creating foodtrucks_es_1
Creating foodtrucks_web_1
Attaching to foodtrucks_es_1, foodtrucks_web_1
es_1  | [2016-01-11 03:43:50,300][INFO ][node                     ] [Comet] version[2.1.1], pid[1], build[40e2c53/2015-12-15T13:05:55Z]
es_1  | [2016-01-11 03:43:50,307][INFO ][node                     ] [Comet] initializing ...
es_1  | [2016-01-11 03:43:50,366][INFO ][plugins                  ] [Comet] loaded [], sites []
es_1  | [2016-01-11 03:43:50,421][INFO ][env                      ] [Comet] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [16gb], net total_space [18.1gb], spins? [possibly], types [ext4]
es_1  | [2016-01-11 03:43:52,626][INFO ][node                     ] [Comet] initialized
es_1  | [2016-01-11 03:43:52,632][INFO ][node                     ] [Comet] starting ...
es_1  | [2016-01-11 03:43:52,703][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:52,704][INFO ][transport                ] [Comet] publish_address {172.17.0.2:9300}, bound_addresses {[::]:9300}
es_1  | [2016-01-11 03:43:52,721][INFO ][discovery                ] [Comet] elasticsearch/cEk4s7pdQ-evRc9MqS2wqw
es_1  | [2016-01-11 03:43:55,785][INFO ][cluster.service          ] [Comet] new_master {Comet}{cEk4s7pdQ-evRc9MqS2wqw}{172.17.0.2}{172.17.0.2:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
es_1  | [2016-01-11 03:43:55,818][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:55,819][INFO ][http                     ] [Comet] publish_address {172.17.0.2:9200}, bound_addresses {[::]:9200}
es_1  | [2016-01-11 03:43:55,819][INFO ][node                     ] [Comet] started
es_1  | [2016-01-11 03:43:55,826][INFO ][gateway                  ] [Comet] recovered [0] indices into cluster_state
es_1  | [2016-01-11 03:44:01,825][INFO ][cluster.metadata         ] [Comet] [sfdata] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [truck]
es_1  | [2016-01-11 03:44:02,373][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,510][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,593][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,708][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:03,047][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ IP Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΡ€ΡƒΡ‚ΠΎ, Π΄Π°? ВсСго лишь ΠΏΠ°Ρ€Π° строк ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ нСсколько Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² унисон. Π”Π°Π²Π°ΠΉΡ‚Π΅ остановим сСрвисы ΠΈ пСрСзапустим Π² detached mode:

web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Killing foodtrucks_web_1 ... done
Killing foodtrucks_es_1 ... done

$ docker-compose up -d
Starting foodtrucks_es_1
Starting foodtrucks_web_1

$ docker-compose ps
      Name                    Command               State           Ports
----------------------------------------------------------------------------------
foodtrucks_es_1    /docker-entrypoint.sh elas ...   Up      9200/tcp, 9300/tcp
foodtrucks_web_1   python app.py                    Up      0.0.0.0:5000->5000/tcp

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹. ΠžΡ‚ΠΊΡƒΠ΄Π° бСрутся ΠΈΠΌΠ΅Π½Π°? Π˜Ρ… Compose ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» сам. Но Ρ‡Ρ‚ΠΎ насчСт сСти? Π•Π³ΠΎ Compose Ρ‚ΠΎΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ сам? Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ вопрос, Π΄Π°Π²Π°ΠΉΡ‚Π΅ выясним.

Для Π½Π°Ρ‡Π°Π»Π°, остановим Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ сСрвисы. Π˜Ρ… всСгда ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ docker-compose stop
Stopping foodtrucks_web_1 ... done
Stopping foodtrucks_es_1 ... done

Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ ΡΠ΅Ρ‚ΡŒΒ foodtrucks, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ создали Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·. Π­Ρ‚Π° ΡΠ΅Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ потрСбуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Compose автоматичСски сдСлаСт всС Π·Π° нас.

$ docker network rm foodtrucks
$ docker network ls
NETWORK ID          NAME                DRIVER
4eec273c054e        bridge              bridge
9347ae8783bd        none                null
54df57d7f493        host                host

Класс! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² этом чистом состоянии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, способСн Π»ΠΈΒ Compose Π½Π° Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ.

$ docker-compose up -d
Recreating foodtrucks_es_1
Recreating foodtrucks_web_1
$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
f50bb33a3242        prakhar1989/foodtrucks-web   "python app.py"          14 seconds ago      Up 13 seconds       0.0.0.0:5000->5000/tcp   foodtrucks_web_1
e299ceeb4caa        elasticsearch                "/docker-entrypoint.s"   14 seconds ago      Up 14 seconds       9200/tcp, 9300/tcp       foodtrucks_es_1

Пока всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, создались Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сСти:

$ docker network ls
NETWORK ID          NAME                 DRIVER
0c8b474a9241        bridge               bridge              
293a141faac3        foodtrucks_default   bridge              
b44db703cd69        host                 host                
0474c9517805        none                 null  

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Compose ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ создал ΡΠ΅Ρ‚ΡŒΒ foodtrucks_defaultΒ ΠΈ подсоСдинил ΠΎΠ±Π° сСрвиса Π² эту ΡΠ΅Ρ‚ΡŒ, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для сСрвиса ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ сСти, ΠΈ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° доступны Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ Π² сСти. Они доступны ΠΏΠΎ hostname, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, находится Π»ΠΈ эта информация Π² /etc/hosts.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
bb72dcebd379        prakhar1989/foodtrucks-web   "python app.py"          20 hours ago        Up 19 hours         0.0.0.0:5000->5000/tcp   foodtrucks_web_1
3338fc79be4b        elasticsearch                "/docker-entrypoint.s"   20 hours ago        Up 19 hours         9200/tcp, 9300/tcp       foodtrucks_es_1

$ docker exec -it bb72dcebd379 bash
root@bb72dcebd379:/opt/flask-app# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  bb72dcebd379

Упс! ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ„Π°ΠΉΠ» понятия Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎ es. Как ΠΆΠ΅ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΠΈΠ½Π³ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ названию хоста:

root@bb72dcebd379:/opt/flask-app# ping es
PING es (172.18.0.3) 56(84) bytes of data.
64 bytes from foodtrucks_es_1.C
--- es ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.049/0.056/0.064/0.010 ms

Вуаля! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! Каким-Ρ‚ΠΎ магичСским ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ хоста es. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Docker 1.10 Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ систСму, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ сСрвисов Ρ‡Π΅Ρ€Π΅Π· DNS-сСрвСр. Если интСрСсно, Ρ‚ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ release notes.

На этом наш Ρ‚ΡƒΡ€ ΠΏΠΎ Docker Compose Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. Π‘ этим инструмСнтом ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрвисы Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Docker Compose.

НадСюсь, я продСмонстрировал ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ просто ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ срСдой с Compose. Π’ послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ всС Π½Π° AWS!

3.4 AWS Elastic Container Service

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали docker-composeΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:Β docker-compose up. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΈΡ€Ρƒ, Π·Π°ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡŽΠ·Π΅Ρ€ΠΎΠ², ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π΄Π΅Π½Π΅Π³ ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ большой Π΄ΠΎΠΌ Π² Майами. ПослСдниС Ρ‚Ρ€ΠΈ шага выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ этого пособия, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ займСмся выяснСниСм Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ³ΠΎ прилоТСния Π² ΠΎΠ±Π»Π°ΠΊΠΎ AWS.

Если Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ этого мСста, Ρ‚ΠΎ скорСС всСго ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Docker β€” довольно крутая тСхнология. И Π²Ρ‹ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ. ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост популярности Π”ΠΎΠΊΠ΅Ρ€Π° ΠΈ стали Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² свои сСрвисы. БСгодня, Π”ΠΎΠΊΠ΅Ρ€-прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS,Β Azure,Rackspace,Β DigitalOceanΒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…. ΠœΡ‹ ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π½Π° Elastic Beanstalk, Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ AWS Elastic Container Service (ΠΈΠ»ΠΈ ECS).

AWS ECS β€” это ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ сСрвис ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ кластСром Π½Π° EC2 Ρ‡Π΅Ρ€Π΅Π· простой API. Π’ Beanstalk Π±Ρ‹Π»ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ECS позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ аспСкт окруТСния ΠΏΠΎ вашим потрСбностям. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ECS β€” Π½Π΅ самый простой инструмСнт Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ ECS Π΅ΡΡ‚ΡŒ удобный инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (CLI) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Docker Compose ΠΈ автоматичСской ΠΏΡ€ΠΎΠ²ΠΈΠ·ΠΈΠ΅ΠΉ Π½Π° ECS! Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ„Π°ΠΉΠ»Β docker-compose.yml, настройка ΠΈ запуск Π½Π° AWS Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно Π»Π΅Π³ΠΊΠΎΠΉ. НачнСм!

Π’Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ CLI. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π΅ доступна Π½Π° Windows. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ установкС CLI Π½Π° Mac ΠΈ Linux Ρ…ΠΎΡ€ΠΎΡˆΠΎ описаны Π½Π° сайтС с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. УстановитС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ ecs-cli --version
ecs-cli version 0.1.0 (*cbdc2d5)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг β€” Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° инстансах. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EC2 ConsoleΒ ΠΈ создайтС Π½ΠΎΠ²Ρ‹ΠΉ keypair. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈ Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² бСзопасном мСстС. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” имя Ρ€Π΅Π³ΠΈΠΎΠ½Π°. Π― Π½Π°Π·Π²Π°Π» свой ΠΊΠ»ΡŽΡ‡Β ecs ΠΈ ΡƒΠΊΠ°Π·Π°Π» Ρ€Π΅Π³ΠΈΠΎΠ½ us-east-1. Π― ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ повСствованиС с этим Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ настройтС CLI:

$ ecs-cli configure --region us-east-1 --cluster foodtrucks
INFO[0000] Saved ECS CLI configuration for cluster (foodtrucks)

Команда configure с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наш кластСр, ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ кластСра. НуТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€Ρ€ΠΈ создании ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если Ρƒ вас Π½Π΅ настроСн AWS CLI, то слСдуйтС руководству, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описываСт всС шаги.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг позволяСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ шаблон CloudFormation.

$ ecs-cli up --keypair ecs --capability-iam --size 2 --instance-type t2.micro
INFO[0000] Created cluster                               cluster=foodtrucks
INFO[0001] Waiting for your cluster resources to be created
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0122] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0182] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0242] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ названия ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ скачали (Π² ΠΌΠΎΠ΅ΠΌ случаС ecs), количСство инстансов (--size) ΠΈ Ρ‚ΠΈΠΏ инстансов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π€Π»Π°Π³ --capability-iamΒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ рСсурсы IAM.

Π’ послСднСм шагС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» docker-compose.yml. ВрСбуСтся нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ вмСсто ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм копию ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ aws-compose.yml. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ этого Ρ„Π°ΠΉΠ»Π°Β (послС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ):

es:
  image: elasticsearch
  cpu_shares: 100
  mem_limit: 262144000
web:
  image: prakhar1989/foodtrucks-web
  cpu_shares: 100
  mem_limit: 262144000
  ports:
    - "80:5000"
  links:
    - es

    

ЕдинствСнныС отличия ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β mem_limit ΠΈ cpu_shares для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΡƒΠ±Ρ€Π°Π»ΠΈ versionΒ ΠΈ services, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ AWS Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 2 Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Compose. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° инстансах Ρ‚ΠΈΠΏΠ° t2.micro, ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ 250 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ памяти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия, ecs-cliΒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ build. Но Docker Compose ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

$ docker push prakhar1989/foodtrucks-web

ΠšΡ€Π°ΡΠΎΡ‚Π°! Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° ECS!

$ ecs-cli compose --file aws-compose.yml up
INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-foodtrucks:2
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0036] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ Docker Compose β€” Π½Π΅ совпадСниС. АргумСнт --file ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСопрСдСлСния Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (docker-compose.yml). Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ строку desiredStatus=RUNNING lastStatus=RUNNING Π² самом ΠΊΠΎΠ½Ρ†Π΅.

ΠšΡ€ΡƒΡ‚ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ. Как ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ?

ecs-cli ps
Name                                      State    Ports                     TaskDefinition
845e2368-170d-44a7-bf9f-84c7fcd9ae29/web  RUNNING  54.86.14.14:80->5000/tcp  ecscompose-foodtrucks:2
845e2368-170d-44a7-bf9f-84c7fcd9ae29/es   RUNNING                            ecscompose-foodtrucks:2

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://54.86.14.14Β Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Food Trucks Π²ΠΎ всСй своСй ΠΆΠ΅Π»Ρ‚ΠΎ-Ρ‡Π΅Ρ€Π½ΠΎΠΉ красС! Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° консоль AWS ECS.

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» создан ECS-кластСр ‘foodtrucks’, ΠΈ Π² Π½Π΅ΠΌ выполняСтся ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° с двумя инстансами. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΠΎΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒΡΡ Π² этой консоли ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΅Π΅ части ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ ΠΈ всС. ВсСго нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ β€” ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° AWS!

4.0 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. ПослС Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ, Π½ΠΎ интСрСсного пособия Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²! Если Π²Ρ‹ слСдовали пособию Π΄ΠΎ самого ΠΊΠΎΠ½Ρ†Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ заслуТСнно Π³ΠΎΡ€Π΄ΠΈΡ‚ΡŒΡΡ собой. Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ статичСскиС ΠΈ динамичСскиС Π²Π΅Π±-сайты ΠΈ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠΏΡ‹Ρ‚ дСплоя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠΎ.

НадСюсь, ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ этого руководства ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Π΅Π΅ Π² своих способностях ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с сСрвСрами. Когда Ρƒ вас появится новая идСя для сайта ΠΈΠ»ΠΈ прилоТСния, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ смоТСтС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ людям с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями.

4.1 Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

Π’Π°ΡˆΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Π² ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ. МоСй Ρ†Π΅Π»ΡŒΡŽ Π² этом руководствС Π±Ρ‹Π»ΠΎ Π½Π°Π³ΡƒΠ»ΡΡ‚ΡŒ ваш Π°ΠΏΠΏΠ΅Ρ‚ΠΈΡ‚ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΡ‰ΡŒ Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΌΠΈΡ€Π΅ соврСмСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ руководства Π²Ρ€ΠΎΠ΄Π΅ этого ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Π²Π°ΠΌ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пособиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ знакомился с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ сам. НадСюсь, Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ вас, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° прогрСссом Π² этом области Π½Π΅ со стороны, Π° с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π·Π½Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

НиТС β€” список Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… рСсурсов. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ Π² вашСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ β€” ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Ρƒ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

Π£Π΄Π°Ρ‡ΠΈ, ΡŽΠ½Ρ‹ΠΉ ΠΏΠ°Π΄Π°Π²Π°Π½!

4.2 Π€ΠΈΠ΄Π±Π΅ΠΊ Π°Π²Ρ‚ΠΎΡ€Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ моя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы. Π’Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ пособиС? Оно показалось Π²Π°ΠΌ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ?

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ (Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° [email protected]Β ΠΈΠ»ΠΈ просто создайтС issue. Π― Π΅ΡΡ‚ΡŒ Π²Β Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π°.

(Автор ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎ-английски, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ваши ΠΎΡ‚Π·Ρ‹Π²Ρ‹. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΌΠΎΠΈ ошибки. Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это пособиС стало ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… стартовых руководств Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π£ мСня Π½Π΅ получится это Π±Π΅Π· вашСй ΠΏΠΎΠΌΠΎΡ‰ΠΈ.

с нуля Π΄ΠΎ кластСра Π½Π° AWS / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€?

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ:

ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ развёртывания ΠΈ управлСния прилоТСниями Π² срСдС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы; позволяСт Β«ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒΒ» ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСм Π΅Π³ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ зависимостями Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт срСду ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Ого! Как ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами, Π”ΠΎΠΊΠ΅Ρ€ это инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ, систСмными администраторам ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ спСциалистам Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΈΡ… прилоТСния Π² пСсочницС (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ), для запуска Π½Π° Ρ†Π΅Π»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Linux. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ прСимущСство Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ со всСми Π΅Π³ΠΎ зависимостями Π² стандартизированный ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… машин, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, поэтому с Π½ΠΈΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ систСму ΠΈ рСсурсы Π±ΠΎΠ»Π΅Π΅ эффСктивно.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Π² индустрии Π½Π° сСгодняшний дСнь β€” это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ для запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ гостСвой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы сСрвСра.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для ΠΏΠΎΠ»Π½ΠΎΠΉ изоляции процСсса для прилоТСния: ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° софт гостСвой ОБ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚. Но Π·Π° Ρ‚Π°ΠΊΡƒΡŽ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. БущСствуСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, нСобходимая для Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΆΠ΅Π»Π΅Π·Π° гостСвой ОБ.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ схоТий с Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ машинами ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции, Π½ΠΎ благодаря ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌΡƒ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π΄Π΅Π»Π°ΡŽΡ‚ это с Π² Ρ€Π°Π·Ρ‹ мСньшСй Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…?

Π’Π·Π»Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±Ρ‹Π» ΠΏΠΎ-настоящСму эпичным. НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ сами ΠΏΠΎ сСбС β€” Π½Π΅ новая тСхнология, Π΄ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΎΠ½ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ‚Π°ΠΊ распространСны ΠΈ популярны. Π”ΠΎΠΊΠ΅Ρ€ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, прСдоставив стандартный API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сильно упростил созданиС ΠΈ использованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» сообщСству вмСстС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΉ Π² Β The RegisterΒ Π² сСрСдинС 2014 говорится, Ρ‡Ρ‚ΠΎ Π“ΡƒΠ³Π» ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ большС Π΄Π²ΡƒΡ… ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π² нСдСлю.

Google Trends для слова ‘Docker’

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ росту Π”ΠΎΠΊΠ΅Ρ€Π°, компания-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Docker Inc. Π±Ρ‹Π»Π° ΠΎΡ†Π΅Π½Π΅Π½Π° Π² Π΄Π²Π° с лишним ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄Π° Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ²! Благодаря прСимущСствам Π² эффСктивности ΠΈ портативности, Π”ΠΎΠΊΠ΅Ρ€ Π½Π°Ρ‡Π°Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС большС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ, ΠΈ сСйчас стоит Π²ΠΎ Π³Π»Π°Π²Π΅ двиТСния ΠΏΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ (containerization). Как соврСмСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ этот Ρ‚Ρ€Π΅Π½Π΄ ΠΈ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ.

Π§Π΅ΠΌΡƒ мСня Π½Π°ΡƒΡ‡ΠΈΡ‚ это пособиС?

Π­Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ пособиС ΠΏΠΎ всСм аспСктам Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ Ρ€Π°Π·ΡŠΡΡΠ½Π΅Π½ΠΈΡ ΠΌΠΈΡ„ΠΎΠ² ΠΎ Π”ΠΎΠΊΠ΅Ρ€Π΅ ΠΈ Π΅Π³ΠΎ экосистСмС, ΠΎΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ нСбольшой ΠΎΠΏΡ‹Ρ‚ ΠΏΠΎ сборкС ΠΈ дСплою собствСнных Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠ΅. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Amazon Web Services для дСплоя статичных сайтов, ΠΈ Π΄Π²Π° динамичСских Π²Π΅Π±-прилоТСния Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π½Π° EC2 с использованиСм Elastic Beanstalk ΠΈ Elastic Container Service. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ, это пособиС даст Π²Π°ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅.

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

Π­Ρ‚ΠΎΡ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ содСрТит нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… посвящСн ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ аспСкту Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ доступСн Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° Π“ΠΈΡ‚Ρ…Π°Π±Π΅.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π’ этом пособии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия Π”ΠΎΠΊΠ΅Ρ€Π° 1.12.0-rc2. Если Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, поТалуйста, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅Β issue. Бпасибо!

ΠŸΡ€Π΅-Ρ€Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹

ВсС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для прохоТдСния этого пособия β€” это Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкой ΠΈ тСкстовым Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ. ΠžΠΏΡ‹Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π½ΠΎ Π½Π΅ обязатСлСн. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΡ‹ столкнСмся с нСсколькими ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΌΠΈ сСрвисами. Π’Π°ΠΌ понадобится ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° этих сайтах:

Настройка ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

Установка ΠΈ настройка всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструмСнтов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ тяТСлой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Π½ΠΎ, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π”ΠΎΠΊΠ΅Ρ€ стал довольно ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ, ΠΈ установка ΠΈ запуск Π΅Π³ΠΎ Π½Π° любой ОБ стало ΠΎΡ‡Π΅Π½ΡŒ простой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π˜Ρ‚Π°ΠΊ, установим Π”ΠΎΠΊΠ΅Ρ€.

Π”ΠΎΠΊΠ΅Ρ€

Π•Ρ‰Π΅ нСсколько Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² Π½Π°Π·Π°Π΄ запуск Π”ΠΎΠΊΠ΅Ρ€Π° Π½Π° OS X ΠΈ Windows Π±Ρ‹Π» Π±Ρ‹Π» ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΌ. Но ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π»Π° ΠΎΠ³Ρ€ΠΎΠΌΠ½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ, ΠΈ сСгодня вСсь процСсс β€” ΠΏΡ€ΠΎΡ‰Π΅ Π½Π΅ΠΊΡƒΠ΄Π°. Π­Ρ‚ΠΎΡ‚ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» getting startedΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ инструкции ΠΏΠΎ установкС на Мак,Β Linux ΠΈ Windows.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, всС Π»ΠΈ установлСно ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ:

$ docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Python

Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдустановлСн Π½Π° OS X ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ дистрибутивов Linux. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠŸΠΈΡ‚ΠΎΠ½, Ρ‚ΠΎ скачайтС установщик здСсь.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ:

$ python --version
Python 2.7.11

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ pip для установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² для нашСго прилоТСния. Если pip Π½Π΅ установлСн, Ρ‚ΠΎ скачайтС Π²Π΅Ρ€ΡΠΈΡŽ для своСй систСмы.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ запуститС Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ pip --version
pip 7.1.2 from /Library/Python/2.7/site-packages/pip-7.1.2-py2.7.egg (python 2.7)

Java (Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ)

Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Elasticsearch для хранСния ΠΈ поиска. Для локального запуска Elasticsearch Π²Π°ΠΌ понадобится Java. Π’ этом пособии всС Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ локально Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Java. Если Java установлСна, Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β java -versionΒ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄:

$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)


1.0 Π˜Π³Ρ€Π°Π΅ΠΌ с Busybox

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ установлСно, ΠΏΠΎΡ€Π° Π²Π·ΡΡ‚ΡŒΡΡ Π·Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Busybox Π½Π° нашСй систСмС ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΒ docker run.

Для Π½Π°Ρ‡Π°Π»Π°, запуститС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ docker pull busybox

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ устанавливали Π”ΠΎΠΊΠ΅Ρ€ Π½Π° свою систСму, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ появлСниС сообщСния permission denied. Если Π²Ρ‹ Π½Π° МакС, Ρ‚ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΈΠΆΠΎΠΊ Π”ΠΎΠΊΠ΅Ρ€ Π·Π°ΠΏΡƒΡ‰Π΅Π½. Если Π²Ρ‹ Π½Π° ЛинуксС, Ρ‚ΠΎ запуститС эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ с sudo. Или ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ dockerΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Команда pull скачиваСт ΠΎΠ±Ρ€Π°Π· busyboxΒ ΠΈΠ· рСгистра Π”ΠΎΠΊΠ΅Ρ€Π°Β ΠΈ сохраняСт Π΅Π³ΠΎ локально. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker images, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² систСмС.

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
busybox                 latest              c51f86c28340        4 weeks ago         1.109 MB

1.1 Docker Run

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с этим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²ΠΎΠ»ΡˆΠ΅Π±Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker run:

$ docker run busybox
$

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ! Π­Ρ‚ΠΎ Π±Π°Π³? Ну, Π½Π΅Ρ‚. Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ всСго. Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нашСл ΠΎΠ±Ρ€Π°Π· (Π² нашСм случаС, busybox), Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠœΡ‹ сдСлали docker run busybox, Π½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ загрузился, Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ пустая ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ. Ну, Π΄Π°, ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ поинтСрСснСС.

$ docker run busybox echo "hello from busybox"
hello from busybox

Π£Ρ€Π°, Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄. Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° ΠΏΠΎΡΠ»ΡƒΡˆΠ½ΠΎ запустил ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ echo Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²Ρ‹ΡˆΠ΅Π» ΠΈΠ· Π½Π΅Π³ΠΎ. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ всС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ быстро. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, ΠΊΠ°ΠΊ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² Π½Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ясно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ говорят, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ быстрыС!

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker ps. Она Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран список всСх Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² сСйчас Π½Π΅Ρ‚, поэтому выводится пустая строка. НС ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚:Β docker ps -a

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
305297d7a235        busybox             "uptime"            11 minutes ago      Exited (0) 11 minutes ago                       distracted_goldstine
ff0a5c3750b9        busybox             "sh"                12 minutes ago      Exited (0) 12 minutes ago                       elated_ramanujan

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π΅Π½ список всСх ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ запускали. Π’ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ STATUS ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ нСсколько ΠΌΠΈΠ½ΡƒΡ‚ Π½Π°Π·Π°Π΄.

Π’Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ большС ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ:

$ docker run -it busybox sh
/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # uptime
 05:45:21 up  5:58,  0 users,  load average: 0.00, 0.01, 0.04

 

Команда run с Ρ„Π»Π°Π³ΠΎΠΌ -it ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ tty Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π½ΡƒΡ‚Ρ€ΠΈ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅.

Опасно!: Если хочСтся острых ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒΒ rm -rf binΒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Но ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ запускаСтС Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Π½Π΅ снаруТи. Если сдСлаСтС это снаруТи, Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠ»ΠΎΡ…ΠΎ, ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Ρ€ΠΎΠ΄Π΅Β ls,Β echo пСрСстанут Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Когда Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° всС пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, просто Π²Ρ‹ΠΉΠ΄Π΅Ρ‚Π΅ ΠΈ запуститС Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run -it busybox sh. Π”ΠΎΠΊΠ΅Ρ€ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΈ запускС, поэтому всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ снова.

На этом Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΡƒΡ€ ΠΏΠΎ возмоТностям ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker run Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½. Π‘ΠΊΠΎΡ€Π΅Π΅ всСго, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ довольно часто. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ поняли ΠΊΠ°ΠΊ с Π½Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΒ run, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ docker run --help, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ список ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π»Π°Π³ΠΎΠ². Π‘ΠΊΠΎΡ€ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π΅Ρ‰Π΅ нСсколько способов использования docker run.

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅ рассмотрим ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker ps -a всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ остатки Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². На протяТСнии этого пособия, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker run нСсколько Ρ€Π°Π·, ΠΈ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ, Π±Π΅Π·Π΄ΠΎΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡΡŠΠ΅Π΄Π°Ρ‚ΡŒ дисковоС пространство. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ я взял Π·Π° ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°Β docker rm. ΠŸΡ€ΠΎΡΡ‚ΠΎ скопируйтС ID (ΠΌΠΎΠΆΠ½ΠΎ нСсколько) ΠΈΠ· Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΡˆΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.

$ docker rm 305297d7a235 ff0a5c3750b9
305297d7a235
ff0a5c3750b9

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ снова Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ Π½Π° экран. Если Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ вмСсто Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ копирования ΠΈ вставлСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker rm $(docker ps -a -q -f status=exited)

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° удаляСт всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… статус exited. Π€Π»Π°Π³Β -q Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ числСнныС ID, Π° Ρ„Π»Π°Π³Β -fΒ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° основС прСдоставлСнных условий. ПослСдняя полСзная Π΄Π΅Ρ‚Π°Π»ΡŒ β€” ΠΊΠΎΠΌΠ°Π½Π΄Π΅Β docker run ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ„Π»Π°Π³ --rm, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… запусков ΠΈ экспСримСнтов с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker rmi.

1.2 ВСрминология

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали ΠΌΠ½ΠΎΠ³ΠΎ спСцифичного для Π”ΠΎΠΊΠ΅Ρ€Π° ΠΆΠ°Ρ€Π³ΠΎΠ½Π°, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… это ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π°.

  • Images (ΠΎΠ±Ρ€Π°Π·Ρ‹)Β — Π‘Ρ…Π΅ΠΌΡ‹ нашСго прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ использовали ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker pullΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· busybox.
  • Containers (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹)Β — Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π° ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠœΡ‹ создали ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ docker run, ΠΈ использовали ΠΎΠ±Ρ€Π°Π· busybox, скачанный Ρ€Π°Π½Π΅Π΅. Бписок Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker ps.
  • Docker Daemon (Π΄Π΅ΠΌΠΎΠ½ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π€ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ сСрвис, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π½Π° хост-машинС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС, запуск ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π”Π΅ΠΌΠΎΠ½ β€” это процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ взаимодСйствуСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚.
  • Docker Client (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°)Β — Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, которая позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,Β Kitematic, с графичСским интСрфСйсом.
  • Docker HubΒ — РСгистр ДокСр-ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Π“Ρ€ΡƒΠ±ΠΎ говоря, Π°Ρ€Ρ…ΠΈΠ² всСх доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ². Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ собствСнный рСгистр ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для получСния ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

2.0 Π’Π΅Π±-прилоТСния ΠΈ Π”ΠΎΠΊΠ΅Ρ€

Π‘ΡƒΠΏΠ΅Ρ€! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Β docker run, ΠΏΠΎΠΈΠ³Ρ€Π°Π»ΠΈ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π’ΠΎΠΎΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ этими знаниями, ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ ΡˆΡ‚ΡƒΠΊΠ°ΠΌ: дСплою Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ!

2.1 БтатичСскиС сайты

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ рассмотрим самый простой статичСский Π²Π΅Π±-сайт. Π‘ΠΊΠ°Ρ‡Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· Docker Hub, запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ посмотрим, насколько Π»Π΅Π³ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Π΅Π±-сСрвСр.

ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ. Для одностраничного сайта Π½Π°ΠΌ понадобится ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я Π·Π°Ρ€Π°Π½Π΅Π΅ создал для этого пособия ΠΈ размСстил Π² рСгистрС —Β prakhar1989/static-site. МоТно ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ docker run.

$ docker run prakhar1989/static-site

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π·Π° Π½Π΅ сущСствуСт локально, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт ΠΎΠ±Ρ€Π°Π· ΠΈΠ· рСгистра, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустит Π΅Π³ΠΎ. Если всС Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ сообщСниС Nginx is running... Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ сСрвСр Π·Π°ΠΏΡƒΡ‰Π΅Π½. Как ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ сайт Π² дСйствии? На ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр? И, Ρ‡Ρ‚ΠΎ самоС Π²Π°ΠΆΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π΄ΠΎΡΡ‚ΡƒΡ‡Π°Ρ‚ΡŒΡΡ Π΄ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· хост-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

Π’ нашСм случаС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡ€Ρ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β docker runΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π½Π΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ ΠΊ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ спокойно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π­Ρ‚ΠΎ называСтся detachedΒ mode.

$ docker run -d -P --name static-site prakhar1989/static-site
e61d12292d69556eabe2a44c16cbd54486b2527e2ce4f95438e504afb7b02810

Π€Π»Π°Π³Β -dΒ ΠΎΡ‚ΠΊΡ€Π΅ΠΏΠΈΡ‚ (detach) Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π», Ρ„Π»Π°Π³Β -P сдСлаСт всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ случайными, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ„Π»Π°Π³Β --name это имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹Β docker port [CONTAINER].

$ docker port static-site
80/tcp -> 0.0.0.0:32769
443/tcp -> 0.0.0.0:32768

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://localhost:32769Β Π² своСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ docker-toolbox, Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker-machine ip default Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP-адрСс.

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ свой ΠΏΠΎΡ€Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ соСдинСния Π½Π° Π½Π΅Π³ΠΎ.

$ docker run -p 8888:80 prakhar1989/static-site
Nginx is running...

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запуститС docker stopΒ ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (ID) ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π‘ΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, всС Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ это Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр, Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹ΡˆΠ΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π²Π΅Π±-сСрвСр Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π·Π°, Π²Π°ΠΌ, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, интСрСсно β€” Π° ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·? ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ эту Ρ‚Π΅ΠΌΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

2.2 ΠžΠ±Ρ€Π°Π·Ρ‹

ΠœΡ‹ касались ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Ρ€Π°Π½Π΅Π΅, Π½ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ заглянСм Π³Π»ΡƒΠ±ΠΆΠ΅: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΎΠ±Ρ€Π°Π·Ρ‹. НаконСц, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ собствСнный ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ Π΅Π³ΠΎ Π½Π°Β AWS, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ. ΠšΡ€ΡƒΡ‚ΠΎ? ΠšΡ€ΡƒΡ‚ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ.

ΠžΠ±Ρ€Π°Π·Ρ‹ это основы для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ скачали (pull)Β ΠΎΠ±Ρ€Π°Π· ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Busybox ΠΈΠ· рСгистра, ΠΈ попросили ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, основанный Π½Π° этом ΠΎΠ±Ρ€Π°Π·Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ список доступных локально ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker images.

$ docker images
REPOSITORY                      TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
prakhar1989/catnip              latest              c7ffb5626a50        2 hours ago         697.9 MB
prakhar1989/static-site         latest              b270625a1631        21 hours ago        133.9 MB
python                          3-onbuild           cf4002b2c383        5 days ago          688.8 MB
martin/docker-cleanup-volumes   latest              b42990daaca2        7 weeks ago         22.14 MB
ubuntu                          latest              e9ae3c220b23        7 weeks ago         187.9 MB
busybox                         latest              c51f86c28340        9 weeks ago         1.109 MB
hello-world                     latest              0a6ba66e537a        11 weeks ago        960 B

Π­Ρ‚ΠΎ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я скачал ΠΈΠ· рСгистра, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π΅Ρ…, Ρ‡Ρ‚ΠΎ я сдСлал сам (скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°Ρ‚ΡŒ). TAG β€” это ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ снимок ΠΈΠ»ΠΈ ΡΠ½ΡΠΏΡˆΠΎΡ‚ (snapshot) ΠΎΠ±Ρ€Π°Π·Π°, Π° IMAGE ID β€” это ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΎΠ±Ρ€Π°Π·Π°.

Для простоты, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΊΠ°ΠΊ ΠΊ git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ. ΠžΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎΒ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒΒ Ρ измСнСниями, ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько вСрсий. Если Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ latest. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π°Β ubuntu:

$ docker pull ubuntu:12.04

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π”ΠΎΠΊΠ΅Ρ€-ΠΎΠ±Ρ€Π°Π·, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· рСгистра (Ρ‚Π°ΠΊΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Docker Hub) ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный. На Docker Hub Π΅ΡΡ‚ΡŒ дСсятки тысяч ΠΎΠ±Ρ€Π°Π·ΠΎΠ². МоТно ΠΈΡΠΊΠ°Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ docker search.

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ:

  • Base images (Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΎΠ±Ρ€Π°Π·Ρ‹ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ubuntu, busybox ΠΈΠ»ΠΈ debian.
  • Child images (Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹) β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, построСнныС Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ… ΠΈ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΈ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΈ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ.

  • ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ β€” это ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ Docker. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π² ΠΈΡ… Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎ слово. Π’ спискС Π²Ρ‹ΡˆΠ΅Β python,Β ubuntu,Β busybox ΠΈ hello-worldΒ β€” Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹.
  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹Β β€” ΠΎΠ±Ρ€Π°Π·Ρ‹, созданныС простыми ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ мСня ΠΈ вас. Они построСны Π½Π° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… ΠΎΠ±Ρ€Π°Π·Π°Ρ…. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΡƒΒ user/image-name.

2.3 Наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠ½ΠΈ Π±Ρ‹Π²Π°ΡŽΡ‚, самоС врСмя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный ΠΎΠ±Ρ€Π°Π·. ЦСль этого Ρ€Π°Π·Π΄Π΅Π»Π° β€” ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с простым ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° Flask. Для этого пособия я сдСлал ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΎΠ΅Β ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΡƒΡŽ Π³ΠΈΡ„ΠΊΡƒ с кошкой. Ну, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ, ΠΊΡ‚ΠΎ Π½Π΅ Π»ΡŽΠ±ΠΈΡ‚ кошСк? Π‘ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ этот Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΊ сСбС Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ.

Π’Π½Π°Ρ‡Π°Π»Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ локально. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ flask-app ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉΒ cdΒ ΠΈ установитС зависимости.

$ cd flask-app
$ pip install -r requirements.txt
$ python app.py
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Если всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://localhost:5000 Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² дСйствии.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если ΠΊΠΎΠΌΠ°Π½Π΄Π° pip install ΠΏΠ°Π΄Π°Π΅Ρ‚ с ошибками «permission denied», Ρ‚ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π΅ с sudo. Если Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы, Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ pip install --user -r requirements.txt.

Выглядит ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Как Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, всС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ основаны Π½Π° Π±Π°Π·ΠΎΠ²ΠΎΠΌ ΠΎΠ±Ρ€Π°Π·Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Python 3. Π’ частности, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° вСрсия python:3-onbuildΒ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° с ΠŸΠΈΡ‚ΠΎΠ½ΠΎΠΌ.

Π§Ρ‚ΠΎ Π·Π° вСрсия onbuild, спроситС Π²Ρ‹?

Π­Ρ‚ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ нСсколько Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€ΠΎΠ² ONBUILD, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно Ρ‡Ρ‚ΠΎΠ±Ρ‹ быстро Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈ сборкС Π±ΡƒΠ΄Π΅Ρ‚ скопирован Ρ„Π°ΠΉΠ» requirements.txt, Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ pip install с этим Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π° ΠΏΠΎΡ‚ΠΎΠΌ тСкущая дирСктория Π±ΡƒΠ΄Π΅Ρ‚ скопирована Π²Β /usr/src/app.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, вСрсия onbuildΒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ…Π΅Π»ΠΏΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ скучныС процСссы запуска прилоТСния. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипты), ΠΎΠ±Ρ€Π°Π·Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ всС Π·Π° вас. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ всС ΠΈΠ½Π³Ρ€Π΅Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ для создания своСго ΠΎΠ±Ρ€Π°Π·Π°: Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Как это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ? ΠžΡ‚Π²Π΅Ρ‚: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ Dockerfile.

2.4 Dockerfile

DockerfileΒ β€” это простой тСкстовый Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТится список ΠΊΠΎΠΌΠ°Π½Π΄ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ простой способ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ процСсс создания ΠΎΠ±Ρ€Π°Π·Π°. Π‘Π°ΠΌΠΎΠ΅ классноС, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Dockerfile ΠΏΠΎΡ‡Ρ‚ΠΈΒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ своим Π°Π½Π°Π»ΠΎΠ³Π°ΠΌ Π² Linux. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π΅ΡΡ‚ΡŒ Dockerfile, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ всС Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ с нуля. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ пустой Ρ„Π°ΠΉΠ» Π² любимом тСкстовом Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅, ΠΈ сохранитС Π΅Π³ΠΎ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π³Π΄Π΅ находится flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. НазовитС Ρ„Π°ΠΉΠ» Dockerfile.

Для Π½Π°Ρ‡Π°Π»Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Для этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово FROM.

FROM python:3-onbuild

Π”Π°Π»ΡŒΡˆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для копирования Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ установки зависимостСй. Но ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, onbuild-вСрсия Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π±Π΅Ρ€Π΅Ρ‚ эти Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° сСбя. Π”Π°Π»ΡŒΡˆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5000, поэтому ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π΅Π³ΠΎ:

EXPOSE 5000

ПослСдний шаг β€” ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для запуска прилоТСния. Π­Ρ‚ΠΎ просто python ./app.py. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ CMD:

CMD ["python", "./app.py"]

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β CMD β€” это ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΊΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ стартС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш DockerfileΒ Π³ΠΎΡ‚ΠΎΠ². Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΎΠ½ выглядит:

# our base image
FROM python:3-onbuild

# specify the port number the container should expose
EXPOSE 5000

# run the application
CMD ["python", "./app.py"]

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. Команда docker build занимаСтся слоТной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ создания ΠΎΠ±Ρ€Π°Π·Π° Π½Π° основС Dockerfile.

Листинг Π½ΠΈΠΆΠ΅ дСмонстрируСт процСсс. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ сами (Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ†Π΅), ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚Π°ΠΌ Π±Ρ‹Π» ваш username вмСсто ΠΌΠΎΠ΅Π³ΠΎ. Username Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€ΠΈ рСгистрации Π½Π° Docker hub. Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ, Ρ‚ΠΎ сдСлайтС это Π΄ΠΎ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Команда docker build довольно проста: ΠΎΠ½Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Π³ с Ρ„Π»Π°Π³ΠΎΠΌΒ -tΒ ΠΈ ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π»Π΅ΠΆΠΈΡ‚Β Dockerfile.

$ docker build -t prakhar1989/catnip .
Sending build context to Docker daemon 8.704 kB
Step 1 : FROM python:3-onbuild
# Executing 3 build triggers...
Step 1 : COPY requirements.txt /usr/src/app/
 ---> Using cache
Step 1 : RUN pip install --no-cache-dir -r requirements.txt
 ---> Using cache
Step 1 : COPY . /usr/src/app
 ---> 1d61f639ef9e
Removing intermediate container 4de6ddf5528c
Step 2 : EXPOSE 5000
 ---> Running in 12cfcf6d67ee
 ---> f423c2f179d1
Removing intermediate container 12cfcf6d67ee
Step 3 : CMD python ./app.py
 ---> Running in f01401a5ace9
 ---> 13e87ed1fbc2
Removing intermediate container f01401a5ace9
Successfully built 13e87ed1fbc2

Если Ρƒ вас Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Π°Β python:3-onbuild, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сначала скачаСт Π΅Π³ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ΡΡ Π·Π° созданиС вашСго ΠΎΠ±Ρ€Π°Π·Π°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΌΠΎΠ΅Π³ΠΎ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Ρ‹ onbuild. Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· Π³ΠΎΡ‚ΠΎΠ²! ЗапуститС docker imagesΒ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ свой ΠΎΠ±Ρ€Π°Π· Π² спискС.

ПослСдний шаг β€” Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ username Π½Π° свой):

$ docker run -p 8888:5000 prakhar1989/catnip
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

 

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создали свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π”ΠΎΠΊΠ΅Ρ€Π°!

2.5 Docker Π½Π° AWS

Π§Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ нСльзя ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, ΠΏΡ€Π°Π²Π΄Π°? Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ нашС ΠΎΡ„ΠΈΠ³Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ AWSΒ Elastic Beanstalk Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту Π·Π°Π΄Π°Ρ‡Ρƒ Π·Π° ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΠΈΠΊΠΎΠ². ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Beanstalk Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Docker push

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ Π½Π° AWS это ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π· Π² рСгистрС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· AWS. Π•ΡΡ‚ΡŒ нСсколько Docker-рСгистров (ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный). Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΒ Docker Hub. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅:

$ docker push prakhar1989/catnip

Если это ваша пСрвая публикация, Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ попросит вас Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡ‚ΡŒΡΡ. Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Π²Ρ…ΠΎΠ΄Π° Π² Docker Hub.

$ docker login
Username: prakhar1989
WARNING: login credentials saved in /Users/prakhar/.docker/config.json
Login Succeeded

НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π½Π° своС. ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ username/image_name, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΠΊΡƒΠ΄Π° ΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·.

ПослС этого ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° свой ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. НапримСр, Π²ΠΎΡ‚ страница ΠΌΠΎΠ΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΎΠ΄ΠΈΠ½ Π²Π°ΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стоит ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ β€” Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ рСгистрС (ΠΈΠ»ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ рСгистрС Π²ΠΎΠΎΠ±Ρ‰Π΅) Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS. Если Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ стартапа-Π΅Π΄ΠΈΠ½ΠΎΡ€ΠΎΠ³Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ этот шаг. ΠœΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ свой ΠΎΠ±Ρ€Π°Π· Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ, пропустив нСсколько ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… шагов.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш ΠΎΠ±Ρ€Π°Π· ΠΎΠ½Π»Π°ΠΉΠ½, ΠΈ любой Π΄ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Π½ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ docker run -p 8888:5000 prakhar1989/catnip

Если Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π²Ρ‹ ΠΌΡƒΡ‡Π°Π»ΠΈΡΡŒ с установкой локального Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ окруТСния ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своСй ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΊΡ€ΡƒΡ‚ΠΎ это Π·Π²ΡƒΡ‡ΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π”ΠΎΠΊΠ΅Ρ€ β€” это сила!

Beanstalk

AWS Elastic Beanstalk (EB) это PaaS (Platform as a Service β€” ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠ°ΠΊ сСрвис) ΠΎΡ‚ Amazon Web Services. Если Π²Ρ‹ использовали Heroku, Google App Engine ΠΈ Ρ‚.Π΄., Ρ‚ΠΎ всС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎ. Как Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²Ρ‹ сообщаСтС EB ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° EB занимаСтся всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ, Π² Ρ‚ΠΎΠΌ числС ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ ΠΈ Π΄Π°ΠΆΠ΅ Π°ΠΏΠ΄Π΅ΠΉΡ‚Π°ΠΌΠΈ. Π’ Π°ΠΏΡ€Π΅Π»Π΅ 2014 Π² EB Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для дСплоя. Π£ EB ΠΎΡ‡Π΅Π½ΡŒ понятный интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшой ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, поэтому для простоты Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Π±-интСрфСйс для запуска нашСго прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ, Π²Π°ΠΌ потрСбуСтся Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Π½Π° AWS. Если Ρƒ вас Π΅Π³ΠΎ Π½Π΅Ρ‚, Ρ‚ΠΎ создайтС Π΅Π³ΠΎ. Для этого потрСбуСтся ввСсти Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΡ€Π΅Π΄ΠΈΡ‚Π½ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, эта услуга бСсплатна, ΠΈ всС, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… этого пособия Ρ‚ΠΎΠΆΠ΅ бСсплатно.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ:

  • Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² свою консоль AWS.
  • НаТмитС Π½Π° Elastic Beanstalk. Бсылка находится Π² сСкции compute, Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ. Или просто ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ сюда.

  • НаТмитС Π½Π° «Create New Application» Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ.
  • Π”Π°ΠΉΡ‚Π΅ своСму ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ΡΡ (Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅) имя ΠΈ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ описаниС.
  • Π½Π° экранС New EnvironmentΒ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅Β Web Server Environment.
  • Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ экран ΠΏΠΎΠΊΠ°Π·Π°Π½ Π½ΠΈΠΆΠ΅. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ DockerΒ ΠΈΠ· Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ. МоТно ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒΒ Environment typeΒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ. НаТмитС Next.

  • Π’ΡƒΡ‚ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ систСмС EB ΠΎ нашСм ΠΎΠ±Ρ€Π°Π·Π΅. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β Ρ„Π°ΠΉΠ» Dockerrun.aws.jsonΒ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ flask-appΒ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅Β NameΒ ΠΎΠ±Ρ€Π°Π·Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΎ соотвСтствовало названию вашСго ΠΎΠ±Ρ€Π°Π·Π°. НС Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ, я ΠΎΠΏΠΈΡˆΡƒ содСрТаниС Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅. ΠŸΠΎΡ‚ΠΎΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ «upload your own» ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ».
  • Π”Π°Π»Π΅Π΅, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ окруТСния ΠΈ URL. Π­Ρ‚ΠΎΡ‚ URL ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π΅.
  • Пока Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π°Π²ΠΎΠΊ Π² ΡΠ΅ΠΊΡ†ΠΈΡŽΒ Additional Resources. НаТмитС Next ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ Configuration Details.
  • Π’ этой сСкции Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ инстанса t1.micro. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это бСсплатный тип ΠΎΡ‚ AWS. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π²Ρ…ΠΎΠ΄Π°. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‚ΠΎ Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΈ просто пропуститС эту Ρ‡Π°ΡΡ‚ΡŒ. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ.
  • Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Environment TagsΒ andΒ Permissions, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ просто ΠΆΠΌΠΈΡ‚Π΅ Next Π΄Π²Π° Ρ€Π°Π·Π° подряд. Π’ ΠΊΠΎΠ½Ρ†Π΅ Π±ΡƒΠ΄Π΅Ρ‚ экран Review. Если всС выглядит Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ, Ρ‚ΠΎ Π½Π°ΠΆΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒΒ Launch.
  • На послСднСм экранС Π±ΡƒΠ΄Π΅Ρ‚ нСсколько спиннСров. Π­Ρ‚ΠΎ поднимаСтся ΠΈ настраиваСтся вашС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΊΠΎΠ»ΠΎ пяти ΠΌΠΈΠ½ΡƒΡ‚ для ΠΏΠ΅Ρ€Π²ΠΎΠΉ настройки.

Пока ΠΆΠ΄Π΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ взглянСм Π½Π° Ρ„Π°ΠΉΠ»Β Dockerrun.aws.json. Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» для AWS, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится информация ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π”ΠΎΠΊΠ΅Ρ€Π°. EB ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· этого Ρ„Π°ΠΉΠ»Π°.

{
  "AWSEBDockerrunVersion": "1",
  "Image": {
    "Name": "prakhar1989/catnip",
    "Update": "true"
  },
  "Ports": [
    {
      "ContainerPort": "5000"
    }
  ],
  "Logging": "/var/log/nginx"
}

Π€Π°ΠΉΠ» довольно понятный, Π½ΠΎ всСгда ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. ΠœΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°, ΠΈ EB Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ инстанс ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ². Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EB ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π·Π΅Π»Π΅Π½Ρ‹ΠΉ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска прилоТСния.

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ URL Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всС красС. ΠŸΠΎΡˆΠ»ΠΈΡ‚Π΅ адрСс своим Π΄Ρ€ΡƒΠ·ΡŒΡΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС ΠΌΠΎΠ³Π»ΠΈ Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ Π³ΠΈΡ„ΠΊΠ°ΠΌΠΈ с кошками.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ! Π’Ρ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ своС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅! ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ шагов, Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ EB ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π₯Π΅Ρ€ΠΎΠΊΡƒ нСсколькими наТатиями клавиш. НадСюсь, Π²Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π”ΠΎΠΊΠ΅Ρ€ сильно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ дСплоя Π² ΠΎΠ±Π»Π°ΠΊΠΎ. Π― ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ AWSΒ ΠΏΡ€ΠΎ single-container Docker environment Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ возмоТности Π² EB.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ, послСднСй части пособия, ΠΌΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ дальшС ΠΈ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠΈΡ€Ρƒ. Π’ Π½Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ постоянноС бэкэнд-Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ!

3.0 ΠœΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Π΅ окруТСния

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ ΠΈ просто Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с простого статичСского сайта, Π° ΠΏΠΎΡ‚ΠΎΠΌ запустили Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Оба Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ локально ΠΈΠ»ΠΈ Π² ΠΎΠ±Π»Π°ΠΊΠ΅, нСсколькими ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ. ΠžΠ±Ρ‰Π°Ρ Ρ‡Π΅Ρ€Ρ‚Π° этих ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ… Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎΒ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ управлСния сСрвисами Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅, Ρ‚ΠΎ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ соврСмСнныС прилоТСния ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊΠΈΠ΅ простыС. ΠŸΠΎΡ‡Ρ‚ΠΈ всСгда Π΅ΡΡ‚ΡŒ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ постоянного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°). БистСмы Π²Ρ€ΠΎΠ΄Π΅ Redis ΠΈ Memcached стали практичСски ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ научимся «Π΄ΠΎΠΊΠ΅Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ» прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ трСбуСтся нСсколько Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… сСрвисов.

Π’ частности, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹ΠΌΠΈ Π”ΠΎΠΊΠ΅Ρ€-окруТСниями. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², спроситС Π²Ρ‹? Ну, ΠΎΠ΄Π½Π° ΠΈΠ· Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΈΠ΄Π΅ΠΉ Π”ΠΎΠΊΠ΅Ρ€Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ прСдоставляСт ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ. ИдСя совмСщСния процСсса ΠΈ Π΅Π³ΠΎ зависимостСй Π² ΠΎΠ΄Π½ΠΎΠΉ пСсочницС (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ) ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом.

Аналогично Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π±ΠΈΠ²Π°ΡŽΡ‚ Π½Π° части, стоит ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвисы Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. Π Π°Π·Π½Ρ‹ΠΌ частям скорСС всСго Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ рСсурсы, ΠΈ трСбования ΠΌΠΎΠ³ΡƒΡ‚ расти с Ρ€Π°Π·Π½ΠΎΠΉ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ. Если ΠΌΡ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ эти части ΠΈ помСстим Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий Ρ‚ΠΈΠΏ рСсурсов. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ совмСщаСтся с ΠΈΠ΄Π΅Π΅ΠΉ ΠΌΠΈΠΊΡ€ΠΎ сСрвисов. Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π”ΠΎΠΊΠ΅Ρ€ (ΠΈ любая другая тСхнология ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ) находится на пСрСдовой соврСмСнных ΠΌΠΈΠΊΡ€ΠΎ сСрвисных Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€.

3.1 SF Food Trucks

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅ΠΌ Π² Π”ΠΎΠΊΠ΅Ρ€, называСтся SF Food Trucks (ΠΊ соТалСнию, сСйчас ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.). Моя Ρ†Π΅Π»ΡŒ Π±Ρ‹Π»Π° ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ (ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° настоящСС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°), Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ сСрвис, Π½ΠΎ Π½Π΅ слишком слоТноС для этого пособия. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π».

Бэкэнд прилоТСния написано Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅ (Flask), Π° для поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡΒ Elasticsearch. Как ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ Π² этом пособии, ΠΊΠΎΠ΄ находится Π½Π°Β Github. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ завСлись (надСюсь), Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Π΅ΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ этот процСсс. Π’ нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΅ΡΡ‚ΡŒ бэкэнд Π½Π° Flask ΠΈ сСрвис Elasticsearch. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: ΠΎΠ΄ΠΈΠ½ для Flask, Π΄Ρ€ΡƒΠ³ΠΎΠΉ для Elasticsearch (ES). Если ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ станСт популярным, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ мСстС, смотря Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ·ΠΊΠΎΠ΅ мСсто.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚ Π½ΡƒΠΆΠ½ΠΎ Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ Π½Π΅ слоТно, ΠΏΡ€Π°Π²Π΄Π°? ΠœΡ‹ ΡƒΠΆΠ΅ создавали Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. А для Elasticsearch… Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Ρ…Π°Π±Π΅:

$ docker search elasticsearch
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
elasticsearch                     Elasticsearch is a powerful open source se...   697       [OK]
itzg/elasticsearch                Provides an easily configurable Elasticsea...   17                   [OK]
tutum/elasticsearch               Elasticsearch image - listens in port 9200.     15                   [OK]
barnybug/elasticsearch            Latest Elasticsearch 1.7.2 and previous re...   15                   [OK]
digitalwonderland/elasticsearch   Latest Elasticsearch with Marvel & Kibana       12                   [OK]
monsantoco/elasticsearch          ElasticSearch Docker image                      9                    [OK]

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· для Elasticsearch. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ES, Π½ΡƒΠΆΠ½ΠΎ всСго лишь Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ docker run, ΠΈ вскорС Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ ES.

$ docker run -dp 9200:9200 elasticsearch
d582e031a005f41eea704cdc6b21e62e7a8a42021297ce7ce123b945ae3d3763

$ curl 0.0.0.0:9200
{
  "name" : "Ultra-Marine",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}

Π—Π°ΠΎΠ΄Π½ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с Flask. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ΅Π½ Dockerfile. Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ сСкции ΠΌΡ‹ использовали ΠΎΠ±Ρ€Π°Π·Β python:3-onbuild Π² качСствС Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ. Однако, Π² этом Ρ€Π°Π·, ΠΊΡ€ΠΎΠΌΠ΅ установки зависимостСй Ρ‡Π΅Ρ€Π΅Π· pip, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Javascript-Ρ„Π°ΠΉΠ» для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π°. Для этого понадобится Nodejs. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ΅Π½ свой Π±ΠΈΠ»Π΄ с нуля, поэтому Π½Π°Ρ‡Π½Π΅ΠΌ с Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ubuntu.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли оказываСтся, Ρ‡Ρ‚ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π· Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ, Ρ‚ΠΎ спокойно создавайтС свой ΠΎΠ±Ρ€Π°Π· Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСм, для ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π½Π° Docker Hub ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉΒ Dockerfile Π½Π° Github. ΠŸΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π”ΠΎΠΊΠ΅Ρ€Ρ„Π°ΠΉΠ»Ρ‹ β€” это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… способов Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π΄Π΅Π»Π°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹.

Наш Dockerfile для Flask-прилоТСния выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

# start from base
FROM ubuntu:14.04
MAINTAINER Prakhar Srivastav <[email protected]>

# install system-wide deps for python and node
RUN apt-get -yqq update
RUN apt-get -yqq install python-pip python-dev
RUN apt-get -yqq install nodejs npm
RUN ln -s /usr/bin/nodejs /usr/bin/node

# copy our application code
ADD flask-app /opt/flask-app
WORKDIR /opt/flask-app

# fetch app specific deps
RUN npm install
RUN npm run build
RUN pip install -r requirements.txt

# expose port
EXPOSE 5000

# start app
CMD [ "python", "./app.py" ]

Π’ΡƒΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ всСго Π½ΠΎΠ²ΠΎΠ³ΠΎ. Π’Π½Π°Ρ‡Π°Π»Π΅ ΡƒΠΊΠ°Π·Π°Π½ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Ubuntu LTS, ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Β apt-get для установки зависимостСй, Π² частности β€” Python ΠΈ Node. Π€Π»Π°Π³Β yqq Π½ΡƒΠΆΠ΅Π½ для игнорирования Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ автоматичСского Π²Ρ‹Π±ΠΎΡ€Π° «Yes» Π²ΠΎ всСх мСстах. Π’Π°ΠΊΠΆΠ΅ создаСтся символичСская ссылка для Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° node. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости.

ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ ADD для копирования прилоТСния Π² Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ β€” /opt/flask-app. Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ вСсь наш ΠΊΠΎΠ΄. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСм эту Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ Π² качСствС Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² контСкстС этой Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° наши систСмныС зависимости установлСны, ΠΏΠΎΡ€Π° ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости уровня прилоТСния. НачнСм с Node, установки ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· npm ΠΈ запуска ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ сборки, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² нашСм Ρ„Π°ΠΉΠ»Π΅Β package.json. Π’ ΠΊΠΎΠ½Ρ†Π΅ устанавливаСм ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Python, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠΎΡ€Ρ‚ ΠΈ опрСдСляСм запуск прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒ CMD, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ prakhar1989 Π½Π° свой username Π½ΠΈΠΆΠ΅).

$ docker build -t prakhar1989/foodtrucks-web .

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ запускС Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ubuntu, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·. ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ запуск docker build послС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ практичСски ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

$ docker run -P prakhar1989/foodtrucks-web
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Unable to connect to ES. Retying in 5 secs...
Out of retries. Bailing out...

Упс! НашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ смогло Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Elasticsearch. Как ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈ ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ? ΠžΡ‚Π²Π΅Ρ‚ β€” Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСкции.

3.2 Π‘Π΅Ρ‚ΠΈ Docker

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ возмоТности Π”ΠΎΠΊΠ΅Ρ€Π° для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ описанной Π·Π°Π΄Π°Ρ‡ΠΈ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΡƒΠΌΠ°ΡŽ, это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΠΌ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ удобство Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ вскорС ΠΈΠ·ΡƒΡ‡ΠΈΠΌ.

Π›Π°Π΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим docker ps, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Ρƒ нас:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   2 seconds ago       Up 2 seconds        0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

Π˜Ρ‚Π°ΠΊ, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES ΠΏΠΎ адрСсу ΠΈ ΠΏΠΎΡ€Ρ‚ΡƒΒ 0.0.0.0:9200, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ. Если ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ этому адрСсу, Ρ‚ΠΎ ΠΎΠ½ΠΎ смоТСт ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с ES, Π²Π΅Ρ€Π½ΠΎ? Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΊΠΎΠ΄ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅, Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ описано ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

es = Elasticsearch(host='es')

НуТно ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π½Π° хостС 0.0.0.0Β (ΠΏΠΎΡ€Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ 9200), ΠΈ всС Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π΄Π°? К соТалСнию, Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ IP 0.0.0.0 это адрСс для доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ с  хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с ΠΌΠΎΠ΅Π³ΠΎ Мака. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ смоТСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ этому адрСсу. Π›Π°Π΄Π½ΠΎ, Ссли Π½Π΅ этот адрСс, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ адрСс Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ ES? Π Π°Π΄, Ρ‡Ρ‚ΠΎ Π²Ρ‹ спросили.

Π­Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ сСти Π² Π”ΠΎΠΊΠ΅Ρ€Π΅. ПослС установки, Π”ΠΎΠΊΠ΅Ρ€ автоматичСски создаСт Ρ‚Ρ€ΠΈ сСти:

$ docker network ls
NETWORK ID          NAME                DRIVER
075b9f628ccc        none                null
be0f7178486c        host                host
8022115322ec        bridge              bridge

Π‘Π΅Ρ‚ΡŒΒ bridgeΒ β€” это ΡΠ΅Ρ‚ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES, ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² этой сСти bridge. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "8022115322ec80613421b0282e7ee158ec41e16f565a3e86fa53496105deb2d7",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "e931ab24dedc1640cddf6286d08f115a83897c88223058305460d7bd793c1947": {
                "EndpointID": "66965e83bf7171daeb8652b39590b1f8c23d066ded16522daeb0128c9c25c189",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Β e931ab24dedc находится Π² сСкции Containers. Π’Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½ IP-адрСс, Π²Ρ‹Π΄Π°Π½Π½Ρ‹ΠΉ этому ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ β€” 172.17.0.2. ИмСнно этот адрСс ΠΌΡ‹ ΠΈ искали? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ: запустим Flask-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ IP:

$ docker run -it --rm prakhar1989/foodtrucks-web bash
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
bash: curl: command not found
root@35180ccc206a:/opt/flask-app# apt-get -yqq install curl
root@35180ccc206a:/opt/flask-app# curl 172.17.0.2:9200
{
  "name" : "Jane Foster",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@35180ccc206a:/opt/flask-app# exit

БСйчас всС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ понятно. ΠœΡ‹ запустили ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ с процСссом bash. Π€Π»Π°Π³ --rm Π½ΡƒΠΆΠ΅Π½ для удобства, благодаря Π½Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ автоматичСски удаляСтся послС Π²Ρ‹Ρ…ΠΎΠ΄Π°. ΠœΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ curl, Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ. ПослС этого ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ адрСсу 172.17.0.2:9200 Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ ES! Π‘ΡƒΠΏΠ΅Ρ€!

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ нашли способ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, сущСствуСт нСсколько ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с этим ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ:

  1. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ записи Π² Ρ„Π°ΠΉΠ»Β /etc/hostsΒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΎ, Ρ‡Ρ‚ΠΎ имя хоста esΒ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚Β 172.17.0.2. Если IP-адрСс мСняСтся, Ρ‚ΠΎ придСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ΅Π½ΡΡ‚ΡŒ запись.
  2. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Ρ‚ΡŒΒ bridge ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ всСми ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄Β Π½Π΅ бСзопасСн.

Но Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π”ΠΎΠΊΠ΅Ρ€ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнныС ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ сСти. Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ /etc/hosts, сСйчас ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим свою ΡΠ΅Ρ‚ΡŒ:

$ docker network create foodtrucks
1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89

$ docker network ls
NETWORK ID          NAME                DRIVER
1a3386375797        foodtrucks          bridge
8022115322ec        bridge              bridge
075b9f628ccc        none                null
be0f7178486c        host                host

Команда network create создаСт Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚ΡŒΒ bridge. Нам сСйчас Π½ΡƒΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ сСтСй, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Π½ΠΈΡ… Π²Β ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ ΡΠ΅Ρ‚ΡŒ. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ наши ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСти с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° --net. Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΈ сдСлаСм, Π½ΠΎ сначала остановим ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ElasticSearch, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² сСти bridge ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e931ab24dedc        elasticsearch       "/docker-entrypoint.s"   4 hours ago         Up 4 hours          0.0.0.0:9200->9200/tcp, 9300/tcp   cocky_spence

$ docker stop e931ab24dedc
e931ab24dedc

$ docker run -dp 9200:9200 --net foodtrucks --name es elasticsearch
2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651

$ docker network inspect foodtrucks
[
    {
        "Name": "foodtrucks",
        "Id": "1a3386375797001999732cb4c4e97b88172d983b08cd0addfcb161eed0c18d89",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Config": [
                {}
            ]
        },
        "Containers": {
            "2c0b96f9b8030f038e40abea44c2d17b0a8edda1354a08166c33e6d351d0c651": {
                "EndpointID": "15eabc7989ef78952fb577d0013243dae5199e8f5c55f1661606077d5b78e72a",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]

ΠœΡ‹ сдСлали Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Π΄Π°Π»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ es. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° запуск происходит Π² сСти.

$ docker run -it --rm --net foodtrucks prakhar1989/foodtrucks-web bash
root@53af252b771a:/opt/flask-app# cat /etc/hosts
172.18.0.3  53af252b771a
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  es
172.18.0.2  es.foodtrucks

root@53af252b771a:/opt/flask-app# curl es:9200
bash: curl: command not found
root@53af252b771a:/opt/flask-app# apt-get -yqq install curl
root@53af252b771a:/opt/flask-app# curl es:9200
{
  "name" : "Doctor Leery",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.1.1",
    "build_hash" : "40e2c53a6b6c2972b3d13846e450e66f4375bd71",
    "build_timestamp" : "2015-12-15T13:05:55Z",
    "build_snapshot" : false,
    "lucene_version" : "5.3.1"
  },
  "tagline" : "You Know, for Search"
}
root@53af252b771a:/opt/flask-app# ls
app.py  node_modules  package.json  requirements.txt  static  templates  webpack.config.js
root@53af252b771a:/opt/flask-app# python app.py
Index not found...
Loading data in elasticsearch ...
Total trucks loaded:  733
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
root@53af252b771a:/opt/flask-app# exit

Π£Ρ€Π°! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! ΠœΠ°Π³ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π”ΠΎΠΊΠ΅Ρ€ внСс Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΊΠΈ Π² Ρ„Π°ΠΉΠ» /etc/hosts, ΠΈ поэтому es:9200 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ β€” этот адрСс ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ направляСт запросы Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ES. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ запустим Flask-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎ-настоящСму:

$ docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web
2a1b77e066e646686f669bab4759ec1611db359362a031667cacbe45c3ddb413

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                              NAMES
2a1b77e066e6        prakhar1989/foodtrucks-web   "python ./app.py"        2 seconds ago       Up 1 seconds        0.0.0.0:5000->5000/tcp             foodtrucks-web
2c0b96f9b803        elasticsearch                "/docker-entrypoint.s"   21 minutes ago      Up 21 minutes       0.0.0.0:9200->9200/tcp, 9300/tcp   es

$ curl -I 0.0.0.0:5000
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 3697
Server: Werkzeug/0.11.2 Python/2.7.6
Date: Sun, 10 Jan 2016 23:58:53 GMT

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π°Β http://0.0.0.0:5000, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ€Π°Π±ΠΎΡ‚Π΅. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Π½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ всСго 4 ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‡Ρ‚ΠΎΠ±Ρ‹ с нуля Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ прилоТСния. Π― собрал эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² bash-скрипт.

#!/bin/bash

# build the flask container
docker build -t prakhar1989/foodtrucks-web .

# create the network
docker network create foodtrucks

# start the ES container
docker run -d --net foodtrucks -p 9200:9200 -p 9300:9300 --name es elasticsearch

# start the flask app container
docker run -d --net foodtrucks -p 5000:5000 --name foodtrucks-web prakhar1989/foodtrucks-web

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Или Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° сСрвСрС, Π³Π΄Π΅ установлСн Π”ΠΎΠΊΠ΅Ρ€. МоТно Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ всю систСму с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹!

$ git clone https://github.com/prakhar1989/FoodTrucks
$ cd FoodTrucks
$ ./setup-docker.sh

Π’ΠΎΡ‚ ΠΈ всС! По-ΠΌΠΎΠ΅ΠΌΡƒ, это нСвСроятно ΠΊΡ€ΡƒΡ‚ΠΎΠΉ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ способ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прилоТСния!

Docker Links

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ этот Ρ€Π°Π·Π΄Π΅Π», стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΒ docker network это ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ новая Ρ„ΠΈΡ‡Π°, ΠΎΠ½Π° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Ρ€Π΅Π»ΠΈΠ· Docker 1.9Β .

Π”ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ появился network, ссылки Π±Ρ‹Π»ΠΈ допустимым способом настройки взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π’ соотвСтствии с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, linking вскорС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π² статус deprecated. Если Π²Π°ΠΌ попадСтся Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΈΠ»ΠΈ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ link для соСдинСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ просто Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого network (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° links являСтся legacy, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.)

3.3 Docker Compose

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π”ΠΎΠΊΠ΅Ρ€Π°. Но Π² экосистСмС Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ нСсколько Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. НСкоторыС ΠΈΠ· Π½ΠΈΡ… это:

  1. Docker Machine позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€-хосты Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π΅ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°.
  2. Docker ComposeΒ β€” инструмСнт для опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎ-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  3. Docker Swarm β€” Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для кластСризации.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· этих инструмСнтов β€” Docker Compose, ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Π£ Docker Compose довольно интСрСсная прСдыстория. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ компания OrchardUp запустила инструмСнт ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Fig. ИдСя Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ окруТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π”ΠΎΠΊΠ΅Ρ€Π°. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ восприняли Π½Π° Hacker NewsΒ — я смутно помню, Ρ‡Ρ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π» ΠΎ Π½Π΅ΠΌ, Π½ΠΎ Π½Π΅ особо понял Π΅Π³ΠΎ смысла.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉΒ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ Fig ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚:

На самом Π΄Π΅Π»Π΅, смысл Π”ΠΎΠΊΠ΅Ρ€Π° Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ процСссы. БСгодня Ρƒ Π”ΠΎΠΊΠ΅Ρ€Π° Π΅ΡΡ‚ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠ΅ API для запуска процСссов: Ρ€Π°ΡΡˆΠ°Ρ€Π΅Π½Π½Ρ‹Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ (ΠΈΠ½Ρ‹ΠΌΠΈ словами, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ) Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈΠ»ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (shared volumes), ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€Ρ‚ΠΎΠ² с хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π²Ρ‹Π²ΠΎΠ΄ Π»ΠΎΠ³ΠΎΠ², ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Но большС Π½ΠΈΡ‡Π΅Π³ΠΎ: Π”ΠΎΠΊΠ΅Ρ€ сСйчас Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ процСссов.

НС смотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ содСрТатся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности оркСстрации Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для создания Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ «ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ», Π² Π”ΠΎΠΊΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΎ Π±Ρ‹ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. И Π²ΠΎΡ‚ Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ΅Π½ инструмСнт Π²Ρ€ΠΎΠ΄Π΅ Fig: Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ с Π΅Π΄ΠΈΠ½ΠΎΠΉ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒΡŽ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ «Π·Π°ΠΏΡƒΡΠΊΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ» (ΠΈΠ½Ρ‹ΠΌΠΈ словами, «Π·Π°ΠΏΡƒΡΠΊΠ΅ оркСстрированного кластСра ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²») вмСсто «Π·Π°ΠΏΡƒΡΠΊΠ° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²».

Оказалось, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π”ΠΎΠΊΠ΅Ρ€Π° согласны с Ρ‚Π°ΠΊΠΈΠΌΠΈ мыслями. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ, Fig Π½Π°Π±Ρ€Π°Π» ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ, Docker Inc. Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, ΠΊΡƒΠΏΠΈΠ»ΠΈ компанию ΠΈ Π½Π°Π·Π²Π°Π»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Docker Compose.

Π˜Ρ‚Π°ΠΊ, Π·Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Compose? Π­Ρ‚ΠΎ инструмСнт для простого опрСдСлСния ΠΈ запуска ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… Π”ΠΎΠΊΠ΅Ρ€-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’ Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» docker-compose.yml, ΠΈ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ сСрвисов.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, смоТСм Π»ΠΈ ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Β docker-compose.yml для нашСго прилоТСния SF-Foodtrucks ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, способСн Π»ΠΈ ΠΎΠ½ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅Ρ‰Π°Π΅Ρ‚.

Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose. Π•ΡΡ‚ΡŒ Ρƒ вас Windows ΠΈΠ»ΠΈ Mac, Ρ‚ΠΎ Docker Compose ΡƒΠΆΠ΅ установлСн β€” ΠΎΠ½ ΠΈΠ΄Π΅Ρ‚ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ с Docker Toolbox. На Linux ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Compose слСдуя простым инструкциям Π½Π° сайтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Compose написан Π½Π° Python, поэтому ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ просто pip install docker-compose. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ docker-compose version
docker-compose version 1.7.1, build 0a9ab35
docker-py version: 1.8.1
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1j 15 Oct 2014

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ созданию Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml. Бинтаксис yml-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΡ‡Π΅Π½ΡŒ простой, ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

version: "2"
services:
  es:
    image: elasticsearch
  web:
    image: prakhar1989/foodtrucks-web
    command: python app.py
    ports:
      - "5000:5000"
    volumes:
      - .:/code

      

Π”Π°Π²Π°ΠΉΡ‚Π΅ я Ρ€Π°Π·Π±Π΅Ρ€Ρƒ это ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. На Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нСймспСйса для Π½Π°ΡˆΠΈΡ… сСрвисов: esΒ ΠΈΒ web. К ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ сСрвису ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… image β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ. Для es ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ доступный Π½Π° Docker Hub ΠΎΠ±Ρ€Π°Π· elasticsearch. Для Flask-прилоТСния β€” Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ этого Ρ€Π°Π·Π΄Π΅Π»Π°.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Ρ€ΠΎΠ΄Π΅ command ΠΈ portsΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. volumes ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ монтирования, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ web. Π­Ρ‚ΠΎ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ½ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΠΎΠ³Π°ΠΌ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… значСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: НуТно Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ с файлом docker-compose.yml Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄ Compose.

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π€Π°ΠΉΠ» Π³ΠΎΡ‚ΠΎΠ², Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π°Β docker-composeΒ Π² дСйствии. Но Π²Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ€Ρ‚Ρ‹ свободны. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρƒ вас Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Flask ΠΈ ES, Ρ‚ΠΎ ΠΏΠΎΡ€Π° ΠΈΡ… ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ:

$ docker stop $(docker ps -q)
39a2f5df14ef
2a1b77e066e6

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΒ docker-compose. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Foodtrucks ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΡƒΒ docker-compose up.

$ docker-compose up
Creating network "foodtrucks_default" with the default driver
Creating foodtrucks_es_1
Creating foodtrucks_web_1
Attaching to foodtrucks_es_1, foodtrucks_web_1
es_1  | [2016-01-11 03:43:50,300][INFO ][node                     ] [Comet] version[2.1.1], pid[1], build[40e2c53/2015-12-15T13:05:55Z]
es_1  | [2016-01-11 03:43:50,307][INFO ][node                     ] [Comet] initializing ...
es_1  | [2016-01-11 03:43:50,366][INFO ][plugins                  ] [Comet] loaded [], sites []
es_1  | [2016-01-11 03:43:50,421][INFO ][env                      ] [Comet] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda1)]], net usable_space [16gb], net total_space [18.1gb], spins? [possibly], types [ext4]
es_1  | [2016-01-11 03:43:52,626][INFO ][node                     ] [Comet] initialized
es_1  | [2016-01-11 03:43:52,632][INFO ][node                     ] [Comet] starting ...
es_1  | [2016-01-11 03:43:52,703][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:52,704][INFO ][transport                ] [Comet] publish_address {172.17.0.2:9300}, bound_addresses {[::]:9300}
es_1  | [2016-01-11 03:43:52,721][INFO ][discovery                ] [Comet] elasticsearch/cEk4s7pdQ-evRc9MqS2wqw
es_1  | [2016-01-11 03:43:55,785][INFO ][cluster.service          ] [Comet] new_master {Comet}{cEk4s7pdQ-evRc9MqS2wqw}{172.17.0.2}{172.17.0.2:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
es_1  | [2016-01-11 03:43:55,818][WARN ][common.network           ] [Comet] publish address: {0.0.0.0} is a wildcard address, falling back to first non-loopback: {172.17.0.2}
es_1  | [2016-01-11 03:43:55,819][INFO ][http                     ] [Comet] publish_address {172.17.0.2:9200}, bound_addresses {[::]:9200}
es_1  | [2016-01-11 03:43:55,819][INFO ][node                     ] [Comet] started
es_1  | [2016-01-11 03:43:55,826][INFO ][gateway                  ] [Comet] recovered [0] indices into cluster_state
es_1  | [2016-01-11 03:44:01,825][INFO ][cluster.metadata         ] [Comet] [sfdata] creating index, cause [auto(index api)], templates [], shards [5]/[1], mappings [truck]
es_1  | [2016-01-11 03:44:02,373][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,510][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,593][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:02,708][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
es_1  | [2016-01-11 03:44:03,047][INFO ][cluster.metadata         ] [Comet] [sfdata] update_mapping [truck]
web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ IP Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠšΡ€ΡƒΡ‚ΠΎ, Π΄Π°? ВсСго лишь ΠΏΠ°Ρ€Π° строк ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΈ нСсколько Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² унисон. Π”Π°Π²Π°ΠΉΡ‚Π΅ остановим сСрвисы ΠΈ пСрСзапустим Π² detached mode:

web_1 |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Killing foodtrucks_web_1 ... done
Killing foodtrucks_es_1 ... done

$ docker-compose up -d
Starting foodtrucks_es_1
Starting foodtrucks_web_1

$ docker-compose ps
      Name                    Command               State           Ports
----------------------------------------------------------------------------------
foodtrucks_es_1    /docker-entrypoint.sh elas ...   Up      9200/tcp, 9300/tcp
foodtrucks_web_1   python app.py                    Up      0.0.0.0:5000->5000/tcp

НС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹. ΠžΡ‚ΠΊΡƒΠ΄Π° бСрутся ΠΈΠΌΠ΅Π½Π°? Π˜Ρ… Compose ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π» сам. Но Ρ‡Ρ‚ΠΎ насчСт сСти? Π•Π³ΠΎ Compose Ρ‚ΠΎΠΆΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ сам? Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ вопрос, Π΄Π°Π²Π°ΠΉΡ‚Π΅ выясним.

Для Π½Π°Ρ‡Π°Π»Π°, остановим Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ сСрвисы. Π˜Ρ… всСгда ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

$ docker-compose stop
Stopping foodtrucks_web_1 ... done
Stopping foodtrucks_es_1 ... done

Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΠΌ ΡΠ΅Ρ‚ΡŒΒ foodtrucks, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ создали Π² ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Ρ€Π°Π·. Π­Ρ‚Π° ΡΠ΅Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ потрСбуСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Compose автоматичСски сдСлаСт всС Π·Π° нас.

$ docker network rm foodtrucks
$ docker network ls
NETWORK ID          NAME                DRIVER
4eec273c054e        bridge              bridge
9347ae8783bd        none                null
54df57d7f493        host                host

Класс! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² этом чистом состоянии ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, способСн Π»ΠΈΒ Compose Π½Π° Π²ΠΎΠ»ΡˆΠ΅Π±ΡΡ‚Π²ΠΎ.

$ docker-compose up -d
Recreating foodtrucks_es_1
Recreating foodtrucks_web_1
$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
f50bb33a3242        prakhar1989/foodtrucks-web   "python app.py"          14 seconds ago      Up 13 seconds       0.0.0.0:5000->5000/tcp   foodtrucks_web_1
e299ceeb4caa        elasticsearch                "/docker-entrypoint.s"   14 seconds ago      Up 14 seconds       9200/tcp, 9300/tcp       foodtrucks_es_1

Пока всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, создались Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ сСти:

$ docker network ls
NETWORK ID          NAME                 DRIVER
0c8b474a9241        bridge               bridge              
293a141faac3        foodtrucks_default   bridge              
b44db703cd69        host                 host                
0474c9517805        none                 null  

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Compose ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ создал ΡΠ΅Ρ‚ΡŒΒ foodtrucks_defaultΒ ΠΈ подсоСдинил ΠΎΠ±Π° сСрвиса Π² эту ΡΠ΅Ρ‚ΡŒ, Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для сСрвиса ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ сСти, ΠΈ ΠΎΠ±Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° доступны Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ Π² сСти. Они доступны ΠΏΠΎ hostname, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ совпадаСт с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, находится Π»ΠΈ эта информация Π² /etc/hosts.

$ docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
bb72dcebd379        prakhar1989/foodtrucks-web   "python app.py"          20 hours ago        Up 19 hours         0.0.0.0:5000->5000/tcp   foodtrucks_web_1
3338fc79be4b        elasticsearch                "/docker-entrypoint.s"   20 hours ago        Up 19 hours         9200/tcp, 9300/tcp       foodtrucks_es_1

$ docker exec -it bb72dcebd379 bash
root@bb72dcebd379:/opt/flask-app# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.18.0.2  bb72dcebd379

Упс! ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ„Π°ΠΉΠ» понятия Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎ es. Как ΠΆΠ΅ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚? Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΠΈΠ½Π³ΡƒΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ названию хоста:

root@bb72dcebd379:/opt/flask-app# ping es
PING es (172.18.0.3) 56(84) bytes of data.
64 bytes from foodtrucks_es_1.C
--- es ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.049/0.056/0.064/0.010 ms

Вуаля! Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚! Каким-Ρ‚ΠΎ магичСским ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ смог ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ хоста es. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Docker 1.10 Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡƒΡŽ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ систСму, которая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ сСрвисов Ρ‡Π΅Ρ€Π΅Π· DNS-сСрвСр. Если интСрСсно, Ρ‚ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ release notes.

На этом наш Ρ‚ΡƒΡ€ ΠΏΠΎ Docker Compose Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. Π‘ этим инструмСнтом ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрвисы Π½Π° ΠΏΠ°ΡƒΠ·Ρƒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования Docker Compose.

НадСюсь, я продСмонстрировал ΠΊΠ°ΠΊ Π½Π° самом Π΄Π΅Π»Π΅ просто ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠΉ срСдой с Compose. Π’ послСднСм Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ Π·Π°Π΄Π΅ΠΏΠ»ΠΎΠΈΠΌ всС Π½Π° AWS!

3.4 AWS Elastic Container Service

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ использовали docker-composeΒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ локально ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:Β docker-compose up. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΈΡ€Ρƒ, Π·Π°ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡŽΠ·Π΅Ρ€ΠΎΠ², ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ Π΄Π΅Π½Π΅Π³ ΠΈ ΠΊΡƒΠΏΠΈΡ‚ΡŒ большой Π΄ΠΎΠΌ Π² Майами. ПослСдниС Ρ‚Ρ€ΠΈ шага выходят Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ этого пособия, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ займСмся выяснСниСм Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½ΠΎΠ³ΠΎ прилоТСния Π² ΠΎΠ±Π»Π°ΠΊΠΎ AWS.

Если Π²Ρ‹ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ этого мСста, Ρ‚ΠΎ скорСС всСго ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Docker β€” довольно крутая тСхнология. И Π²Ρ‹ Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈ. ΠžΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π²Π·Ρ€Ρ‹Π²Π½ΠΎΠΉ рост популярности Π”ΠΎΠΊΠ΅Ρ€Π° ΠΈ стали Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Π² свои сСрвисы. БСгодня, Π”ΠΎΠΊΠ΅Ρ€-прилоТСния ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ Π½Π° AWS,Β Azure,Rackspace,Β DigitalOceanΒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…. ΠœΡ‹ ΡƒΠΆΠ΅ ΡƒΠΌΠ΅Π΅ΠΌ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ Π½Π° Elastic Beanstalk, Π° Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ AWS Elastic Container Service (ΠΈΠ»ΠΈ ECS).

AWS ECS β€” это ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ Π³ΠΈΠ±ΠΊΠΈΠΉ сСрвис ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΈ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π”ΠΎΠΊΠ΅Ρ€. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ кластСром Π½Π° EC2 Ρ‡Π΅Ρ€Π΅Π· простой API. Π’ Beanstalk Π±Ρ‹Π»ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ ECS позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ аспСкт окруТСния ΠΏΠΎ вашим потрСбностям. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ECS β€” Π½Π΅ самый простой инструмСнт Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡƒΡ‚ΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρƒ ECS Π΅ΡΡ‚ΡŒ удобный инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (CLI) с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Docker Compose ΠΈ автоматичСской ΠΏΡ€ΠΎΠ²ΠΈΠ·ΠΈΠ΅ΠΉ Π½Π° ECS! Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ Ρ„Π°ΠΉΠ»Β docker-compose.yml, настройка ΠΈ запуск Π½Π° AWS Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ достаточно Π»Π΅Π³ΠΊΠΎΠΉ. НачнСм!

Π’Π½Π°Ρ‡Π°Π»Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ CLI. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия CLI-ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π½Π΅ доступна Π½Π° Windows. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ установкС CLI Π½Π° Mac ΠΈ Linux Ρ…ΠΎΡ€ΠΎΡˆΠΎ описаны Π½Π° сайтС с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ. УстановитС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΅Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊ:

$ ecs-cli --version
ecs-cli version 0.1.0 (*cbdc2d5)

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг β€” Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° инстансах. Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу EC2 ConsoleΒ ΠΈ создайтС Π½ΠΎΠ²Ρ‹ΠΉ keypair. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΈ Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² бСзопасном мСстС. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ β€” имя Ρ€Π΅Π³ΠΈΠΎΠ½Π°. Π― Π½Π°Π·Π²Π°Π» свой ΠΊΠ»ΡŽΡ‡Β ecs ΠΈ ΡƒΠΊΠ°Π·Π°Π» Ρ€Π΅Π³ΠΈΠΎΠ½ us-east-1. Π― ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΡƒ повСствованиС с этим Π΄ΠΎΠΏΡƒΡ‰Π΅Π½ΠΈΠ΅ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ настройтС CLI:

$ ecs-cli configure --region us-east-1 --cluster foodtrucks
INFO[0000] Saved ECS CLI configuration for cluster (foodtrucks)

Команда configure с ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ€Π΅Π³ΠΈΠΎΠ½Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ наш кластСр, ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ кластСра. НуТно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π³ΠΈΠΎΠ½, Ρ‡Ρ‚ΠΎ использовался ΠΏΡ€Ρ€ΠΈ создании ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если Ρƒ вас Π½Π΅ настроСн AWS CLI, то слСдуйтС руководству, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описываСт всС шаги.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг позволяСт ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ шаблон CloudFormation.

$ ecs-cli up --keypair ecs --capability-iam --size 2 --instance-type t2.micro
INFO[0000] Created cluster                               cluster=foodtrucks
INFO[0001] Waiting for your cluster resources to be created
INFO[0001] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0122] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0182] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS
INFO[0242] Cloudformation stack status                   stackStatus=CREATE_IN_PROGRESS

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ названия ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ скачали (Π² ΠΌΠΎΠ΅ΠΌ случаС ecs), количСство инстансов (--size) ΠΈ Ρ‚ΠΈΠΏ инстансов, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Π€Π»Π°Π³ --capability-iamΒ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ рСсурсы IAM.

Π’ послСднСм шагС ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„Π°ΠΉΠ» docker-compose.yml. ВрСбуСтся нСбольшоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ вмСсто ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм копию ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π΅ aws-compose.yml. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ этого Ρ„Π°ΠΉΠ»Π°Β (послС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ):

es:
  image: elasticsearch
  cpu_shares: 100
  mem_limit: 262144000
web:
  image: prakhar1989/foodtrucks-web
  cpu_shares: 100
  mem_limit: 262144000
  ports:
    - "80:5000"
  links:
    - es

    

ЕдинствСнныС отличия ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°Β docker-compose.yml это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β mem_limit ΠΈ cpu_shares для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΡƒΠ±Ρ€Π°Π»ΠΈ versionΒ ΠΈ services, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ AWS Π΅Ρ‰Π΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ 2 Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Compose. Π’Π°ΠΊ ΠΊΠ°ΠΊ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° инстансах Ρ‚ΠΈΠΏΠ° t2.micro, ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ 250 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ памяти. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π° Docker Hub. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этого пособия, ecs-cliΒ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ build. Но Docker Compose ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΅Π΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

$ docker push prakhar1989/foodtrucks-web

ΠšΡ€Π°ΡΠΎΡ‚Π°! Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Ρ‚ Π΄Π΅ΠΏΠ»ΠΎΠΉ Π½Π° ECS!

$ ecs-cli compose --file aws-compose.yml up
INFO[0000] Using ECS task definition                     TaskDefinition=ecscompose-foodtrucks:2
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es
INFO[0000] Starting container...                         container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0000] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0036] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0048] Describe ECS container status                 container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=PENDING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/web desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2
INFO[0060] Started container...                          container=845e2368-170d-44a7-bf9f-84c7fcd9ae29/es desiredStatus=RUNNING lastStatus=RUNNING taskDefinition=ecscompose-foodtrucks:2

Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π²Ρ‹Π²ΠΎΠ΄ Docker Compose β€” Π½Π΅ совпадСниС. АргумСнт --file ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для пСрСопрСдСлСния Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (docker-compose.yml). Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ строку desiredStatus=RUNNING lastStatus=RUNNING Π² самом ΠΊΠΎΠ½Ρ†Π΅.

ΠšΡ€ΡƒΡ‚ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ. Как ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ?

ecs-cli ps
Name                                      State    Ports                     TaskDefinition
845e2368-170d-44a7-bf9f-84c7fcd9ae29/web  RUNNING  54.86.14.14:80->5000/tcp  ecscompose-foodtrucks:2
845e2368-170d-44a7-bf9f-84c7fcd9ae29/es   RUNNING                            ecscompose-foodtrucks:2

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅Β http://54.86.14.14Β Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅, ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Food Trucks Π²ΠΎ всСй своСй ΠΆΠ΅Π»Ρ‚ΠΎ-Ρ‡Π΅Ρ€Π½ΠΎΠΉ красС! Π—Π°ΠΎΠ΄Π½ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° консоль AWS ECS.

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π» создан ECS-кластСр ‘foodtrucks’, ΠΈ Π² Π½Π΅ΠΌ выполняСтся ΠΎΠ΄Π½Π° Π·Π°Π΄Π°Ρ‡Π° с двумя инстансами. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΏΠΎΠΊΠΎΠ²Ρ‹Ρ€ΡΡ‚ΡŒΡΡ Π² этой консоли ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π΅Π΅ части ΠΈ ΠΎΠΏΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ ΠΈ всС. ВсСго нСсколько ΠΊΠΎΠΌΠ°Π½Π΄ β€” ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° AWS!

4.0 Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ. ПослС Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ, Π½ΠΎ интСрСсного пособия Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²! Если Π²Ρ‹ слСдовали пособию Π΄ΠΎ самого ΠΊΠΎΠ½Ρ†Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ заслуТСнно Π³ΠΎΡ€Π΄ΠΈΡ‚ΡŒΡΡ собой. Π’Ρ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ статичСскиС ΠΈ динамичСскиС Π²Π΅Π±-сайты ΠΈ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠΏΡ‹Ρ‚ дСплоя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠΎ.

НадСюсь, ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ этого руководства ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Π΅Π΅ Π² своих способностях ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ с сСрвСрами. Когда Ρƒ вас появится новая идСя для сайта ΠΈΠ»ΠΈ прилоТСния, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ смоТСтС ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ людям с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ усилиями.

4.1 Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

Π’Π°ΡˆΠ΅ ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ Π² ΠΌΠΈΡ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ. МоСй Ρ†Π΅Π»ΡŒΡŽ Π² этом руководствС Π±Ρ‹Π»ΠΎ Π½Π°Π³ΡƒΠ»ΡΡ‚ΡŒ ваш Π°ΠΏΠΏΠ΅Ρ‚ΠΈΡ‚ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΎΡ‰ΡŒ Π”ΠΎΠΊΠ΅Ρ€Π°. Π’ ΠΌΠΈΡ€Π΅ соврСмСнных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ слоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ руководства Π²Ρ€ΠΎΠ΄Π΅ этого ΠΏΡ€ΠΈΠ·Π²Π°Π½Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ Π²Π°ΠΌ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пособиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° я Ρ‚ΠΎΠ»ΡŒΠΊΠΎ знакомился с Π”ΠΎΠΊΠ΅Ρ€ΠΎΠΌ сам. НадСюсь, Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ вас, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° прогрСссом Π² этом области Π½Π΅ со стороны, Π° с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π·Π½Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

НиТС β€” список Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… рСсурсов. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π”ΠΎΠΊΠ΅Ρ€ Π² вашСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. И Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ β€” ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²Ρƒ.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

Π£Π΄Π°Ρ‡ΠΈ, ΡŽΠ½Ρ‹ΠΉ ΠΏΠ°Π΄Π°Π²Π°Π½!

4.2 Π€ΠΈΠ΄Π±Π΅ΠΊ Π°Π²Ρ‚ΠΎΡ€Ρƒ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ моя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ вопросы. Π’Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ пособиС? Оно показалось Π²Π°ΠΌ Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ Π²Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ?

ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΌΠ½Π΅ (Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π° [email protected]Β ΠΈΠ»ΠΈ просто создайтС issue. Π― Π΅ΡΡ‚ΡŒ Π²Β Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΡƒΠ΄Π°.

(Автор ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ пособия Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΠΎ-английски, β€” ΠΏΡ€ΠΈΠΌ. ΠΏΠ΅Ρ€.).

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ваши ΠΎΡ‚Π·Ρ‹Π²Ρ‹. НС ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΌΠΎΠΈ ошибки. Π― Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это пособиС стало ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… стартовых руководств Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅. Π£ мСня Π½Π΅ получится это Π±Π΅Π· вашСй ΠΏΠΎΠΌΠΎΡ‰ΠΈ.

Настройка ΠΈ установка Docker Π½Π° Centos 7

Π’ инструкции описан процСсс установки ΠΈ использования Docker Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сСрвСрах ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Centos 7.

Π§Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?

Docker — это ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ систСмных администраторов, прСдназначСнная для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, развСртывания ΠΈ запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°. ИспользованиС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для развСртывания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Linux называСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. ИдСя ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ изоляции ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π·Π°Ρ€ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ практичСски сразу послС появлСния ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² послСдниС Π³ΠΎΠ΄Ρ‹ ΠΈΡ… использованиС ΡˆΠΈΡ€ΠΎΠΊΠΎ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΠ»ΠΎΡΡŒ, благодаря высоким Ρ‚Π΅ΠΌΠΏΠ°ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π²ΠΎ всСм ΠΌΠΈΡ€Π΅.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Docker Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ отличия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π· ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

  • ΠΎΠ±Ρ€Π°Π· прСдставляСт собой исполняСмый ΠΏΠ°ΠΊΠ΅Ρ‚, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для запуска прилоТСния — ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, срСду выполнСния, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ;
  • ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ запускаСтся ΠΈΠ· ΠΎΠ±Ρ€Π°Π·Π° ΠΈ являСтся Π΅Π³ΠΎ экзСмпляром, Ρ‚.Π΅. ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ нСсколько ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

О ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ написано Π² нашСм Π±Π»ΠΎΠ³Π΅: Π’ Ρ‡Ρ‘ΠΌ ΡΡƒΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ?

ΠžΠ±Ρ€Π°Π· являСтся шаблоном доступным Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. ΠžΠ±Ρ€Π°Π· Docker ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ дистрибутивом Linux ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ сконфигурированным ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ обСспСчСниСм, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊ запуску. ВсС зависит ΠΎΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° — Dockerfile.

Dockerfile — это тСкстовый Ρ„Π°ΠΉΠ» с инструкциями, написанными Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, понятном Π΄Π΅ΠΌΠΎΠ½Ρƒ Docker. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный ΠΎΠ±Ρ€Π°Π·, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой Dockerfile. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Dockerfile ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ сборку для создания ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π΄Π΅ΠΌΠΎΠ½ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Docker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт тяТСлыС Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ созданию, запуску ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ послС получСния ΠΊΠΎΠΌΠ°Π½Π΄ ΠΈΠ· Π”ΠΎΠΊΠ΅Ρ€-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС запуск прилоТСния Π² Docker выглядит Ρ‚Π°ΠΊ:

  1. ВыбираСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ трСбуСтся Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.
  2. Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Dockerfile описываСтся это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ срСда выполнСния согласно синтаксису.
  3. ЀормируСтся ΠΎΠ±Ρ€Π°Π· прилоТСния, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой Π΅Π΄ΠΈΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΈ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ прилоТСния, ΠΈ всС Π΅Π³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ общСсистСмных), Ρ‚.Π΅. Π² дальнСйшСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.
  4. ЗапускаСтся Docker с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ΠΈ.

Установка

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго слСдуСт ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Π±Π°Π·Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²:

sudo yum check-update

Для установки самой послСднСй ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии Docker Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡŽ Docker. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ПО ΠΈ установит Π΅Π³ΠΎ:

curl -fsSL https://get.docker.com/ | sh

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Docker Π½Π΅ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ послС установки Π³Ρ€ΡƒΠΏΠΏΡƒ docker:

sudo usermod -aG docker <имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>

НапримСр:

sudo usermod -aG docker cloud

ЗапуститС Π΄Π΅ΠΌΠΎΠ½ Docker послС окончания установки:

sudo systemctl start docker

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΌΠΎΠ½ стартовал Π±Π΅Π· ошибок ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ:

sudo systemctl status docker

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ сообщСниС:


 docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2018-04-26 14:06:06 MSK; 1min 56s ago
     Docs: https://docs.docker.com
 Main PID: 1601 (dockerd)
    Tasks: 16
   Memory: 40.0M
   CGroup: /system.slice/docker.service
           β”œβ”€1601 /usr/bin/dockerd
           └─1605 docker-containerd --config /var/run/docker/containerd/conta...
...

Π Π°Π±ΠΎΡ‚Π° с ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ Π² Docker

Команда docker ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис, Π³Π΄Π΅ послС названия ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСчислСны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

docker <option> <command> <arguments>

Π§Ρ‚ΠΎΠ±Ρ‹ вывСсти Π½Π° экран всС доступныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΈΡ…, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker:

docker

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· рССстра Docker Hub, Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Docker. Π›ΡŽΠ±ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹ Π½Π° Docker Hub, поэтому Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π‘Π£Π‘Π” ΠΈ дистрибутивов Linux ΠΈΠΌΠ΅ΡŽΡ‚ свои ΠΎΠ±Ρ€Π°Π·Ρ‹ Π½Π° Docker Hub.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΈΠ· Docker Hub, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

docker run hello-world

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ сообщСниС:


Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9bb5a5d4561a: Pull complete
Digest: sha256:f5233545e43561214ca4891fd1157e1c3c563316ed8e237750d59bde73361e77
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

docker search <имя>

НапримСр, для поиска ΠΎΠ±Ρ€Π°Π·Π° nginx ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

docker search nginx

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ появится список доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:


NAME                                                   DESCRIPTION                                     STARS        OFFICIAL            AUTOMATED
nginx                                               Official build of Nginx.                        	8341           [OK]
jwilder/nginx-proxy                                 Automated Nginx reverse proxy for docker con…       1328                               [OK]
richarvey/nginx-php-fpm                             Container running Nginx + PHP-FPM capable of…       547                                [OK]
jrcs/letsencrypt-nginx-proxy-companion              LetsEncrypt container to use with nginx as p…       364                                [OK]
kong                                                Open-source Microservice & API Management la…       184            [OK]
webdevops/php-nginx                                 Nginx with PHP-FPM                                  102                                [OK]

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

docker pull <имя>

НапримСр:

docker pull nginx

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ процСсс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:


Using default tag: latest
latest: Pulling from library/nginx
f2aa67a397c4: Downloading [===============>           ]   7.13MB/22.5MB
3c091c23e29d: Downloading [================>          ]  7.091MB/22.11MB
4a99993b8636: Download complete

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π· Π±Ρ‹Π» Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ Π½Π° ваш сСрвСр, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ run:

docker run <имя>

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ images:

docker images

ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡΡ список:


REPOSITORY         TAG           IMAGE ID            CREATED             SIZE
nginx              latest        ae513a47849c        8 days ago          109MB
hello-world        latest        e38bc07ac18e        3 weeks ago         1.85kB

Π Π°Π±ΠΎΡ‚Π° с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π² Docker

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΈΠΌΠ΅Π½Π΅ΠΌ example Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π° image, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

docker run --name <example> -d <image>

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: комбинация ΠΊΠ»ΡŽΡ‡Π΅ΠΉ -i ΠΈ -t Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ доступ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ shell Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° example Π½Π° основС ΠΎΠ±Ρ€Π°Π·Π° nginx:

docker run --name example -d nginx

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ ps:

docker ps

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΊΠ»ΡŽΡ‡ -l позволяСт ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹.

ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡΡ список:


CONTAINER ID      IMAGE     COMMAND                  CREATED             STATUS             PORTS       NAMES
b8f970efcc91      nginx     "nginx -g 'daemon of…"   15 seconds ago      Up 13 seconds      80/tcp      example

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ созданный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

docker container start <имя_или_id>

НапримСр:

docker container start example

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΉΡ‚ΠΈ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

sudo docker exec -i -t <имя_или_id> /bin/bash

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

sudo docker exec -i -t b8f970efcc91 /bin/bash

root@b8f970efcc91:/data#

Для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ exit.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ созданный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

docker container stop <имя_или_id>

НапримСр:

docker container stop example

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ rm:

docker rm -f <имя_или_id>

НапримСр:

docker rm -f example

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠΊΠ»ΡŽΡ‡ -f позволяСт ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π±Π΅Π· ΠΈΡ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ остановки.

Для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° запустим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ nginx Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΠΎΡ€Ρ‚Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 80, ΠΈ убСдимся, Ρ‡Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. НС Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ firewall ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ Π½Π° сСрвСрС:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables-save

ЗапускаСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΈΠΌΠ΅Π½Π΅ΠΌ example:

docker run --name example -d -p 80:80 nginx

Π’ адрСсной строкС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ адрСсу вашСго сСрвСра с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ€Ρ‚Π°, Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Β 

P. S. Π”Ρ€ΡƒΠ³ΠΈΠ΅ инструкции:


ΠžΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ инструкциями Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм сайтС. А Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ услугу β€” ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Π½ΠΈΠΆΠ΅.




Бпасибо Π·Π° Π’Π°ΡˆΡƒ ΠΎΡ†Π΅Π½ΠΊΡƒ!
К соТалСнию, ΠΏΡ€ΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ·ΠΆΠ΅

Как Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ своС Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π² Ubuntu 20.04

Π’ Π΄Π°Π½Π½ΠΎΠΌ руководствС ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠΌ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ своё собствСнноС Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° сСрвСрС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ubuntu 20.04.

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Docker прСдставляСт ΠΈΠ· сСбя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ управляСт Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΈ доставкой ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker. Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ врСмя сборки для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ². ΠžΠ±Ρ€Π°Π·Ρ‹ Docker ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ созданиС ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ срСды выполнСния благодаря Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ созданиС ΠΎΠ±Ρ€Π°Π·Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Ρ‚Ρ€Π°Ρ‚. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° сТатый ΠΎΠ±Ρ€Π°Π·, содСрТащий всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ зависимости ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для использования Docker.

Π£ Docker Π΅ΡΡ‚ΡŒ бСсплатноС общСдоступноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Docker Hub, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΏΠ°Ρ€ΠΊΠΎΠ²Π°Ρ‚ΡŒ ваши ΠΎΠ±Ρ€Π°Π·Ρ‹ Docker. Π’ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ всСгда Π΅ΡΡ‚ΡŒ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ свои ΠΎΠ±Ρ€Π°Π·Ρ‹ Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ общСдоступны. ΠžΠ±Ρ€Π°Π·Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ содСрТат вСсь Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для запуска ΠΊΠΎΠ΄, поэтому использованиС собствСнного рССстра ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ для хранСния ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Docker Compose, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ запуска Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker. А Ρ‚Π°ΠΊΠΆΠ΅, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π±-сСрвСр Nginx для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° сСрвСра ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π² Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Docker. Π˜Π·ΡƒΡ‡ΠΈΠ² содСрТимоС Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства, Π²Ρ‹ смоТСтС ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Docker Π² своё Π»ΠΈΡ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅, бСзопасно ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΅Π³ΠΎ с ΡƒΠ΄Π°Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ сСрвСра.

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° сСрвСров

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΌΠ°Π½ΡƒΠ°Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π° сСрвСра. Один ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС хоста для вашСго ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ³ΠΎ Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ – Π² качСствС сСрвСра-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Оба VPS Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Ubuntu 20.04. ВсС Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° сСрвСрах ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ ΡƒΡ‡Ρ‘Ρ‚Π½ΠΎΠΉ записью, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ root-ΠΎΠΌ, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ sudo. Для настройки мСТсСтСвого экрана Π½Π° сСрвСрах ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс UFW.

Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² качСствС Π²Π΅Π±-сСрвСра ΠΌΡ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Nginx, Ρ‚ΠΎ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Ρ‘ΠΌ ΠΊ Π΅Π³ΠΎ настройкС. ДСйствия ΠΏΠΎ настройкС Nginx Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ произвСсти Π½Π° сСрвСрС, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅ΠΌ Π² качСствС хоста для нашСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Nginx:

$ sudo apt update
$ sudo apt install nginx

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Nginx Π² список ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, доступ для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½ Π² нашСм брандмауэрС, ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ статус слуТбы Nginx:

$ sudo ufw allow 'Nginx HTTP'
$ systemctl status nginx

Если сСрвис Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π²Π΅Π±-интСрфСйс. Для Ρ‡Π΅Π³ΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ IP-адрСс вашСго сСрвСра-хоста:

Π”Π°Π»Π΅Π΅, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ хост для вашСго Π΄ΠΎΠΌΠ΅Π½Π°. Π’ нашСм ΠΌΠ°Π½ΡƒΠ°Π»Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½ my-domain.host. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ А-запись Π΄ΠΎΠΌΠ΅Π½Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ дальнСйшиС дСйствия, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ IP-адрСсу вашСго сСрвСра-хоста.

Π˜Ρ‚Π°ΠΊ, создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для вашСго сайта ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²Π°:

$ sudo mkdir -p /var/www/my-domain.host/html
$ sudo chown -R $USER:$USER /var/www/my-domain.host/html
$ sudo chmod -R 755 /var/www/my-domain.host

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² созданном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ создайтС Ρ„Π°ΠΉΠ» страницы сайта index.html:

$ sudo nano /var/www/my-domain.host/html/index.html

НаполнитС Π΅Π³ΠΎ содСрТимым:

<html>
   <head>
      <title>
         Domain on Nginx
      </title>
   </head>
   <body>
      <h2>
         Connection to my-domain.host is created successfully!!!
      </h2>
   </body>
</html>

Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ», сохранив измСнСния (Ctrl+X, послС Ρ‡Π΅Π³ΠΎ Y ΠΈ Enter).

Π’ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /etc/nginx/sites-available/ создайтС Ρ„Π°ΠΉΠ» my-domain.host:

$ sudo nano /etc/nginx/sites-available/my-domain.host

Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

server
   {
      listen 80;
      listen [::]:80;
      root /var/www/my-domain.host/html;
      index index.html index.htm index.nginx-debian.html;
      server_name my-domain.host www.my-domain.host;
      location /
         {
            try_files $uri $uri/ =404;
         }
   }

Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с сохранСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ создайтС ссылку Π² /etc/nginx/sites-enabled/:

$ sudo ln -s /etc/nginx/sites-available/my-domain.host /etc/nginx/sites-enabled/

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» /etc/nginx/nginx.conf:

$ sudo nano /etc/nginx/nginx.conf

Π’ этом Ρ„Π°ΠΉΠ»Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строку, которая содСрТит server_names_hash_bucket_size.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ коррСктности синтаксиса Nginx Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅:

$ sudo nginx -t

Π”ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ:

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚Π΅ Nginx:

$ sudo systemctl restart nginx

ПослС этого ваш Π΄ΠΎΠΌΠ΅Π½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Ρ‚ΡŒ доступным ΠΏΠΎ своСму Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ:

И Π½Π°ΠΌ останСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚ всСго Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° с ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° HTTP Π½Π° HTTPS. ΠœΡ‹ осущСствим это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π° сСртификации Let’s Encrypt.

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚ snap:

$ sudo apt install snapd

Π—Π°Ρ‚Π΅ΠΌ с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ проинсталлируйтС Certbot:

$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Π”Π°Π»Π΅Π΅, Π² брандмауэрС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTPS, Π·Π°ΠΊΡ€Ρ‹Π² Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΏΠΎ HTTP:

$ sudo ufw allow 'Nginx Full'
$ sudo ufw delete allow 'Nginx HTTP'
$ sudo ufw status

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Certbot с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ»Π°Π³ΠΈΠ½Π° nginx для указания Π΄ΠΎΠΌΠ΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСртификаты:

$ sudo certbot --nginx

Π—Π΄Π΅ΡΡŒ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свой E-mail, ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с прСдоставляСмыми условиями ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ трСбуСтся Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» HTTPS.

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Π΄ΠΎΠΌΠ΅Π½Ρƒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ:

Π”Π°Π»Π΅Π΅, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ с настройкС Docker.

Установка Docker

ΠŸΠ°ΠΊΠ΅Ρ‚ Docker Π±ΡƒΠ΄Π΅ΠΌ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория Docker. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ источник ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΊΠ»ΡŽΡ‡ GPG ΠΎΡ‚ Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌΠΈ Π² валидности Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. ПослС Ρ‡Π΅Π³ΠΎ установим ΠΏΠ°ΠΊΠ΅Ρ‚.

ΠŸΡ€ΠΎΠΈΠ½ΡΡ‚Π°Π»Π»ΠΈΡ€ΡƒΠΉΡ‚Π΅ нСсколько Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят установщику ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTPS:

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² систСму ΠΊΠ»ΡŽΡ‡ GPG для ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория Docker:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Π”Π°Π»Π΅Π΅, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Docker ΠΈ запуститС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ:

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
$ sudo apt update

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ дальнСйшая установка Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΠΈΠ· рСпозитория Docker, Π° Π½Π΅ ΠΈΠ· Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½ΠΎΠ³ΠΎ рСпозитория Ubuntu:

$ apt-cache policy docker-ce

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ docker-ce Π½Π΅ установлСн, Π½ΠΎ Π³ΠΎΡ‚ΠΎΠ² ΠΊ установкС ΠΈΠ· рСпозитория Ubuntu 20.04.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, запуститС установку Docker:

$ sudo apt install docker-ce

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Docker установлСн, слуТба Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° ΠΈ процСсс доступСн для старта ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅:

$ sudo systemctl status docker

Π’Π°ΠΊΠΆΠ΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ запуск срСд выполнСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с нСсколькими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎ – Docker Compose. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΡΠ°ΠΌΡƒΡŽ ΡΠ²Π΅ΠΆΡƒΡŽ Docker Compose, посмотритС Π΅Ρ‘ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° страницС ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ рСпозитория Github. НабСритС Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ строкС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ исполняСмый Ρ„Π°ΠΉΠ»:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

ПослС этого Π·Π°Π΄Π°ΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²Π°. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ docker-compose исполняСмым Ρ„Π°ΠΉΠ»ΠΎΠΌ:

$ sudo chmod +x /usr/local/bin/docker-compose

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Ρ€ΡΠΈΡŽ установлСнного ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

$ docker-compose --version

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Π³ΠΎΡ‚ΠΎΠ²ΠΎ для установки ΠΈ настройки Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

Установка ΠΈ настройка Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС Docker ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС ΠΈ тСстируСтС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹. Но для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΡ… нСсколько ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΎΠ½Π° оказываСтся ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠΉ.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker Compose Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» .yml для настройки ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ для взаимодСйствия Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker-compose ΠΊΠ°ΠΊ инструмСнт ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ всСм ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ управлСния ΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ.

Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ само ΠΏΠΎ сСбС являСтся ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ с нСсколькими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ, поэтому для управлСния ΠΈΠΌ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Docker Compose. Для запуска Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» docker-compose.yml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Ρ‚Π°ΠΊ ΠΈ располоТСниС Π½Π° дискС, Π³Π΄Π΅ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

На сСрвСрС-хостС создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ docker-registry для хранСния настроСк ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π½Π΅Π³ΠΎ:

$ mkdir ~/docker-registry
$ cd ~/docker-registry

Π’Π°ΠΌ создайтС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ data, Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΠ±Ρ€Π°Π·Ρ‹:

$ mkdir data

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» docker-compose.yml:

$ sudo nano docker-compose.yml

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опрСдСлят основной экзСмпляр Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°:

version: '3'

services:
  registry:
    image: registry:2
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./data:/data

Π—Π΄Π΅ΡΡŒ:

  • registry – Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΉ слуТбы;
  • registry:2 – ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π° Π² registry вСрсии 2;
  • ports – сопоставлСниС ΠΏΠΎΡ€Ρ‚Π° 5000 Π½Π° хостС ΠΏΠΎΡ€Ρ‚Ρƒ 5000 Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅;
  • REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY – пСрСмСнная, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…;
  • volumes – сопоставлСниС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° /data Π½Π° сСрвСрС-хостС ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ /data Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ запуститС ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

$ docker-compose up

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ Π΅Π³ΠΎ зависимости Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° сообщСниС No HTTP secret provided. К Π½Π΅ΠΌΡƒ ΠΌΡ‹ Π΅Ρ‰Ρ‘ вСрнёмся Π² Π΄Π°Π½Π½ΠΎΠΌ руководствС. ПослСдняя строка содСрТит сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5000.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+C.

Настройка пСрСадрСсации ΠΏΠΎΡ€Ρ‚ΠΎΠ² Nginx

Π Π°Π½Π΅Π΅, ΠΌΡ‹ ΡƒΠΆΠ΅ настроили доступ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π΄ΠΎΠΌΠ΅Π½Ρƒ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ HTTPS. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±ΡƒΠ΄Π΅Ρ‚ всСго лишь Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Nginx Π² части пСрСнаправлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΎΡ‚ Π΄ΠΎΠΌΠ΅Π½Π° ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ для рСдактирования созданный Ρ€Π°Π½Π΅Π΅ Ρ„Π°ΠΉΠ», содСрТащий настройки вашСго сСрвСра:

$ sudo nano /etc/nginx/sites-available/my-domain.host

НайдитС Ρ‚Π°ΠΌ Π±Π»ΠΎΠΊ location:

НСобходимо ΠΏΠ΅Ρ€Π΅Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π½Π° ΠΏΠΎΡ€Ρ‚ 5000, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ. Π’Π°ΠΊΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΊ запросам, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ сСрвСра прСдоставляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ самом запросС. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ содСрТимоС Π±Π»ΠΎΠΊΠ° location ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ строками:

location / {
    # Do not allow connections from docker 1.5 and earlier
    # docker pre-1.6.0 did not properly set the user agent on ping, catch "Go *" user agents
    if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
      return 404;
    }

    proxy_pass                          http://localhost:5000;
    proxy_set_header  Host              $http_host;   # required for docker client's sake
    proxy_set_header  X-Real-IP         $remote_addr; # pass on real client's IP
    proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
    proxy_read_timeout                  900;
}

Π‘Π»ΠΎΠΊ if провСряСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π°Π³Π΅Π½Ρ‚ запроса, Π²Π΅Ρ€ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Docker Π²Ρ‹ΡˆΠ΅ 1.5 ΠΈ опрСдСляСт, Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Go, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пытаСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ. Для примСнСния Π½ΠΎΠ²Ρ‹Ρ… настроСк пСрСзапуститС Nginx:

$ sudo systemctl restart nginx

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Nginx ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ пСрСнаправляСт Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° Π½Π° ΠΏΠΎΡ€Ρ‚Ρƒ 5000, запуститС Π΅Π³ΠΎ:

$ cd ~/docker-registry
$ docker-compose up

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅:

https://my-domain.host/v2

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON:

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΆΠ΅ Π²Ρ‹ смоТСтС Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² послСднСй строкС запрос GET Π±Ρ‹Π» сдСлан Π² /v2/. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ запрос ΠΈΠ· своСго Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ сдСлали, ΠΈ Π²Π΅Ρ€Π½ΡƒΠ» ΠΎΡ‚Π²Π΅Ρ‚ {}. Код http.response.status=200 Π² послСдних строках ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ справился с запросом ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+C.

Настройка Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ

Nginx позволяСт Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ HTTP для сайтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Nginx управляСт. ИмСнно это Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ограничСния доступа ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ Docker. Π§Ρ‚ΠΎΠ±Ρ‹ этого Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ htpasswd ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ-ΠΏΠ°Ρ€ΠΎΠ»ΡŒ.

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Ρƒ htpasswd Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, установив ΠΏΠ°ΠΊΠ΅Ρ‚ apache2-utils:

$ sudo apt install apache2-utils

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подлинности с ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² ~/docker-registry/auth/:

$ mkdir ~/docker-registry/auth
$ cd ~/docker-registry/auth

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС создайтС своСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π·Π°ΠΌΠ΅Π½ΠΈΠ² user1 Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ своё имя ΡƒΡ‡Ρ‘Ρ‚Π½ΠΎΠΉ записи. Π—Π΄Π΅ΡΡŒ, опция -B Π½ΡƒΠΆΠ½Π° для примСнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° bcrypt:

$ htpasswd -Bc registry.password user1

Π”Π°Π»Π΅Π΅, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для создаваСмого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ учётная запись user1 ΠΈ Π΅Ρ‘ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² registry.password.

Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ Π±Π΅Π· использования Ρ„Π»Π°Π³Π° -c, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°:

$ htpasswd -B registry.password user2

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ созданный Ρ„Π°ΠΉΠ» Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Для этого ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π΅Π³ΠΎ:

$ sudo nano ~/docker-registry/docker-compose.yml

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ строки:

version: '3'

services:
  registry:
    image: registry:2
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./auth:/auth
      - ./data:/data

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ HTTP, ΠΈ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΏΡƒΡ‚ΡŒ ΠΊ созданному Ρ„Π°ΠΉΠ»Ρƒ htpasswd. Для REGISTRY_AUTH ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ htpasswd, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ схСму. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ REGISTRY_AUTH_HTPASSWD_PATH содСрТит ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ REGISTRY_AUTH_HTPASSWD_REALM ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ имя области htpasswd.

Π’Π°ΠΊΠΆΠ΅, ΠΌΡ‹ смонтировали ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ./auth/, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» доступным Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» сохранив внСсённыС измСнСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ:

$ cd ~/docker-registry
$ docker-compose up

ПослС этого, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ страницу Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ваш Π΄ΠΎΠΌΠ΅Π½. БистСма Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ вас ввСсти имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ:

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ, Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON:

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ подлинности ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ доступ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ.

Как ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π²Ρ‹Ρ…ΠΎΠ΄ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· Ctrl+C.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ вашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ, ΠΈ доступ ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подлинности. Π”Π°Π»Π΅Π΅, ΠΌΡ‹ настроим Π΅Π³ΠΎ Π½Π° запуск Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΏΡ€ΠΈ этом Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ устойчиво ΠΊ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡΡΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· автоматичСски.

Запуск Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠ°ΠΊ слуТбы

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° запускался ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы ΠΈΠ»ΠΈ послС Π΅Ρ‘ сбоя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Docker Compose всСгда ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

ΠžΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» docker-compose.yml:

$ sudo nano ~/docker-registry/docker-compose.yml

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Ρ„Π°ΠΉΠ» Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ строку:

version: '3'

services:
  registry:
    restart: always
    image: registry:2
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data
    volumes:
      - ./auth:/auth
      - ./data:/data

Настройка restart Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΈΡ‚ пСрСзапуск систСмы. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ измСнСния ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ».

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ, запуститС вашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ°ΠΊ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΉ процСсс ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΡ†ΠΈΠΈ -d:

$ docker-compose up -d

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° вашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, ΠΈ поэтому, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ спокойно Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ сСссию SSH, ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ сСрвСр. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π½Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта.

Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² для Nginx

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ нашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ смоТСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Ρ„Π°ΠΉΠ»ΠΎΠ² большого ΠΎΠ±ΡŠΡ‘ΠΌΠ°.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Nginx составляСт 1MB. Π­Ρ‚ΠΎΠ³ΠΎ явно Π½Π΅ достаточно для ΠΎΠ±Ρ€Π°Π·Π° Docker. Π§Ρ‚ΠΎΠ±Ρ‹ это ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ внСсти измСнСния Π² Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Nginx. Он располоТСн Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ /etc/nginx/. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π΅Π³ΠΎ для рСдактирования, Π½Π°Π±Ρ€Π°Π² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

$ cd /etc/nginx
$ sudo nano nginx.conf

НайдитС Ρ‚Π°ΠΌ ΡΠ΅ΠΊΡ†ΠΈΡŽ http ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² Π½Π΅Ρ‘ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ строку:

http {
        ##
        # Basic Settings
        ##
        client_max_body_size 16384m;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° client_max_body_size Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ установлСно Π² 16384 MB. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Ρ€Π°Π²Π½ΠΎ 16GB.

Π—Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с сохранСниСм ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ пСрСзапуститС Nginx:

$ sudo systemctl restart nginx

ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡ Π² Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

Настало врСмя ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π½Π° нашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ², ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ, Π² качСствС тСста, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ubuntu, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ с общСдоступного Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

ДСйствия ΠΏΠΎ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π·Π° Π² нашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° нашСм Π²Ρ‚ΠΎΡ€ΠΎΠΌ сСрвСрС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ сСрвСр-ΠΊΠ»ΠΈΠ΅Π½Ρ‚.

Для Π½Π°Ρ‡Π°Π»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° этом сСрвСрС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ полномочия sudo, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вашСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ docker:

$ sudo usermod -aG docker your-user

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ubuntu, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΅Π³ΠΎ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС вашСго сСрвСра-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅:

$ docker run -t -i ubuntu /bin/bash

ΠžΠΏΡ†ΠΈΠΈ -i ΠΈ -t ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ доступ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅, Π² ΠΊΠΎΡ€Π½Π΅ систСмы создайтС Ρ„Π°ΠΉΠ» my.IMAGE:

root@2b8dcf17a0db:/# touch /my.IMAGE

Π‘ΠΎΠ·Π΄Π°Π² Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ», ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. НаличиС этого Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ с Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ.

Π’Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ CNTL D, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

root@2b8dcf17a0db:/# exit

Π”Π°Π»Π΅Π΅, создайтС Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ внСсли измСнСния:

$ docker commit $(docker ps -lq) new-ubuntu-image

Новый ΠΎΠ±Ρ€Π°Π· Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступСн локально, ΠΈ, Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² вашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ:

$ docker login https://my-domain.host

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для получСния доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’ нашСм случаС, это Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΡ‡Ρ‘Ρ‚Π½ΠΎΠΉ записи user1.

Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ систСма Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ сообщСниС:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΠΈΡΡŒ, ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΡƒΠΉΡ‚Π΅ созданный ΠΎΠ±Ρ€Π°Π·:

$ docker tag new-ubuntu-image my-domain.host/new-ubuntu-image

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· Π² вашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅:

$ docker push my-domain.host/new-ubuntu-image

Π’Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π· Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ лишниС ΠΎΠ±Ρ€Π°Π·Ρ‹ ΡƒΠ΄Π°Π»ΠΈΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ вывСсти Π½Π° экран список локально доступных ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:

$ docker images

ΠœΡ‹ ΡƒΠ΄Π°Π»ΠΈΠΌ всС ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ubuntu:

$ docker rmi new-ubuntu-image
$ docker rmi my-domain.host/new-ubuntu-image

Если Π΅Ρ‰Ρ‘ Ρ€Π°Π· вывСсти список ΠΎΠ±Ρ€Π°Π·ΠΎΠ², Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² спискС остался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π· ubuntu:

$ docker images

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈ ΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΈ ΠΊΠ°ΠΊ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, ΠΏΡ€ΠΎΡˆΠ΅Π΄ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΈΠ· нашСго Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ Π½Π°Π±Ρ€Π°Π² Π½Π° вашСм сСрвСрС-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ docker login https://my-domain.host

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΌΠ΅Π½ своСго сСрвСра-хоста вмСсто my-domain.host.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΎΠ±Ρ€Π°Π·Π° new-ubuntu-image, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ docker pull my-domain.host/new-ubuntu-image

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π· загрузится, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для просмотра списка ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° сСрвСрС-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²:

$ docker images

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π· new-ubuntu-image снова присутствуСт Π½Π° сСрвСрС-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. Π—Π½Π°Ρ‡ΠΈΡ‚, ΠΊ Π½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ:

$ docker run -t -i my-domain.host/new-ubuntu-image

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ²ΡˆΠΈΡΡŒ, посмотритС содСрТимоС корня систСмы:

root@65c69421278c:/# ls -l

Π£Π²ΠΈΠ΄Π΅Π² Ρ„Π°ΠΉΠ» my.IMAGE, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ это – экзСмпляр ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ вносили ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΠ²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π² нашС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ exit, Π»ΠΈΠ±ΠΎ Π½Π°ΠΆΠ°Π² Ctrl+D.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΌ руководствС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ своё ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅ Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° сСрвСрС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Ubuntu 20.04. ΠœΡ‹ Π·Π°Ρ‰ΠΈΡ‚ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎΠΌΡƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ систСмы ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ подлинности ΡƒΡ‡Ρ‘Ρ‚Π½Ρ‹Ρ… записСй. А Ρ‚Π°ΠΊΠΆΠ΅, ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Docker, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈ снова Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½Π° сСрвСр, использовавшийся Π½Π°ΠΌΠΈ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ нашСго Docker Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°.

ΠžΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ ΠΈ настройка | ДокумСнтация Docker

ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя чтСния: 4 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ! ΠœΡ‹ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π°Π΄Ρ‹, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Docker.

Π­Ρ‚Π° страница содСрТит ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Docker. Π’ этом руководствС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ:

  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
  • ОбмСн изобраТСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker Hub
  • Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Docker с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…
  • Запуск ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker Compose

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… создания ΠΎΠ±Ρ€Π°Π·ΠΎΠ², Π² Ρ‚ΠΎΠΌ числС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ изобраТСния Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ уязвимостСй.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° информация ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с использованиСм вашСго любимого языка, см. Руководства ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… языков.

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΠΎ-пошаговоС руководство с DockerCon 2020.

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΈ установитС Docker

Π’ этом руководствС прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ установлСна ​​тСкущая вСрсия Docker.
машина. Если Ρƒ вас Π½Π΅ установлСн Docker, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Π½ΠΈΠΆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Docker:

Mac с Ρ‡ΠΈΠΏΠΎΠΌ Intel
Mac с Ρ‡ΠΈΠΏΠΎΠΌ Apple
Окна
Linux

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ ΠΏΠΎ установкС Docker Desktop см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Установка Docker Desktop Π½Π° Mac ΠΈ Установка Docker Desktop Π² Windows.

ΠΠ°Ρ‡Π°Ρ‚ΡŒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅

Если Π²Ρ‹ ΡƒΠΆΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с руководством, поздравляСм! Если Π½Π΅Ρ‚, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку ΠΈΠ»ΠΈ ΠΎΠΊΠ½ΠΎ bash ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

  $ docker run -d -p 80:80 docker / Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹
  

Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько Ρ„Π»Π°ΠΆΠΊΠΎΠ². Π’ΠΎΡ‚ Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π½ΠΈΡ…:

  • -d — Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅)
  • -p 80:80 — ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡ€Ρ‚ 80 хоста с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ 80 Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅
  • Π΄ΠΎΠΊΠ΅Ρ€ / Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ — ΠΎΠ±Ρ€Π°Π· для использования

НаконСчник

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ„Π»Π°Π³ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ:

  $ docker run -dp 80:80 docker / Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹
  

ПанСль ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Docker

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΉΡ‚ΠΈ слишком Π΄Π°Π»Π΅ΠΊΠΎ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ панСль Docker Dashboard, которая Π΄Π°Π΅Ρ‚
Π²Ρ‹ быстро просматриваСтС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. ПанСль ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Docker доступна для Mac ΠΈ Windows.
Он обСспСчиваСт быстрый доступ ΠΊ ΠΆΡƒΡ€Π½Π°Π»Π°ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, позволяСт Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ позволяСт
Π»Π΅Π³ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (остановка, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ‚. Π΄.)).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ управлСния, слСдуйтС инструкциям Π²
Руководство Docker Desktop. Если Π²Ρ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚Π΅ Π΄Π°ΡˆΠ±ΠΎΡ€Π΄
Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ это руководство Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ! НазваниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ( jolly_bouman Π½ΠΈΠΆΠ΅) — это
случайно созданноС имя. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ, скорСС всСго, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ имя.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€?

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запустили ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ? ΠŸΡ€ΠΎΡ‰Π΅ говоря, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ — это
просто Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ процСсс Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов
Π½Π° хост-машинС.Π­Ρ‚Π° изоляция ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ пространства ΠΈΠΌΠ΅Π½ ядра ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ
Π² линуксС Π΄Π°Π²Π½ΠΎ. Docker постарался ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ эти возмоТности доступными ΠΈ простыми Π² использовании.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² с нуля

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с нуля, Π›ΠΈΠ· Райс ΠΈΠ· Aqua Security
ΠΈΠΌΠ΅Π΅Ρ‚ фантастичСский Π΄ΠΎΠΊΠ»Π°Π΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° создаСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с нуля Π½Π° Go. Пока ΠΎΠ½Π° Π΄Π΅Π»Π°Π΅Ρ‚
простой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, этот Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€ Π½Π΅ касаСтся сСтСй, использования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы,
ΠΈ Π±ΠΎΠ»Π΅Π΅.Но ΠΎΠ½ Π΄Π°Π΅Ρ‚ фантастичСских Π³Π»ΡƒΠ±ΠΎΠΊΠΈΡ… свСдСний ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°?

ΠŸΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ изолированная файловая систСма. Π­Ρ‚Π° настраиваСмая файловая систСма прСдоставляСтся
с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° . ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Ρ€Π°Π· содСрТит Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС
Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для запуска прилоТСния — всС зависимости, конфигурация, скрипты, Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Ρ‚. Π΄.
ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ содСрТит Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊΡƒΡŽ ​​как ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды,
ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для запуска ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

ПозТС ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим изобраТСния, Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ² Ρ‚Π°ΠΊΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹, ΠΊΠ°ΠΊ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ слоСв, ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с chroot , ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΊΠ°ΠΊ ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΉ вСрсии chroot . Π’
файловая систСма просто бСрСтся ΠΈΠ· ΠΎΠ±Ρ€Π°Π·Π°. Но ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ·ΠΎΠ»ΡΡ†ΠΈΡŽ, Π° Π½Π΅
доступно ΠΏΡ€ΠΈ простом использовании chroot.

Бсылки CLI

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ всСм ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, см. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…:

Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, настройка, ориСнтация, быстрый старт, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Π΄ΠΎΠΊΠ΅Ρ€Π°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния | ДокумСнтация Docker

РасчСтноС врСмя чтСния: 5 ΠΌΠΈΠ½ΡƒΡ‚

Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части этого руководства ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с простым todo.
диспСтчСр списков, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ Π² Node.js. Если Π²Ρ‹ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Node.js,
Π½Π΅ волнуйся. Никакого Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JavaScript Π½Π΅ трСбуСтся.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ваша ΠΊΠΎΠΌΠ°Π½Π΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² довольно ΠΌΠ°Π»Π°, ΠΈ Π²Ρ‹ просто
созданиС прилоТСния, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ваш MVP (минимально ТизнСспособный ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚). Π’Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ
Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π½Π° Ρ‡Ρ‚ΠΎ способно Π±Π΅Π· нСобходимости
ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ для большой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Ρ‚. Π΄.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ смоТСм Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ прилоТСния Π½Π°
наша машина.Для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π²Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅ΠΏΠΎ. Но для этого ΡƒΡ€ΠΎΠΊΠ°
ΠΌΡ‹ создали ZIP-Ρ„Π°ΠΉΠ», содСрТащий ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

  1. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ содСрТимоС прилоТСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈΠ±ΠΎ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ вСсь ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π»ΠΈΠ±ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Π²ΠΈΠ΄Π΅ zip-Π°Ρ€Ρ…ΠΈΠ²Π° ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΏΠ°ΠΏΠΊΡƒ прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с

    .

  2. ПослС извлСчСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ свой Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½
    Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Visual Studio Code. Π’Π°ΠΌ слСдуСт
    см. ΠΏΠ°ΠΊΠ΅Ρ‚ .json ΠΈ Π΄Π²Π° ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° ( src ΠΈ spec ).

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° прилоТСния

Для создания прилоТСния Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Dockerfile . А
Dockerfile — это просто тСкстовый сцСнарий инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для
ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Если Π²Ρ‹ ΡƒΠΆΠ΅ создавали Dockerfiles Ρ€Π°Π½ΡŒΡˆΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅
ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ нСсколько нСдостатков Π² Dockerfile Π½ΠΈΠΆΠ΅. Но Π½Π΅ Π²ΠΎΠ»Π½ΡƒΠΉΡ‚Π΅ΡΡŒ. ΠœΡ‹ пройдСмся ΠΏΠΎ Π½ΠΈΠΌ.

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Dockerfile Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Ρ„Π°ΠΉΠ» package.json со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым.

      # синтаксис = docker / dockerfile: 1
    ОВ ΡƒΠ·Π»Π°: 12-альпийский
    Π—ΠΠŸΠ£Π‘Πš apk Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ --no-cache python g ++ make
    WORKDIR / ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
    ΠšΠžΠŸΠ˜Π ΠžΠ’ΠΠ’Π¬. .
    Установка пряТи RUN - производство
    CMD ["ΡƒΠ·Π΅Π»", "src / index.js"]
      

    Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» Dockerfile Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ .txt . НСкоторыС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° автоматичСски, ΠΈ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ошибкС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ шагС.

  2. Если Π²Ρ‹ Π΅Ρ‰Π΅ этого Π½Π΅ сдСлали, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ app с Dockerfile .Π’Π΅ΠΏΠ΅Ρ€ΡŒ создайтС ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker build .

      $ docker build -t Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹.
      

    Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° использовала Dockerfile для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’Ρ‹ моТСшь
    Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ «слоСв». Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ проинструктировали
    ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ с ΡƒΠ·Π»Π° : ΠΎΠ±Ρ€Π°Π· 12-alpine . Но, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹
    Π½Π° нашСй машинС этого Π½Π΅ Π±Ρ‹Π»ΠΎ, этот ΠΎΠ±Ρ€Π°Π· Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ.

    ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ, ΠΌΡ‹ скопировали Π΅Π³ΠΎ Π² нашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ использовали пряТу для
    ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ зависимости нашСго прилоТСния.Π”ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° CMD опрСдСляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    ΠΊΠΎΠΌΠ°Π½Π΄Π° для запуска ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· этого ΠΎΠ±Ρ€Π°Π·Π°.

    НаконСц, нашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ помСчаСтся Ρ„Π»Π°Π³ΠΎΠΌ -t . Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎΠ± этом просто ΠΊΠ°ΠΊ ΠΎΠ± ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ.
    для ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ изобраТСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π½Π΅Π³ΠΎ
    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ запускаСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

    МодСль . Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker build сообщаСт, Ρ‡Ρ‚ΠΎ Docker Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΊΠ°Ρ‚ΡŒ Dockerfile Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ прилоТСния

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Для этого ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запуск Π΄ΠΎΠΊΠ΅Ρ€Π°
ΠΊΠΎΠΌΠ°Π½Π΄Π° (ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅ это Ρ€Π°Π½Π΅Π΅?).

  1. ЗапуститС свой ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ docker run ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ имя изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹
    Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создано:

      $ docker run -dp 3000: 3000 Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹
      

    ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅ Ρ„Π»Π°Π³ΠΈ -d ΠΈ -p ? ΠœΡ‹ запускаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² Β«ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌΒ» Ρ€Π΅ΠΆΠΈΠΌΠ΅ (Π²
    background) ΠΈ созданиС сопоставлСния ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ 3000 хоста ΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠΌ 3000 ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.Π‘Π΅Π· сопоставлСния ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΌΡ‹ Π½Π΅ смогли Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ.

  2. Π§Π΅Ρ€Π΅Π· нСсколько сСкунд ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс http: // localhost: 3000.
    Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

  3. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° элСмСнта ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹ ΠΊΠ°ΠΊ
    Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты. Π’Π°Ρˆ интСрфСйс ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ элСмСнты Π² сСрвСрной части.
    Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ быстро ΠΈ Π»Π΅Π³ΠΊΠΎ, Π΄Π°?

На этом этапС Ρƒ вас Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ списка Π·Π°Π΄Π°Ρ‡ с нСсколькими элСмСнтами, ΠΈ всС ΠΎΠ½ΠΈ созданы Π²Π°ΠΌΠΈ.Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ внСсСм нСсколько ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нашими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.

Если Π²Ρ‹ быстро взглянСтС Π½Π° панСль Docker Dashboard, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ сСйчас Π·Π°ΠΏΡƒΡ‰Π΅Π½Ρ‹ Π΄Π²Π° Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
(это руководство ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ прилоТСния).

ΠžΠ±Π·ΠΎΡ€

Π’ этом ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ самыС основы построСния ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ создали
Dockerfile для этого. ПослС создания ΠΎΠ±Ρ€Π°Π·Π° ΠΌΡ‹ запустили ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ собираСмся внСсти измСнСния Π² нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
с Π½ΠΎΠ²Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.ΠŸΠΎΠΏΡƒΡ‚Π½ΠΎ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ Π΅Ρ‰Π΅ нСсколько ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄.

Π½Π°Ρ‡Π°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹, настройка, ориСнтация, ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Π΄ΠΎΠΊΠ΅Ρ€Π°

ΠžΠ±Π·ΠΎΡ€ Docker | ДокумСнтация Docker

РасчСтноС врСмя чтСния: 7 ΠΌΠΈΠ½ΡƒΡ‚

Docker — это открытая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, доставки ΠΈ запуска ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
Docker позволяСт ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ прилоТСния ΠΎΡ‚ инфраструктуры, Ρ‡Ρ‚ΠΎΠ±Ρ‹
Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ быстро Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС. Π‘ Docker Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ своСй инфраструктурой
Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ управляСтС своими прилоТСниями.Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π²ΡˆΠΈΡΡŒ прСимущСствами Docker
ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ для быстрой доставки, тСстирования ΠΈ развСртывания ΠΊΠΎΠ΄Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅
Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΠ΅ΠΆΠ΄Ρƒ написаниСм ΠΊΠΎΠ΄Π° ΠΈ Π΅Π³ΠΎ запуском Π² производствСнной срСдС.

ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Docker

Docker прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² слабо ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ
ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ называСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ хостС. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π»Π΅Π³ΠΊΠΈΠ΅ ΠΈ содСрТат
всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для запуска прилоТСния, поэтому Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ
Π² настоящСС врСмя установлСн Π½Π° хостС.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹,
ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ всС, с ΠΊΠ΅ΠΌ Π²Ρ‹ Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²
Ρ‚Π°ΠΊ ΠΆΠ΅.

Docker прСдоставляСт инструмСнты ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ для управлСния ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²:

  • Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².
  • ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ становится ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ для распространСния ΠΈ тСстирования вашСго прилоТСния.
  • Когда Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹, Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² производствСнной срСдС,
    ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ»ΠΈ оркСстрованный сСрвис.Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ,
    производствСнная срСда — это Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ†Π΅Π½Ρ‚Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ ΠΈΠ»ΠΈ гибридная
    ΠΈΠ· Π΄Π²ΡƒΡ….

Для Ρ‡Π΅Π³ΠΎ я ΠΌΠΎΠ³Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Docker?

Быстрая ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ доставка Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Docker ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, позволяя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π²
стандартизированныС срСды с использованиСм Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ваши прилоТСния
ΠΈ услуги. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ
Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ процСссы доставки (CI / CD).

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сцСнария:

  • Π’Π°ΡˆΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠΈΡˆΡƒΡ‚ ΠΊΠΎΠ΄ локально ΠΈ дСлятся своСй Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ
    с использованиСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker.
  • Они ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ свои прилоТСния Π² Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ срСду ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ
    Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€ΡƒΡ‡Π½Ρ‹Π΅ тСсты.
  • Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ находят ошибки, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… Π² срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.
    ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΈΡ… Π² тСстовой срСдС для тСстирования ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.
  • По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ тСстирования Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ исправлСниС Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΡƒ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ
    ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ срСду.

АдаптивноС Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Π°Ρ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°

Docker позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π»Π΅Π³ΠΊΠΎ пСрСносимыС Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π”ΠΎΠΊΠ΅Ρ€
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° локальном Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π½Π° физичСском ΠΈΠ»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ
ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρƒ поставщиков ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… услуг ΠΈΠ»ΠΈ Π² ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Ρ… срСдах.

ΠŸΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ Π»Π΅Π³ΠΊΠΈΠΉ вСс

Docker Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‚ динамичСскоС
ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΌΠΈ, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ прилоТСния ΠΈ сСрвисы ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.
бизнСс-потрСбности Π΄ΠΈΠΊΡ‚ΡƒΡŽΡ‚, практичСски Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠΈ

Docker Π»Π΅Π³ΠΊΠΈΠΉ ΠΈ быстрый. Π­Ρ‚ΠΎ ТизнСспособная ΠΈ экономичная Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°.
ΠΊ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ машинам Π½Π° основС Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ большС своих Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… рСсурсов
ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π΄ΠΎΡΡ‚ΠΈΠ³Π°Ρ‚ΡŒ Π²Π°ΡˆΠΈΡ… бизнСс-Ρ†Π΅Π»Π΅ΠΉ. Π”ΠΎΠΊΠ΅Ρ€ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для высокой плотности
срСдах ΠΈ для ΠΌΠ°Π»Ρ‹Ρ… ΠΈ срСдних Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ, Π³Π΄Π΅ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ большС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с
мСньшС рСсурсов.

АрхитСктура Docker

Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр.ΠšΠ»ΠΈΠ΅Π½Ρ‚ Docker общаСтся с
Docker Π΄Π΅ΠΌΠΎΠ½ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ‚ΡΠΆΠ΅Π»ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ сборкС, запуску ΠΈ
распространСниС Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Docker. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ Π΄Π΅ΠΌΠΎΠ½ Docker ΠΌΠΎΠΆΠ΅Ρ‚
Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ систСмС, ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Docker ΠΊ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡƒ Docker
Π΄Π΅ΠΌΠΎΠ½. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Docker ΠΈ Π΄Π΅ΠΌΠΎΠ½ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ REST API Ρ‡Π΅Ρ€Π΅Π· UNIX.
Ρ€ΠΎΠ·Π΅Ρ‚ΠΊΠΈ ΠΈΠ»ΠΈ сСтСвой интСрфСйс. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Docker — Docker Compose,
Ρ‡Ρ‚ΠΎ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с прилоТСниями, состоящими ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

Π”Π΅ΠΌΠΎΠ½ Docker

Π”Π΅ΠΌΠΎΠ½ Docker ( dockerd ) ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ запросы Docker API ΠΈ управляСт Docker
Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠ°ΠΊ изобраТСния, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, сСти ΠΈ Ρ‚ΠΎΠΌΠ°. Π”Π΅ΠΌΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚
ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π΄Π΅ΠΌΠΎΠ½Π°ΠΌΠΈ для управлСния слуТбами Docker.

ΠšΠ»ΠΈΠ΅Π½Ρ‚ Docker

ΠšΠ»ΠΈΠ΅Π½Ρ‚ Docker ( docker ) — это основной способ взаимодСйствия ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Docker.
с Π΄ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠ°ΠΊ docker run , ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт эти
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π½Π° dockerd , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡ… выполняСт.Команда docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚
Docker API. ΠšΠ»ΠΈΠ΅Π½Ρ‚ Docker ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ с ΠΎΠ΄Π½ΠΈΠΌ Π΄Π΅ΠΌΠΎΠ½ΠΎΠΌ.

РССстры Docker

РССстр Docker Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π·Ρ‹ Docker. Docker Hub — общСдоступный
рССстр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, Π° Docker настроСн Π½Π° поиск ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π²
Docker Hub ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’Ρ‹ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ свой собствСнный частный рССстр.

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker pull ΠΈΠ»ΠΈ docker run , Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹
Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΠ» ΠΈΠ· настроСнного рССстра.Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker push ,
ваш ΠΎΠ±Ρ€Π°Π· Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ваш настроСнный рССстр.

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Docker

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Docker, Π²Ρ‹ создаСтС ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, сСти,
Ρ‚ΠΎΠΌΠ°, ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» прСдставляСт собой ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…
этих ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ

ΠžΠ±Ρ€Π°Π· — это шаблон Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния с инструкциями ΠΏΠΎ созданию Docker
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Часто ΠΎΠ±Ρ€Π°Π· основан Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ
настройка.НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·, основанный Π½Π° ubuntu
ΠΎΠ±Ρ€Π°Π·, Π½ΠΎ устанавливаСт Π²Π΅Π±-сСрвСр Apache ΠΈ вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅
свСдСния ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для запуска вашСго прилоТСния.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ свои собствСнныС изобраТСния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ изобраТСния, созданныС Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ
ΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Π² рССстрС. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный ΠΎΠ±Ρ€Π°Π·, Π²Ρ‹ создаСтС Dockerfile
с простым синтаксисом для опрСдСлСния шагов, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для создания ΠΎΠ±Ρ€Π°Π·Π° ΠΈ запуска
Π­Ρ‚ΠΎ. КаТдая инструкция Π² Dockerfile создаСт слой Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.Когда Ρ‚Ρ‹
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ Dockerfile ΠΈ пСрСстройтС ΠΎΠ±Ρ€Π°Π·, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ слои, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ изобраТСния Ρ‚Π°ΠΊΠΈΠΌΠΈ Π»Π΅Π³ΠΊΠΈΠΌΠΈ, малСнькими,
ΠΈ быстро ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ тСхнологиями Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ — это исполняСмый экзСмпляр ΠΎΠ±Ρ€Π°Π·Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ,
ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker API ΠΈΠ»ΠΈ интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько сСтСй, ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ ΠΊ Π½Π΅ΠΌΡƒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ создайтС Π½ΠΎΠ²Ρ‹ΠΉ
ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° основС Π΅Π³ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ
Π΅Π³ΠΎ хост-машина. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, насколько ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π° ΡΠ΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅,
ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ подсистСмы ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ ΠΈΠ· хоста
машина.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ опрСдСляСтся Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹
ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅ΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π΅Π³ΠΎ создаСтС ΠΈΠ»ΠΈ запускаСтС. Когда ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΡƒΠ΄Π°Π»Π΅Π½, Π»ΡŽΠ±Ρ‹Π΅ измСнСния Π²
Π΅Π³ΠΎ состояния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ хранятся Π² постоянном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, ΠΈΡΡ‡Π΅Π·Π°ΡŽΡ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

docker run command

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° запускаСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ubuntu , ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ
Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСанс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ запускаСт / bin / bash .

  $ docker run -i -t ubuntu / bin / bash
  

Когда Π²Ρ‹ запускаСтС эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅
конфигурация рССстра ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ):

  1. Если Ρƒ вас Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·Π° ubuntu локально, Docker ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ· вашСго
    настроСнный рССстр, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ запускали docker pull ubuntu Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

  2. Docker создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π²Ρ‹ запустили Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ create
    ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

  3. Docker выдСляСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму для чтСния ΠΈ записи Π² качСствС послСднСго
    слой. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ
    ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΈ Π² своСй локальной Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

  4. Docker создаСт сСтСвой интСрфСйс для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    ΡΠ΅Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… сСтСвых ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚
    присвоСниС IP-адрСса ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚
    ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ внСшним сСтям с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСтСвого ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ хост-ΠΌΠ°ΡˆΠΈΠ½Ρ‹.

  5. Docker запускаСт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ выполняСт / bin / bash . ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
    Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ (ΠΈΠ·-Π·Π° -i ΠΈ -t
    flags), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΏΠΎΠΊΠ° Π²Ρ‹Π²ΠΎΠ΄ записываСтся Π²
    ваш Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π».

  6. Когда Π²Ρ‹ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ exit для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ / bin / bash , ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
    останавливаСтся, Π½ΠΎ Π½Π΅ удаляСтся. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

Базовая тСхнология

Docker написан Π½Π° языкС программирования Go ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚
прСимущСство Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ядра Linux для обСспСчСния Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.
Docker ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ namespaces для обСспСчСния ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ пространства.
Π½Π°Π·Π²Π°Π» ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ . Когда Π²Ρ‹ запускаСтС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Docker создаСт Π½Π°Π±ΠΎΡ€
пространства ΠΈΠΌΠ΅Π½ для этого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π­Ρ‚ΠΈ пространства ΠΈΠΌΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ изоляции. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ аспСкт ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚
Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ пространствС ΠΈΠΌΠ΅Π½, ΠΈ Π΅Π³ΠΎ доступ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ этим пространством ΠΈΠΌΠ΅Π½.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги

docker, Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅, докумСнтация, ΠΎ, тСхнология, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅

Docker Dashboard | ДокумСнтация Docker

РасчСтноС врСмя чтСния: 14 ΠΌΠΈΠ½ΡƒΡ‚

Docker Dashboard прСдоставляСт простой интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ своими ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, прилоТСниями ΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ прямо с вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π±Π΅Π· нСобходимости использования интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для выполнСния основных дСйствий.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ / прилоТСния обСспСчиваСт прСдставлСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния всСх Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.Он позволяСт Π²Π°ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ прилоТСниями, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠΌ Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ прямо с вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π­Ρ‚ΠΎ прСдставлСниС Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный интСрфСйс для выполнСния стандартных дСйствий ΠΏΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ вашими ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Docker, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ прилоТСния Π½Π° основС Docker Compose. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ «ИсслСдованиС Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ».

ΠžΠ±Ρ€Π°Π·Ρ‹ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список Π²Π°ΡˆΠΈΡ… ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Docker ΠΈ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹.Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ сводку ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎ сканировании уязвимостСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Snyk. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² прСдставлСнии Β«Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΒ» Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ очистки, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ с диска Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ изобраТСния ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто. Если Π²Ρ‹ вошли Π² систСму, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π²Ρ‹ ΠΈ ваша организация подСлились Π² Docker Hub. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Π˜ΡΡΠ»Π΅Π΄ΡƒΠΉΡ‚Π΅ свои изобраТСния

.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Volumes ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список Ρ‚ΠΎΠΌΠΎΠ² ΠΈ позволяСт Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΌΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠΎΠ²Β».

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, панСль Docker Dashboard позволяСт:

  • Π‘ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² мСню настроСк ( Настройки Π² Windows), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола Docker
  • Доступ ΠΊ мСню устранСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ пСрСзапуска
  • Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² Docker Hub, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ свой Docker ID

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Docker, Π² мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard . Π’ Windows Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ панСль ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ прилоТСния

Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard . Π—Π΄Π΅ΡΡŒ пСрСчислСны всС ваши Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ прилоТСния. Π£ вас Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ остановлСнныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ прилоТСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Docker.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄ΡƒΡ‚ вас Ρ‡Π΅Ρ€Π΅Π· процСсс создания ΠΎΠ±Ρ€Π°Π·Ρ†Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Redis ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ†Π° прилоТСния для дСмонстрации основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Docker Dashboard.

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Redis

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Redis, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

запуск Π΄ΠΎΠΊΠ΅Ρ€Π° -dt redis

Π­Ρ‚ΠΎ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Redis.Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Redis.

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния

Π”Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΎΠ±Ρ€Π°Π·Π΅Ρ† прилоТСния. Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ «ΠŸΡ€ΠΈΠΌΠ΅Ρ€ голосования» со страницы ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Docker. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для голосования — это распрСдСлСнноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Docker. Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ содСрТится:

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, содСрТащий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для голосования, Π² интСрфСйсС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΈ запуститС docker-compose up --build .

  $ docker-compose up - ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСти Β«ΠΏΡ€ΠΈΠΌΠ΅Ρ€-голосованиС-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-мастСр_Ρ„Ρ€ΠΎΠ½Ρ‚-ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒΒ» с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сСти Β«ΠΏΡ€ΠΈΠΌΠ΅Ρ€-голосованиС-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-мастСр_бэк-ярус» с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠ° example-vote-app-master_db-data с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
Π‘Ρ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ голосованиС
Шаг 1/7: ОВ python: 2.7-alpine
2.7-alpine: ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ / python
ДайдТСст: sha256: d2cc8451e799d4a75819661329ea6e0d3e13b3dadd56420e25fcb8601ff6ba49
Бтатус: Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для python: 2.7-alpine
 ---> 1bf48bb21060
Π¨Π°Π³ 2/7: WORKDIR / ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

...
УспСшно построСн 69da1319c6ce
ΠŸΡ€ΠΈΠΌΠ΅Ρ€-голосованиС-app-master_worker: latest ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ Ρ‚Π΅Π³ΠΎΠΌ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°-голосования-app-master_vote_1 ... Π³ΠΎΡ‚ΠΎΠ²ΠΎ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°-голосованиС-app-master_result_1 ... Π³ΠΎΡ‚ΠΎΠ²ΠΎ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ... Π³ΠΎΡ‚ΠΎΠ²ΠΎ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Redis ... Π³ΠΎΡ‚ΠΎΠ²ΠΎ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°-голосованиС-app-master_worker_1 ... Π³ΠΎΡ‚ΠΎΠ²ΠΎ
ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, redis, ΠΏΡ€ΠΈΠΌΠ΅Ρ€-голосованиС-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-master_result_1, ΠΏΡ€ΠΈΠΌΠ΅Ρ€-голосованиС-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-мастСр_vote_1, ΠΏΡ€ΠΈΠΌΠ΅Ρ€-голосованиС-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-мастСр_worker_1
...
  

ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска прилоТСния Π² мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для голосования.Π Π°Π·Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅ список Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ дСйствия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ:

  • Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠŸΠΎΡ€Ρ‚ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚, прСдоставляСмый ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅.
  • Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ CLI , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Если Π²Ρ‹ установили iTerm2 Π½Π° свой Mac, опция CLI ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» iTerm2.Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Β«Π’Π΅Ρ€ΠΌΠΈΠ½Π°Π»Β» Π½Π° Mac ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡƒΡŽ строку Π² Windows.
  • Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ , Π‘Ρ‚Π°Ρ€Ρ‚ , ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Search для поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ΡΡ мСню Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список доступных ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ВзаимодСйствиС с ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ прилоТСниями

На ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния для голосования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ запустили Ρ€Π°Π½Π΅Π΅.

Π’ прСдставлСнии Β«ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ / прилоТСния Β» пСрСчислСны всС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΈ содСрТится ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ прСдставлСниС ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ². Он Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ Search Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части прСдставлСния ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² для поиска Π² ΠΆΡƒΡ€Π½Π°Π»Π°Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… событий ΠΈΠ»ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ Copy , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π² Visual Studio Code , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² VS Code. НавСдитС курсор Π½Π° список ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· основных дСйствий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ.

Π’ΠΈΠ΄ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для получСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ Π–ΡƒΡ€Π½Π°Π»Ρ‹ , ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈ Бтатистика ΠΈ прСдоставляСт ΠΊΠ½ΠΎΠΏΠΊΠΈ быстрых дСйствий для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… дСйствий.

  • Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π–ΡƒΡ€Π½Π°Π»Ρ‹ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ Π² ΠΆΡƒΡ€Π½Π°Π»Π°Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ события ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠ±ΠΌΠ΅Π½Π°.

  • Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ, Π½ΠΎΠΌΠ΅Ρ€ вСрсии ΠΎΠ±Ρ€Π°Π·Π°, SHA-256, сопоставлСниС ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ.

  • Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Stats , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± использовании рСсурсов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ объСм ЦП, дискового Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, памяти ΠΈ сСтСвого Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠΈ быстрых дСйствий Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ для выполнСния ΠΎΠ±Ρ‰ΠΈΡ… дСйствий, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, ΠΈ выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ остановка, запуск, пСрСзапуск ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ свои изобраТСния

ΠžΠ±Ρ€Π°Π·Ρ‹ ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ — это простой интСрфСйс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ Docker Π±Π΅Π· использования интСрфСйса ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список всСх ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Docker Π½Π° вашСм локальном дискС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… рСпозиториях, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π’ΠΎΠΉΡ‚ΠΈ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΊ Docker Hub. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΡΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‡Π°Ρ‚ΡŒ с вашСй ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ изобраТСниями нСпосрСдствСнно Ρ‡Π΅Ρ€Π΅Π· Docker Desktop.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«ΠžΠ±Ρ€Π°Π·Ρ‹Β» позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ запуск ΠΎΠ±Ρ€Π°Π·Π° Π² качСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ послСднСй вСрсии ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΠ±Ρ€Π°Π·Π° Π² Docker Hub ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΎΠ±Ρ€Π°Π·ΠΎΠ².

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² прСдставлСнии Β«Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΒ» ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ± ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ‚Π΅Π³, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ изобраТСния, Π΄Π°Ρ‚Π° создания изобраТСния ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚Π΅Π³ΠΈ In Use рядом с изобраТСниями, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ остановлСнными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ. Π­Ρ‚ΠΎ позволяСт Π²Π°ΠΌ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Ρ‹ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π·Ρ‹ с диска, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ мСсто.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΒ» Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ изобраТСния Π½Π° локальном дискС ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² прСдставлСнии Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ .

Если Π½Π° вашСм дискС Π½Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π·ΠΎΠ², запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ docker pull redis Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний ΠΎΠ±Ρ€Π°Π· Redis. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ послСдний ΠΎΠ±Ρ€Π°Π· Redis ΠΈΠ· Docker Hub.

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Redis.

Запуск ΠΎΠ±Ρ€Π°Π·Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Redis Π½Π° дискС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим этот ΠΎΠ±Ρ€Π°Π· ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images .Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм локальном дискС.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ±Ρ€Π°Π· Redis ΠΈΠ· списка ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ .
  3. ΠŸΡ€ΠΈ появлСнии запроса Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉΡΡ список Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ имя, ΠΏΠΎΡ€Ρ‚, Ρ‚ΠΎΠΌΠ°, ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ .

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π±Π΅Π· указания ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… настроСк. Π­Ρ‚ΠΎ создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠ· ΠΎΠ±Ρ€Π°Π·Π° Redis ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ Π² прСдставлСнии Container / Apps .

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний ΠΎΠ±Ρ€Π°Π· ΠΈΠ· Docker Hub

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний ΠΎΠ±Ρ€Π°Π· ΠΈΠ· Docker Hub:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images . Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм локальном дискС.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· списка ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β».
  3. Π©Π΅Π»Ρ‡ΠΎΠΊ ΠŸΠΎΡ‚ΡΠ½ΠΈΡ‚Π΅ . Π­Ρ‚ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Docker Hub, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π°.Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠΉΡ‚ΠΈ Π² систСму, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π»ΠΈΡ‡Π½Ρ‹Π΅ изобраТСния.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Docker Hub

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Docker Hub:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images . Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм локальном дискС.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· списка ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β».
  3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Push to Hub.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π² Docker Hub, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π²Π°ΡˆΠ΅ΠΌΡƒ Docker ID ΠΈΠ»ΠΈ вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ / ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Ρ‚Π΅Π³Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² Docker Hub.

ΠžΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ изобраТСния отобраТаСтся подробная информация ΠΎΠ± ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, такая ΠΊΠ°ΠΊ история изобраТСния, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ изобраТСния, Π΄Π°Ρ‚Π° создания изобраТСния, Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния ΠΈ Ρ‚. Π”. Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ изобраТСния:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images . Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм локальном дискС.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· списка ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β».
  3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠžΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ .
  4. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ изобраТСния Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для извлСчСния послСднСго изобраТСния, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ изобраТСния Π² ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ‚ΠΎΡ€, удалСния изобраТСния ΠΈΠ»ΠΈ запуска изобраТСния Π² качСствС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π’ΠΈΠ΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ позволяСт ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ изобраТСния с диска. Π’ строкС состояния Β«ΠžΠ±Ρ€Π°Π·Ρ‹ Π½Π° дискС» отобраТаСтся количСство ΠΎΠ±Ρ€Π°Π·ΠΎΠ² ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ дисковоС пространство, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠΌΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ изобраТСния ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ для удалСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π±ΠΎΠ»Ρ‚Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Для удалСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images . Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм локальном дискС.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· списка ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹Β».
  3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ . Π­Ρ‚ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΎΠ±Ρ€Π°Π· с вашСго диска.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΈΠ»ΠΈ остановлСнным ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ связанный ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€.

Для удалСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΈ Π±ΠΎΠ»Ρ‚Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

ΠΠ΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±Ρ€Π°Π· — это ΠΎΠ±Ρ€Π°Π·, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΈ Π² ΠΊΠ°ΠΊΠΈΡ… Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ остановлСнных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ…. ΠžΠ±Ρ€Π°Π· становится висящим , ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ создаСтС Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π° с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‚Π΅Π³ΠΎΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Ρ‚Π°ΡŽΡ‰Π΅Π΅ΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Dashboard > Images . Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° вашСм дискС.
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π² строкС состояния ΠžΠ±Ρ€Π°Π·Ρ‹ Π½Π° дискС .
  3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°ΠΆΠΊΠΈ Unused ΠΈ Dangling , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

    Π’ строкС состояния ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ изобраТСния отобраТаСтся ΠΎΠ±Ρ‰Π΅Π΅ пространство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ, ΡƒΠ΄Π°Π»ΠΈΠ² Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ изобраТСния.

  4. НаТмитС Π£Π΄Π°Π»ΠΈΡ‚ΡŒ для подтвСрТдСния.

ВзаимодСйствиС с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ рСпозиториями

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Β«Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡΒ» Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… рСпозиториях ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ организациями.Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ· Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π² вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Если Ρƒ вас Π΅ΡΡ‚ΡŒ платная подписка Π½Π° Docker ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ сканированиС уязвимостСй Π² Docker Hub, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ сканирования появятся Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Β«Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈΒ».

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Pull позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π° ΠΈΠ· Docker Hub. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ View in Hub ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ страницу Docker Hub ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±Ρ€Π°Π·Π΅, Ρ‚Π°ΠΊΡƒΡŽ ​​как Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ОБ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π·Π°, Π΄Π°Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·Π° ΠΈ список слоСв ΠΎΠ±Ρ€Π°Π·Π°.

Для взаимодСйствия с ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΌΠΈ рСпозиториями:

  1. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Π£Π΄Π°Π»Π΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ .
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ· Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ списка. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ список Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² Π² вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ.
  3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² спискС ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Pull , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ послСдний ΠΎΠ±Ρ€Π°Π· ΠΈΠ· ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ рСпозитория.
  4. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±Ρ€Π°Π·Π΅ Π² Docker Hub, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² Hub .

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Β«ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π² ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ‚ΠΎΡ€Π΅Β» ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ страницу Docker Hub ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ±Ρ€Π°Π·Π΅, Ρ‚Π°ΠΊΡƒΡŽ ​​как Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ОБ, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π·Π°, Π΄Π°Ρ‚Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·Π° ΠΈ список слоСв ΠΎΠ±Ρ€Π°Π·Π°.

    Если Ρƒ вас Π΅ΡΡ‚ΡŒ платная подписка Π½Π° Docker ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° функция сканирования уязвимостСй, Π½Π° страницС Docker Hub Ρ‚Π°ΠΊΠΆΠ΅ отобраТаСтся сводка ΠΎΡ‚Ρ‡Π΅Ρ‚Π° ΠΎ сканировании уязвимостСй ΠΈ подробная информация ΠΎΠ± ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… уязвимостях.

Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚ΠΎΠΌΠ°

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΠ° для хранСния Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ.Π’ΠΎΠΌΠ° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Docker. Они Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ для сохранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΈ слуТбах Docker.

Volume Management Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступно для всСх подписок

Начиная с вСрсии Docker Desktop 4.1.0, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠ°ΠΌΠΈ доступно для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΠΎ любой подпискС, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Docker Personal. ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ Docker Desktop Π΄ΠΎ вСрсии 4.1.0, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ своими Ρ‚ΠΎΠΌΠ°ΠΌΠΈ бСсплатно.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ Volumes Π² Docker Dashboard позволяСт Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚ΠΎΠΌΠ° ΠΈ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ.Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΎΠΌ, ΠΈ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ Π² Π²Π°ΡˆΠΈΡ… Ρ‚ΠΎΠΌΠ°Ρ….

Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΌΠ°ΠΌΠΈ

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² прСдставлСнии Volumes отобраТаСтся список всСх Ρ‚ΠΎΠΌΠΎΠ². На Ρ‚ΠΎΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² настоящСС врСмя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, отобраТаСтся Π·Π½Π°Ρ‡ΠΎΠΊ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ .

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»Π΅ Search для поиска Π»ΡŽΠ±Ρ‹Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ‚ΠΎΠΌΠΎΠ². Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΌΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π΄Π°Ρ‚Π΅ создания ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ Ρ‚ΠΎΠΌΠ°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ подробности ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΌΠ°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΎΠΌ ΠΈΠ· списка. Π­Ρ‚ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ Π²ΠΈΠ΄.

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ отобраТаСтся имя ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с использованиСм Ρ‚ΠΎΠΌΠ°, имя ΠΎΠ±Ρ€Π°Π·Π°, Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ, ΠΈ Ρ†Π΅Π»ΡŒ. ЦСль — это ΠΏΡƒΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ доступ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ Π² Ρ‚ΠΎΠΌΠ΅.

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Data ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ ΠΏΠ°ΠΏΠΊΠΈ Π² Ρ‚ΠΎΠΌΠ΅ ΠΈ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ, Π½Π°Π²Π΅Π΄ΠΈΡ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΌΡ‹ΡˆΠΈ Π½Π° Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСню Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ , Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ мСсто для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ„Π°ΠΉΠ»Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΡƒ с Ρ‚ΠΎΠΌΠ°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π² мСню Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΌ

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠΌΠ° удаляСтся Ρ‚ΠΎΠΌ ΠΈ всС Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΌ, Π½Π°Π²Π΅Π΄ΠΈΡ‚Π΅ Π½Π° Π½Π΅Π³ΠΎ курсор ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ . Π›ΠΈΠ±ΠΎ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΎΠΌ ΠΈΠ· списка, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ .

Docker Dashboard, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, графичСский интСрфСйс, информационная панСль, изобраТСния, kitematic

Установка Docker Desktop Π² Windows

РасчСтноС врСмя чтСния: 9 ΠΌΠΈΠ½ΡƒΡ‚

ОбновлСниС условий Docker Desktop

Для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования Docker Desktop Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… организациях (Π±ΠΎΠ»Π΅Π΅ 250 сотрудников ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π΄ΠΎΡ…ΠΎΠ΄Π°) трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π±Ρ‹Π»Π° платная подписка Π½Π° Docker.Π₯отя Π΄Π°Ρ‚Π° вступлСния Π² силу этих условий — 31 августа 2021 Π³ΠΎΠ΄Π°, сущСствуСт Π»ΡŒΠ³ΠΎΡ‚Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π΄ΠΎ 31 января 2022 Π³ΠΎΠ΄Π° для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ трСбуСтся платная подписка. Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Π›ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½ΠΎΠ΅ соглашСниС Docker Desktop.

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Docker Desktop для Windows. Π­Ρ‚Π° страница содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ систСмных трСбованиях Docker Desktop для Windows, URL-адрСс Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, инструкции ΠΏΠΎ установкС ΠΈ обновлСнию Docker Desktop для Windows.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Docker Desktop для Windows

Docker Desktop для Windows

БистСмныС трСбования

Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ установки Docker Desktop ваш ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с Windows Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям.

БСрвСрная Ρ‡Π°ΡΡ‚ΡŒ Hyper-V ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Windows

  • 64-разрядная вСрсия Windows 10: Pro 2004 (сборка 19041) ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅ ΠΈΠ»ΠΈ Enterprise ΠΈΠ»ΠΈ Education 1909 (сборка 18363) ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅.

    Для Windows 10 Π”ΠΎΠΌΠ°ΡˆΠ½ΡΡ см. БистСмныС трСбования для сСрвСрной части WSL 2.

  • Hyper-V ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Windows Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹.
  • Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запуска ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования ΠΊ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ.
    Hyper-V Π² Windows 10:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Docker ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Docker Desktop Π² Windows Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π΅Ρ… вСрсий Windows 10, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ всС Π΅Ρ‰Π΅ находятся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π³Ρ€Π°Ρ„ΠΈΠΊΠ° обслуТивания Microsoft.

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Π·Ρ‹, созданныС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Docker Desktop, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всСми
ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ установлСн. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ всС Windows
ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ записи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ для создания ΠΈ запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ использовании сСрвСрной части Docker Desktop WSL 2 Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π·Π°ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ записями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ сцСнарии Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ запуск Docker Desktop Π½Π°
ЭкзСмпляр VMWare ΠΈΠ»ΠΈ Parallels ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ.Для
Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния см. Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «Запуск Docker Desktop Π² сцСнариях Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ».

О ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… Windows

Π˜Ρ‰Π΅Ρ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± использовании ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Windows?

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Docker Π² Windows

  1. Π”Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Docker Desktop Installer.exe , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ установщик.

    Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ установщик ( Docker Desktop Installer.exe ), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с
    Π”ΠΎΠΊΠ΅Ρ€ Π₯Π°Π± .ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ загруТаСтся Π² ΠΏΠ°ΠΏΠΊΡƒ Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ , ΠΈΠ»ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ·
    панСль Π½Π΅Π΄Π°Π²Π½ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части вашСго Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

  2. ΠŸΡ€ΠΈ появлСнии запроса ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Windows Hyper-V ΠΈΠ»ΠΈ Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Windows для WSL 2 Π²Ρ‹Π±Ρ€Π°Π½ Π½Π° страницС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

  3. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ инструкциям мастСра установки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ установки ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ установку.

  4. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ установки Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ процСсс установки.

  5. Если ваша учСтная запись администратора отличаСтся ΠΎΡ‚ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ docker-users . ЗапуститС Computer Management ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ Local Users and Groups > Groups > docker-users . Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ.Π’Ρ‹ΠΉΠ΄ΠΈΡ‚Π΅ ΠΈΠ· систСмы ΠΈ Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅ снова, Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния вступили Π² силу.

Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ стол Docker

Docker Desktop Π½Π΅ запускаСтся автоматичСски послС установки. Для запуска Docker Desktop:

  1. НайдитС Docker ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Docker Desktop Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… поиска.

  2. МСню Docker () ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ БоглашСния ΠΎΠ± обслуТивании подписки Docker. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий использования Docker Desktop.

    Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ основных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

    • НашС соглашСниС ΠΎΠ± обслуТивании подписки Docker Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий использования Docker Desktop
    • It остаСтся бСсплатным для ΠΌΠ°Π»ΠΎΠ³ΠΎ бизнСса (ΠΌΠ΅Π½Π΅Π΅ 250 сотрудников И ΠΌΠ΅Π½Π΅Π΅ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π΄ΠΎΡ…ΠΎΠ΄Π°), Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ использования, образования ΠΈ нСкоммСрчСских ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ.
    • Для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования Π½Π° ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… прСдприятиях трСбуСтся платная подписка.
    • Π”Π°Ρ‚Π° вступлСния Π² силу настоящих условий — 31 августа 2021 Π³.БущСствуСт Π»ΡŒΠ³ΠΎΡ‚Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π΄ΠΎ 31 января 2022 Π³ΠΎΠ΄Π° для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ потрСбуСтся платная подписка для использования Docker Desktop.
    • Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ подписка Docker Free Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² Docker Personal , ΠΈ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ подписку Docker Business.
    • Подписки Docker Pro, Team ΠΈ Business Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ коммСрчСскоС использованиС Docker Desktop.
  3. УстановитС Ρ„Π»Π°ΠΆΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ условия, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ.Docker Desktop запускаСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ условия.

    Π’Π°ΠΆΠ½ΠΎ

    Если Π²Ρ‹ Π½Π΅ согласны с ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ условиями, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Docker Desktop закроСтся, ΠΈ Π²Ρ‹ большС Π½Π΅ смоТСтС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Docker Desktop Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ условия ΠΏΠΎΠ·ΠΆΠ΅, ΠΎΡ‚ΠΊΡ€Ρ‹Π² Docker Desktop.

    Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Π›ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½ΠΎΠ΅ соглашСниС Docker Desktop. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π»ΠΎΠ³ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Docker Desktop.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство

По Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Docker Desktop запускаСт Quick Start Guide . Π­Ρ‚ΠΎ руководство Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя простоС ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ созданию ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π·Π° Docker, запуску Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΈ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π° Π² Docker Hub.

Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ руководство ΠΏΠΎ быстрому запуску ΠΏΠΎ запросу, Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π·Π½Π°Ρ‡ΠΎΠΊ Docker Π² области ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ (ΠΈΠ»ΠΈ Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ Π·Π°Π΄Π°Ρ‡), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ мСню Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ стола Docker, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Руководство ΠΏΠΎ быстрому запуску .

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Docker Desktop Π² Windows.

ОбновлСния

Когда доступно ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Docker Desktop ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΎΠΊ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии.

Начиная с Docker Desktop 4.1.0, Ρ€Π°Π·Π΄Π΅Π» Software Updates Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ General Ρ‚Π°ΠΊΠΆΠ΅ увСдомляСт вас ΠΎ Π»ΡŽΠ±Ρ‹Ρ… обновлСниях, доступных для Docker Desktop. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Release Notes , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ.Если Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ участником Π³Ρ€ΡƒΠΏΠΏΡ‹ Docker ΠΈΠ»ΠΈ подписки Business, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, сняв Ρ„Π»Π°ΠΆΠΎΠΊ АвтоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π² ΠΎΠ±Ρ‰ΠΈΡ… настройках. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡ΠΎΠΊ увСдомлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Docker.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² курсС послСдних событий, Docker Desktop ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ становится доступным. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ это Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅, Π½Π°ΠΆΠ°Π² ΠžΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ появлСнии напоминания, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² ΠΎΠΏΡ†ΠΈΡŽ ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ это ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ .

БоглашСниС ΠΎΠ± обслуТивании подписки Docker

Начиная с 31 августа 2021 Π³., Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с БоглашСниСм ΠΎΠ± обслуТивании подписки Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ использованиС Docker Desktop. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π±Π»ΠΎΠ³ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы ΠΎ подпискС Π½Π° Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± измСнСниях.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Когда Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ обновлСния Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Β«ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Β» ΠΈ пСрСзапуститС ΠΈΠ· мСню Docker.Π­Ρ‚ΠΎ установит послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ пСрСзапустит Docker Desktop, Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния вступили Π² силу.

ΠŸΡ€ΠΈ запускС Docker Desktop отобраТаСтся ΠΎΠΊΠ½ΠΎ БоглашСния ΠΎΠ± обслуТивании подписки Docker. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° экранС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ измСнСния ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° вас. УстановитС Ρ„Π»Π°ΠΆΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ условия, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ.

Π’Π°ΠΆΠ½ΠΎ

Если Π²Ρ‹ Π½Π΅ согласны с условиями, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Docker Desktop закроСтся, ΠΈ Π²Ρ‹ большС Π½Π΅ смоТСтС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Docker Desktop Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ условия ΠΏΠΎΠ·ΠΆΠ΅, ΠΎΡ‚ΠΊΡ€Ρ‹Π² Docker Desktop.

Docker Desktop запускаСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ условия.

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Docker Desktop

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Docker Desktop с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Windows:

  1. Π’ мСню Windows ΠŸΡƒΡΠΊ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Настройки > ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ > ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ .
  2. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Docker Desktop ΠΈΠ· списка ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ , Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ .
  3. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ свой Π²Ρ‹Π±ΠΎΡ€.

Π’Π°ΠΆΠ½ΠΎ

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Docker Desktop ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΎΠ±Ρ€Π°Π·Ρ‹, Ρ‚ΠΎΠΌΠ° ΠΈ Ρ‚ΠΎΠΌΠ° Docker.
Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, связанныС с Docker, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΈ удаляСт созданныС Ρ„Π°ΠΉΠ»Ρ‹
ΠΏΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌΡƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…
Ρ€Π°Π·Π΄Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ.

ΠšΡƒΠ΄Π° ΠΏΠΎΠΉΡ‚ΠΈ дальшС

  • Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с Docker Desktop для Windows.
  • Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Docker — это руководство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΡƒΡ‡ΠΈΡ‚ вас, ΠΊΠ°ΠΊ
    Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ΅Ρ€Π²ΠΈΡΠ½Ρ‹ΠΉ стСк.
  • УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ описываСт ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΈ
    ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ.
  • Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

  • Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы.
  • Π’ примСчаниях ΠΊ выпуску

  • пСрСчислСны обновлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ, связанныС с выпусками Docker Desktop.
  • Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ восстановлСниС Π΄Π°Π½Π½Ρ‹Ρ… содСрТит инструкции ΠΏΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌΡƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, связанных с Docker.

windows, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Π΄ΠΎΠΊΠ΅Ρ€, локально

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Desktop Π½Π° Mac

РасчСтноС врСмя чтСния: 7 ΠΌΠΈΠ½ΡƒΡ‚

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Docker Desktop для Mac. Π­Ρ‚Π° страница содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ систСмных трСбованиях Docker Desktop для Mac, URL-адрСса для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, инструкции ΠΏΠΎ установкС ΠΈ обновлСнию Docker Desktop для Mac.

Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Docker Desktop для Mac

Mac с Ρ‡ΠΈΠΏΠΎΠΌ Intel
Mac с Ρ‡ΠΈΠΏΠΎΠΌ Apple

БистСмныС трСбования

Π’Π°Ρˆ Mac Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ трСбованиям для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ установки Docker Desktop.

Mac с Ρ‡ΠΈΠΏΠΎΠΌ Intel

  • macOS Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ 10.14 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅ . Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠœΠΎΡ…Π°Π²Π΅, ΠšΠ°Ρ‚Π°Π»ΠΈΠ½Π° ΠΈΠ»ΠΈ Π‘ΠΈΠ³-Π‘ΡƒΡ€. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ macOS Π΄ΠΎ послСднСй вСрсии.

    Если Ρƒ вас Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ послС обновлСния macOS Π΄ΠΎ вСрсии 10.15, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Docker Desktop, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π±Ρ‹Π»Π° совмСстима с этой вСрсиСй macOS.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

    Docker ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Docker Desktop Π² самых послСдних вСрсиях macOS.Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ выпуск macOS ΠΈ Π΄Π²Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… выпуска. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½ΠΎΠ²Ρ‹Π΅ основныС вСрсии macOS становятся общСдоступными, Docker пСрСстаСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΡƒΡŽ ΡΡ‚Π°Ρ€ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½ΠΎΠ²Π΅ΠΉΡˆΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ macOS (Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ Π΄Π²ΡƒΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ выпускам). Docker Desktop Π² настоящСС врСмя ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ macOS Mojave, macOS Catalina ΠΈ macOS Big Sur.

  • НС ΠΌΠ΅Π½Π΅Π΅ 4 Π“Π‘ ΠžΠ—Π£.

  • VirtualBox Π΄ΠΎ вСрсии 4.3.30 нСльзя ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ нСсовмСстим с Docker Desktop.

УстановитС ΠΈ запуститС Docker Desktop Π½Π° Mac

  1. Π”Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Docker.dmg , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ установки, Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡ΠΎΠΊ Docker Π²
    ΠΏΠ°ΠΏΠΊΡƒ «ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ».

  2. Π”Π²Π°ΠΆΠ΄Ρ‹ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Docker.app Π² ΠΏΠ°ΠΏΠΊΠ΅ Β«ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Docker. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ°ΠΏΠΊΠ° Applications находится Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ просмотра «сСтки».

  3. МСню Docker () ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ БоглашСния ΠΎΠ± обслуТивании подписки Docker. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий использования Docker Desktop.

    Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ основных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ:

    • НашС соглашСниС ΠΎΠ± обслуТивании подписки Docker Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ условий использования Docker Desktop
    • It остаСтся бСсплатным для ΠΌΠ°Π»ΠΎΠ³ΠΎ бизнСса (ΠΌΠ΅Π½Π΅Π΅ 250 сотрудников И ΠΌΠ΅Π½Π΅Π΅ 10 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ² Π΄ΠΎΡ…ΠΎΠ΄Π°), Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ использования, образования ΠΈ нСкоммСрчСских ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ.
    • Для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ использования Π½Π° ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… прСдприятиях трСбуСтся платная подписка.
    • Π”Π°Ρ‚Π° вступлСния Π² силу этих условий — 31 августа 2021 Π³. БущСствуСт Π»ΡŒΠ³ΠΎΡ‚Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π΄ΠΎ 31 января 2022 Π³. для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ потрСбуСтся платная подписка для использования Docker Desktop.
    • Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ подписка Docker Free Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π° Π² Docker Personal , ΠΈ ΠΌΡ‹ Π²Π²Π΅Π»ΠΈ подписку Docker Business.
    • Подписки Docker Pro, Team ΠΈ Business Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ коммСрчСскоС использованиС Docker Desktop.
  4. УстановитС Ρ„Π»Π°ΠΆΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ условия, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ. Docker Desktop запускаСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ условия.

    Π’Π°ΠΆΠ½ΠΎ

    Если Π²Ρ‹ Π½Π΅ согласны с условиями, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Docker Desktop закроСтся, ΠΈ Π²Ρ‹ большС Π½Π΅ смоТСтС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Docker Desktop Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ условия ΠΏΠΎΠ·ΠΆΠ΅, ΠΎΡ‚ΠΊΡ€Ρ‹Π² Docker Desktop.

    Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ см. Π›ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½ΠΎΠ΅ соглашСниС Docker Desktop. ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π±Π»ΠΎΠ³ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Docker Desktop.

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство

Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ установили ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Docker Desktop запустит ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство. Π’ ΡƒΡ‡Π΅Π±Π½ΠΎΠ΅ пособиС Π²Ρ…ΠΎΠ΄ΠΈΡ‚ простоС ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ созданию ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π·Π° Docker, запуску Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΈ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΎΠ±Ρ€Π°Π·Π° Π² Docker Hub.

ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΠ΅ΠΌ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Docker Desktop.Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ мСню Docker (), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ
Настройки ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Руководство ΠΏΠΎ быстрому запуску ΠΏΠΎ запросу, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ мСню Docker, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство .

ОбновлСния

Когда доступно ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, Docker Desktop ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡ΠΎΠΊ, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ вСрсии.

Начиная с Docker Desktop 4.1.0, Ρ€Π°Π·Π΄Π΅Π» Software Updates Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ General Ρ‚Π°ΠΊΠΆΠ΅ увСдомляСт вас ΠΎ Π»ΡŽΠ±Ρ‹Ρ… обновлСниях, доступных для Docker Desktop.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ сразу Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Release Notes , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ. Если Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ участником Π³Ρ€ΡƒΠΏΠΏΡ‹ Docker ΠΈΠ»ΠΈ подписки Business, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, сняв Ρ„Π»Π°ΠΆΠΎΠΊ АвтоматичСски ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π² ΠΎΠ±Ρ‰ΠΈΡ… настройках. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ Π·Π½Π°Ρ‡ΠΎΠΊ увСдомлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ отобраТаСтся Π½Π° ΠΏΠ°Π½Π΅Π»ΠΈ инструмСнтов Docker.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ±ΡƒΠ΄ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Π² курсС послСдних событий, Docker Desktop ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π΅Π· Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ становится доступным.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ это Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠ΅ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅, Π½Π°ΠΆΠ°Π² ΠžΡ‚Π»ΠΎΠΆΠΈΡ‚ΡŒ . Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ появлСнии напоминания, Ρ‰Π΅Π»ΠΊΠ½ΡƒΠ² ΠΎΠΏΡ†ΠΈΡŽ ΠŸΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ это ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ .

БоглашСниС ΠΎΠ± обслуТивании подписки Docker

Начиная с 31 августа 2021 Π³., Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с БоглашСниСм ΠΎΠ± обслуТивании подписки Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ использованиС Docker Desktop. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π±Π»ΠΎΠ³ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы ΠΎ подпискС Π½Π° Docker, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎΠ± измСнСниях.

Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Когда Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅.Π­Ρ‚ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ обновлСния Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Β«ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Β» ΠΈ пСрСзапуститС ΠΈΠ· мСню Docker. Π­Ρ‚ΠΎ установит послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ пСрСзапустит Docker Desktop, Ρ‡Ρ‚ΠΎΠ±Ρ‹ измСнСния вступили Π² силу.

ΠŸΡ€ΠΈ запускС Docker Desktop отобраТаСтся ΠΎΠΊΠ½ΠΎ БоглашСния ΠΎΠ± обслуТивании подписки Docker. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π½Π° экранС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ измСнСния ΠΏΠΎΠ²Π»ΠΈΡΡŽΡ‚ Π½Π° вас. УстановитС Ρ„Π»Π°ΠΆΠΎΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ условия, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠŸΡ€ΠΈΠ½ΡΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ.

Π’Π°ΠΆΠ½ΠΎ

Если Π²Ρ‹ Π½Π΅ согласны с условиями, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Docker Desktop закроСтся, ΠΈ Π²Ρ‹ большС Π½Π΅ смоТСтС Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Docker Desktop Π½Π° своСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ условия ΠΏΠΎΠ·ΠΆΠ΅, ΠΎΡ‚ΠΊΡ€Ρ‹Π² Docker Desktop.

Docker Desktop запускаСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚Π΅ условия.

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Docker Desktop

Для удалСния Docker Desktop с Mac:

  1. Π’ мСню Docker Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ , Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ .
  2. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π£Π΄Π°Π»ΠΈΡ‚ΡŒ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ свой Π²Ρ‹Π±ΠΎΡ€.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Docker Desktop ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΎΠ±Ρ€Π°Π·Ρ‹, Ρ‚ΠΎΠΌΠ° ΠΈ Ρ‚ΠΎΠΌΠ° Docker.
Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, связанныС с Docker, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для ΠΌΠ°ΡˆΠΈΠ½Ρ‹, ΠΈ удаляСт созданныС Ρ„Π°ΠΉΠ»Ρ‹
ΠΏΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌΡƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…
Ρ€Π°Π·Π΄Π΅Π», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ΠΌ.

ΠšΡƒΠ΄Π° ΠΏΠΎΠΉΡ‚ΠΈ дальшС

  • Β«ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅Β» содСрТит ΠΎΠ±Π·ΠΎΡ€ Docker Desktop Π½Π° Mac, основныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄ Docker, способы получСния справки ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи, Π° Ρ‚Π°ΠΊΠΆΠ΅ ссылки Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅ΠΌΡ‹ ΠΎ Docker Desktop Π½Π° Mac.
  • Docker Desktop для микросхСмы Apple для получСния ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ микросхСмС Docker Desktop для Apple.
  • УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ описываСт ΠΎΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ, ΠΊΠ°ΠΊ
    для запуска ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ диагностики, Π° Ρ‚Π°ΠΊΠΆΠ΅ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.
  • Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

  • Π΄Π°ΡŽΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы.
  • Π’ примСчаниях ΠΊ выпуску

  • пСрСчислСны обновлСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ, связанныС с выпусками Docker Desktop.
  • «Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ с DockerΒ» содСрТит ΠΎΠ±Ρ‰Π΅Π΅ руководство ΠΏΠΎ Docker.
  • Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ восстановлСниС Π΄Π°Π½Π½Ρ‹Ρ… содСрТит инструкции
    ΠΏΠΎ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΌΡƒ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ…, связанных с Docker.

mac, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ, Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Π΄ΠΎΠΊΠ΅Ρ€, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Docker Engine | ДокумСнтация Docker

РасчСтноС врСмя чтСния: 6 ΠΌΠΈΠ½ΡƒΡ‚

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹

Docker Engine доступСн Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Linux,
macOS ΠΈ Windows 10
Ρ‡Π΅Ρ€Π΅Π· Docker Desktop ΠΈ ΠΊΠ°ΠΊ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄Π²ΠΎΠΈΡ‡Π½ΡƒΡŽ установку. ΠΠ°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ
прСдпочитаСмая Π²Π°ΠΌΠΈ опСрационная систСма Π½ΠΈΠΆΠ΅.

ΠΠ°ΡΡ‚ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ

Π‘Π΅Ρ€Π²Π΅Ρ€

Docker прСдоставляСт ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ .deb ΠΈ .rpm ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… дистрибутивов Linux
ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€:

Π”Ρ€ΡƒΠ³ΠΈΠ΅ дистрибутивы Linux

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π₯отя ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ инструкции ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Docker Π½Π΅ тСстируСт ΠΈ Π½Π΅ провСряСт
установка Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅.

  • ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Debian, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Β«BunsenLabs LinuxΒ», Β«Kali LinuxΒ» ΠΈΠ»ΠΈ
    Β«LMDEΒ» (Mint Π½Π° основС Debian) Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструкциям ΠΏΠΎ установкС для
    Debian, Π·Π°ΠΌΠ΅Π½ΠΈΠ² Π²Π΅Ρ€ΡΠΈΡŽ своСго дистрибутива Π½Π°
    ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ выпуск Debian.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ вашСго дистрибутива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ
    ΠΊΠ°ΠΊΠΎΠΉ выпуск Debian соотвСтствуСт вашСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ вСрсии.
  • Аналогичным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ubuntu, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Β«KubuntuΒ», Β«LubuntuΒ» ΠΈΠ»ΠΈ Β«XubuntuΒ»
    слСдуСт ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ инструкциям ΠΏΠΎ установкС для Ubuntu,
    замСняя Π²Π΅Ρ€ΡΠΈΡŽ своСго дистрибутива Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ выпуск Ubuntu.
    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ вашСго дистрибутива, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ выпуск Ubuntu
    соотвСтствуСт вашСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ вСрсии.
  • НСкоторыС дистрибутивы Linux ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Docker Engine Ρ‡Π΅Ρ€Π΅Π· свои
    Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².Π­Ρ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Linux.
    Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π° дистрибутива ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ отличия Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
    ΠΈΠ»ΠΈ построСны ΠΈΠ· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ исходного ΠΊΠΎΠ΄Π°. Docker Π½Π΅ участвуСт Π² выпускС этих
    ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ошибки ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с этими ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ, слСдуСт ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ Π²
    Ρ‚Ρ€Π΅ΠΊΠ΅Ρ€ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ вашСго дистрибутива Linux.

Docker прСдоставляСт Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ для Ρ€ΡƒΡ‡Π½ΠΎΠΉ установки Docker Engine.
Π­Ρ‚ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ статичСски связаны ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² любом дистрибутивС Linux.

ΠšΠ°Π½Π°Π»Ρ‹ выпуска

Docker Engine ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΊΠ°Π½Π°Π»ΠΎΠ² обновлСния: ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ , тСстовый ,
ΠΈ Π² Π½ΠΎΡ‡Π½ΠΎΠ΅ врСмя :

  • Канал Stable прСдоставляСт Π²Π°ΠΌ послСдниС вСрсии для общСдоступной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.
  • Канал Test прСдоставляСт ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ вСрсии, Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΊ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄
    ΠΎΠ±Ρ‰Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ (GA).
  • Канал Nightly Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ послСдниС сборки Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ для
    ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ выпуск.

ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ

Π“ΠΎΠ΄ΠΎΠ²Ρ‹Π΅ Ρ€Π΅Π»ΠΈΠ·Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ Ρ€Π΅Π»ΠΈΠ·Π°, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΎΡ‚ основной.
Π²Π΅Ρ‚Π²ΡŒ. Π’Π΅Ρ‚ΠΊΠ° создаСтся Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ <Π³ΠΎΠ΄>. <ΠœΠ΅ΡΡΡ†> , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
20,10 . НазваниС Π³ΠΎΠ΄Π° ΠΈ мСсяца ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° самый Ρ€Π°Π½Π½ΠΈΠΉ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€Π΅ΠΉ.
мСсяц, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π»ΠΈΠ· станСт общСдоступным.ВсС дальнСйшиС ΠΏΠ°Ρ‚Ρ‡ΠΈ
выпуски Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΈΠ· этой Π²Π΅Ρ‚ΠΊΠΈ. НапримСр, Ссли v20.10.0 Π±ΡƒΠ΄Π΅Ρ‚
Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½, всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ выпуски исправлСний построСны ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ 20.10 .

ВСст

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ΅ ΠΊ выпуску Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°-мСсяца создаСтся Π²Π΅Ρ‚ΠΊΠ° ΠΈΠ·
главная Π²Π΅Ρ‚Π²ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ YY.mm , ΠΊΠΎΠ³Π΄Π° Π²Π΅Ρ…ΠΈ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
Π”ΠΎΠΊΠ΅Ρ€Ρ‹ для этого Ρ€Π΅Π»ΠΈΠ·Π° достигли ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π»ΠΈΠ·Ρ‹
Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π±Π΅Ρ‚Π°-вСрсии ΠΈ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρ‹ Π½Π° выпуск, проводятся ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ выпуска
Π²Π΅Ρ‚Π²ΠΈ.Π’Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ выпуски исправлСний ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ выпуски
ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠΈ выпуска.

ΠΠΎΡ‡ΡŒΡŽ

Π½ΠΎΡ‡Π½Ρ‹Ρ… сборок Π΄Π°ΡŽΡ‚ Π²Π°ΠΌ послСдниС сборки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‚ΡΡ для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ
Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ. Они ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² дСнь ΠΈΠ· основной Π²Π΅Ρ‚ΠΊΠΈ с вСрсиСй
Ρ„ΠΎΡ€ΠΌΠ°Ρ‚:

  0.0.0-Π“Π“Π“Π“ΠΌΠΌΠ΄Π΄Π§Π§ΠœΠœΠ‘Π‘-abcdefabcdef
  

, Π³Π΄Π΅ врСмя — это врСмя фиксации Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UTC, Π° послСдний суффикс — это прСфикс.
Ρ…Π΅ΡˆΠ° фиксации, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 0.0.0-20180720214833-f61e0f7 .

Π­Ρ‚ΠΈ сборки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ тСстированиС ΠΈΠ· послСднСго ΠΊΠΎΠ΄Π° Π² основной Π²Π΅Ρ‚ΠΊΠ΅. НСт
для Π½ΠΎΡ‡Π½Ρ‹Ρ… сборок Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠΈ ΠΈΠ»ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°

Π Π΅Π»ΠΈΠ·Ρ‹

Docker Engine Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ исправлСниями Π² Π²ΠΈΠ΄Π΅
трСбуСтся Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСсяца послС выпуска общСдоступной вСрсии Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π³ΠΎΠ΄.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ для Π²Π΅Ρ‚ΠΎΠΊ выпуска.
Π΄ΠΎ Π΄Π°Ρ‚Ρ‹ окончания срока слуТбы.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π³ΠΎΠ΄ΠΎΠ²ΠΎΠΉ Ρ„ΠΈΠ»ΠΈΠ°Π» достигнСт ΠΊΠΎΠ½Ρ†Π° срока слуТбы, Ρ„ΠΈΠ»ΠΈΠ°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· рСпозитория.

Бэкпорт

Backports ΠΊ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ Docker ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Docker. А
Π‘ΠΎΡ‚Ρ€ΡƒΠ΄Π½ΠΈΠΊ Docker ΠΈΠ»ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ рСпозитория ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ°Ρ‚ всС усилия, Ρ‡Ρ‚ΠΎΠ±Ρ‹
исправлСния Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² .

Если Π΅ΡΡ‚ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ исправлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ для Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ³ΠΎ копирования Π½Π°
Π²Π΅Ρ‚ΠΊΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ€Π΅Π»ΠΈΠ·ΠΎΠ², ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ это Π² PR-описании
ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π² PR.

ΠŸΡƒΡ‚ΡŒ обновлСния

Π Π΅Π»ΠΈΠ·Ρ‹ ΠΏΠ°Ρ‚Ρ‡Π°

всСгда ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимы с Π΅Π³ΠΎ вСрсиСй ΠΏΠΎ Π³ΠΎΠ΄Π°ΠΌ ΠΈ мСсяцам.

Π›ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Docker находится ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache License вСрсии 2.0. Π’ΠΈΠ΄Π΅Ρ‚ΡŒ
Π›Π˜Π¦Π•ΠΠ—Π˜Π― Π½Π° ΠΏΠΎΠ»Π½ΡƒΡŽ
тСкст Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ.

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… бСзопасности

Π‘ΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Docker ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ относятся ΠΊ бСзопасности. Если Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ
вопрос, поТалуйста, сразу ΠΆΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π½Π° это ΠΈΡ… Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, НЕ ΠΏΠΎΠ΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ вопросы; вмСсто этого ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ свой ΠΎΡ‚Ρ‡Π΅Ρ‚ Π² частном порядкС
ΠΏΠΎ адрСсу security@docker.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *