Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Docker ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для создания пСрСносимого ΠΎΠ±Ρ€Π°Π·Π° для Π²Π°ΡˆΠΈΡ… PHP-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ (CI/CD) для создания ΠΈ развСртывания ΠΎΠ±Ρ€Π°Π·Π° Π½Π° Heroku.

ДокСризация вашСго PHP-прилоТСния ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ:

  1. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΡ€Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ Π² любом мСстС.
  2. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΡƒΡŽ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ срСду, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ.
  3. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ — это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг ΠΊ запуску прилоТСния с высокой Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DockerSwarm ΠΈΠ»ΠΈ Kubernetes.

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π² ΡΡ‚Π°Ρ‚ΡŒΡŽ, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Docker ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.Β  Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ всС тонкости объСдинСния Docker с PHP, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ ΠΈ доставку для тСстирования прилоТСния, создания ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π΅Π³ΠΎ развСртывания.

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

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ стСк усилитСлСй (W|L|M)Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π½ΠΎ эта срСда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ быстро ΡΡ‚Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ эту боль, Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ срСду для ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈ воспроизвСдСния с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ.

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

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π”ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ установщика. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ соврСмСнныС вСрсии Windows ΠΈΠ»ΠΈ Mac, установитС DockerDesktop, ΠΈ всС Π³ΠΎΡ‚ΠΎΠ²ΠΎ.

Если Π²Ρ‹ ΡΠ²Π»ΡΠ΅Ρ‚Π΅ΡΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Linux, ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Docker популярны ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ вашСго дистрибутива. НапримСр, ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° Ubuntu ΠΈΠ»ΠΈ Debian Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ:

$ apt-get update && apt-get install docker

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡ Π΄ΠΎΠΊΠ΅Ρ€Π°

Docker основан Π½Π° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ создания ΠΎΠ±Ρ€Π°Π·ΠΎΠ², содСрТащих Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ распространяСмыС ΠΎΠ±Ρ€Π°Π·Ρ‹, содСрТащиС ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, Ρ‚Π°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ сСрвСр Apache, сСрвСр ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… MySQL ΠΈ Ρ‚. Π”. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ нашим ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° DockerHub, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ доступным для всСх.

Π Π°Π±ΠΎΡ‚Π° с изобраТСниями Docker

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ доступныС изобраТСния Π½Π° нашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ dockerimages.

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ Docker

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Docker с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ класса. ΠœΡ‹ опрСдСляСм Π΅Π³ΠΎ свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹-это экзСмпляры, созданныС ΠΈΠ· этого класса. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько экзСмпляров ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ изобраТСния. Команда dockerps Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρƒ нас Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим Π½ΠΎΠ²Ρ‹ΠΉ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Из Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈ имя. Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΈ Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ bash ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΠ² Π΅Π΅ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ загрязнСния нашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ старыС:

 

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наш ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ являСтся сСрвСром Apache, ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΈΠΌΠ΅Ρ‚ΡŒ доступ ΠΊ Π½Π΅ΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€. ΠŸΡ€ΠΈ создании ΠΎΠ±Ρ€Π°Π·Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚, ΠΌΡ‹ рассмотрим это Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Dockerfiles.

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ IP-адрСс нашСго ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ dockerinspect:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ПослСдняя Ρ‡Π°ΡΡ‚ΡŒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСрвСр Apache для запуска нашСго прилоТСния вмСсто домашнСй страницы Apache ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ прилоТСния с ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠΎΠΉ сСрвСра (/var/www/html). ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ-v. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ большС ΠΎ Ρ‚ΠΎΠΌΠ°Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Docker:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ВсСгда ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° описаниС изобраТСния Π² DockerHub ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ инструкции ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΠ· изобраТСния.

Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Dockerfiles

Π Π°Π½Π΅Π΅ ΠΌΡ‹ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Docker ΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠΌ Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Docker, ΠΈ Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Ρ‹ Docker ΡΠ²Π»ΡΡŽΡ‚ΡΡ основным инструмСнтом для достиТСния этой Ρ†Π΅Π»ΠΈ. ΠœΡ‹ посмотрим, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ наш собствСнный ΠΎΠ±Ρ€Π°Π· ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ нашим потрСбностям. Бписок доступных ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ рСпозитория:

$ cd ..

ΠžΠ±Ρ€Π°Π· php:7.4-apache устанавливаСт ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Apache Π² /var/www/html. Однако Π² этом случаС, слСдуя соглашСниям Laravel, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² /var/www/public. Одним ΠΈΠ· способов достиТСния этой Ρ†Π΅Π»ΠΈ являСтся настройка ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ хоста. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» 000-default.conf со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Apache ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΎΡ€Ρ‚ 80 (HTTP), это Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ запускС сСрвСра Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Но Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ использовали Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹.

ΠœΡ‹ создадим скрипт для динамичСского пСрСопрСдСлСния ΠΏΠΎΡ€Ρ‚Π° Apache ΠΏΡ€ΠΈ запускС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ start-apache со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

И ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» являСтся исполняСмым:

 

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠœΡ‹ собираСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ производству ΠΎΠ±Ρ€Π°Π·. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Dockerfile. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ FROM для использования ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ phpapache Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π‘ΠšΠžΠŸΠ˜Π ΠžΠ’ΠΠ’Π¬ Ρ„Π°ΠΉΠ» Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

Laravel Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ»Π°Π³ΠΈΠ½ mod_rewriteApache Π±Ρ‹Π» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ a2enmod. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ RUN ΠΌΡ‹ запускаСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

RUN a2enmod rewrite

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ снова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠšΠžΠŸΠ˜Π ΠžΠ’ΠΠΠ˜Π―:

COPYsrc /var/www/
RUNchown-R www-data:www-data /var/www

ПослСднСС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ сСрвСр Apache Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Команда CMD Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² Ρ„Π°ΠΉΠ»Π΅ Dockerfile, ΠΈ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

CMD [«executable»,»param1″,»param2″]

ΠœΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ сцСнарий запуска, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ создали Ρ€Π°Π½Π΅Π΅:

CMD [«start-apache»]

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Dockerfile Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

Π₯отя наш ΠΎΠ±Ρ€Π°Π· Π³ΠΎΡ‚ΠΎΠ², ΠΌΡ‹ рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ². Π§Ρ‚ΠΎ, Ссли Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Node.js Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ нашими ΠΏΠ΅Ρ€Π΅Π΄Π½ΠΈΠΌΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ?

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Node.js ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ npm Π² нашСм ΠΎΠ±Ρ€Π°Π·Π΅. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ RUN ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π΅ Dockerfile, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Docker Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ создания нашСго ΠΎΠ±Ρ€Π°Π·Π°. КаТдая ΠΊΠΎΠΌΠ°Π½Π΄Π° Π—ΠΠŸΠ£Π‘ΠšΠ хранится ΠΊΠ°ΠΊ фиксация Π² истории управлСния вСрсиями.

Π•Ρ‰Π΅ ΠΎΠ΄Π½Π° полСзная ΠΊΠΎΠΌΠ°Π½Π΄Π°-ENV. Он позволяСт Π½Π°ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ срСды Π² процСссС сборки, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ создании ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ списком ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π·Π°

Если Π²Ρ‹ Ρ€Π°Π½Π΅Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ с вашСго ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° вмСсто ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ процСсс сборки Π½Π΅ Π·Π°ΠΉΠΌΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Наша ΠΏΠ°ΠΏΠΊΠ° содСрТит Ρ„Π°ΠΉΠ» Dockerfile, Ρ„Π°ΠΉΠ» 000-default.conf ΠΈ Ρ„Π°ΠΉΠ» start-apache. Команда dockerbuild создаст Ρ„Π°ΠΉΠ» Docker Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Если ΠΌΡ‹ сСйчас пСрСчислим наши ΠΎΠ±Ρ€Π°Π·Ρ‹ Docker, ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ наш Π½ΠΎΠ²Ρ‹ΠΉ встроСнный ΠΎΠ±Ρ€Π°Π·:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ настоящСС врСмя Ρƒ нашСго изобраТСния Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ, опция-t позволяСт Π½Π°ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ‚Π΅Π³. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ собствСнным ΠΈΠΌΠ΅Π½Π΅ΠΌ. Бинтаксис Ρ‚Π°ΠΊΠΎΠ²:

$ dockertagSOURCE_IMAGE:TAGTARGET_IMAGE:TAG

Для изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ создали, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ:

$ dockertag 19c684978566 YOUR_DOCKERHUB_USER/semaphore-demo-php-unsplash

ИспользованиС ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ DockerHub Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ пСрСносС изобраТСния Π² рССстр. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ сдСлаСм это Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ прямо сСйчас.

НашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½ΠΎ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

 

DockerCompose

ИспользованиС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ² ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ для создания ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ быстрого Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹. DockerCompose ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„Π°ΠΉΠ»Ρ‹ YAML для настройки ΠΈ запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Dockerfile нашСго прилоТСния для создания срСды ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» docker-compose.yml для запуска ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ².

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом являСтся установка DockerComposer Π½Π° Π½Π°ΡˆΡƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ инструкциям Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Docker, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия.

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ docker-compose для запуска прилоТСния Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ ускорит Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ смоТСм Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ срСду Π±Π΅Π· нСобходимости установки ΠΈΠ»ΠΈ настройки сСрвСра Apache.

ΠœΡ‹ сопоставим Ρ„Π°ΠΉΠ»Ρ‹ исходного ΠΊΠΎΠ΄Π° с www-ΠΊΠΎΡ€Π½Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π°ΠΌ Π½Π΅ придСтся ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· Docker Π²ΠΎ врСмя ΠΊΠΎΠ΄Π°.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» docker-compose.yml со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

 

 

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ наш ΠΎΠ±Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„Π°ΠΉΠ» Dockerfile, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Dockerfile.Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅. Если Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·, созданный локально ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠ½Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ‚ΠΎΡ€Π΅ Docker, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСсто этого свойство image:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ слуТбС webapp ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹, Ρ‚ΠΎΠΌΠ° ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ срСды.

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ docker-compose.yml выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Laravel ΠΈ Apache ΠΌΡ‹ устанавливаСм ΠΊΠ»ΡŽΡ‡ доступа Unsplash ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСды, поэтому нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ запускаСтся с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°ΠΌΠΈ API.

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Dockerfile.development:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ОсновноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Apache запускаСтся с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π³Ρ€ΡƒΠΏΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ ваш собствСнный—Ссли Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΡƒΡ‰Π΅Π½ΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ ($UID) ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π“Π Π£ΠŸΠŸΠ« ($GID) ΠΈ ΠΏΡ€ΠΈ нСобходимости Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ docker-composer для создания нашСго ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Команда ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΊ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρƒ, ΠΈ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ ctrl+c, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΉΡ‚ΠΈ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΡ†ΠΈΡŽ-d (docker-composerup-d). Если Ρƒ нас Π΅ΡΡ‚ΡŒ нСсколько слуТб, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, какая ΠΈΠ· Π½ΠΈΡ… (сСрвСр docker-composerup). НаконСц, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ всС Π½ΠΎΠ²Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² свой Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ:

Docker для локальной PHP Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *