πŸπŸ“¦ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Docker

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с Docker

Π—Π°Ρ‰ΠΎ Docker? Как Π΄Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°ΠΌΠ΅ Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² лСсСн Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€? И ΠΊΠ°ΠΊ Ρ‚ΠΎΠ²Π° улСснява ΠΆΠΈΠ²ΠΎΡ‚Π° Π½ΠΈ?

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

πŸ” Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅: Π—Π°Ρ‰ΠΎ Docker?

Ако стС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π»ΠΈ Python прилоТСния, сигурно стС забСлязали, Ρ‡Π΅ Ρ‚Π΅ чСсто работят Π½Π° вашия ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, Π½ΠΎ Π½Π΅ ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° ΠΈΠ»ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€Π° Π½Π° ΠΊΠΎΠ»Π΅Π³Π°Ρ‚Π°. 😀 ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΊΠ°Ρ‚ΠΎ липсващи зависимости, Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ вСрсии Π½Π° Python ΠΈΠ»ΠΈ Π½Π΅ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ са чСсти.

Docker Ρ€Π΅ΡˆΠ°Π²Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΒ Ρ‡Ρ€Π΅Π· създаванС Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΈ "ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ", ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ всичко Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° стартиранС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ: ΠΊΠΎΠ΄, систСмни инструмСнти, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ настройки. πŸš€

πŸ“Œ Основни прСдимства:

βœ… Π Π°Π±ΠΎΡ‚ΠΈ навсякъдС β€“ Ако Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π° вашия ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€, Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π°.
βœ… Π›Π΅ΡΠ½Π° сподСляСмост β€“ ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π° ΠΊΠΎΠ»Π΅Π³ΠΈ Π±Π΅Π· Π΄Π° Π³ΠΈ ΠΊΠ°Ρ€Π°Ρ‚Π΅ Π΄Π° инсталират Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π½Π΅Ρ‰Π°.
βœ… Π˜Π·ΠΎΠ»Π°Ρ†ΠΈΡ β€“ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚Π° Π½Π΅ си ΠΏΡ€Π΅Ρ‡Π°Ρ‚ Π΅Π΄Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎ.
βœ… Π‘ΡŠΡ€Π·ΠΎ стартиранС β€“ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΡ‚Π΅ са ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ ΠΎΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини.


πŸ› οΈ ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°: Какво Π½ΠΈ трябва?

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ, трябва Π΄Π° инсталирамС:

  1. DockerΒ (ΠžΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ сайт)
    • Windows/macOS: Π˜Π·Ρ‚Π΅Π³Π»Π΅Ρ‚Π΅ Docker Desktop
    • Linux: Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ пакСтния ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€ (Π½Π°ΠΏΡ€.Β sudo apt install docker.io)
  2. PythonΒ (вСрсия 3.7+)

🐍 Π‘Ρ‚ΡŠΠΏΠΊΠ° 1: БъздаванС Π½Π° просто Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

НСка Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π±Π°Π·ΠΎΠ²ΠΎ Flask ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

mkdir python-docker-app && cd python-docker-app

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»Β app.py:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Π—Π΄Ρ€Π°Π²Π΅ΠΉ, Docker! 🐳"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅Β requirements.txtΒ (Ρ‚ΡƒΠΊ описвамС зависимоститС):

flask==2.0.1


πŸ‹ Π‘Ρ‚ΡŠΠΏΠΊΠ° 2: ПишСм Dockerfile

Dockerfile Π΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ‚Π° Π·Π° нашия ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Π’ΠΎΠΉ описва ΠΊΠ°ΠΊ Π΄Π° сС сглоби ΠΎΠ±Ρ€Π°Π·ΡŠΡ‚.

Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Dockerfile (Π±Π΅Π· Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅) със слСдното ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅:

# ИзползвамС ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π΅Π½ Python ΠΎΠ±Ρ€Π°Π· ΠΊΠ°Ρ‚ΠΎ основа
FROM python:3.9-slim

# Π—Π°Π΄Π°Π²Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π½Π° дирСктория
WORKDIR /app

# ΠšΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ requirements.txt ΠΈ инсталирамС зависимоститС
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# ΠšΠΎΠΏΠΈΡ€Π°ΠΌΠ΅ останалитС Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅
COPY . .

# Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ
CMD ["python", "app.py"]

πŸ”Ž ОбяснСниС Π½Π° инструкциитС:

  • FROM python:3.9-slim – ИзползвамС Π»Π΅ΠΊ Python ΠΎΠ±Ρ€Π°Π· (Π±Π΅Π· излишни инструмСнти).
  • WORKDIR /app – Π—Π°Π΄Π°Π²Π°ΠΌΠ΅ Ρ€Π°Π±ΠΎΡ‚Π½Π° ΠΏΠ°ΠΏΠΊΠ° Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.
  • COPYΒ +Β RUN pip install – Π˜Π½ΡΡ‚Π°Π»ΠΈΡ€Π°ΠΌΠ΅ зависимоститС.
  • CMD – ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π°, която сС изпълнява ΠΏΡ€ΠΈ стартиранС.

πŸ—οΈ Π‘Ρ‚ΡŠΠΏΠΊΠ° 3: БъздаванС Π½Π° Docker ΠΎΠ±Ρ€Π°Π·Π°

Π˜Π·ΠΏΡŠΠ»Π½Π΅Ρ‚Π΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° (Π² ΠΏΠ°ΠΏΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°):

docker build -t python-flask-app .
  • -t python-flask-app – Π”Π°Π²Π°ΠΌΠ΅ ΠΈΠΌΠ΅ Π½Π° ΠΎΠ±Ρ€Π°Π·Π°.
  • . – Π£ΠΊΠ°Π·Π²Π°ΠΌΠ΅, Ρ‡Π΅ Dockerfile Π΅ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π°Ρ‚Π° ΠΏΠ°ΠΏΠΊΠ°.

πŸš€ Π‘Ρ‚ΡŠΠΏΠΊΠ° 4: Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

docker run -p 5000:5000 python-flask-app
  • -p 5000:5000 – ΠŸΡ€Π΅Π½Π°ΡΠΎΡ‡Π²Π° ΠΏΠΎΡ€Ρ‚ 5000 ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° към нашия ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€.

ΠžΡ‚Π²ΠΎΡ€Π΅Ρ‚Π΅ Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ Π½Π° http://localhost:5000 ΠΈ трябва Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅:

Π—Π΄Ρ€Π°Π²Π΅ΠΉ, Docker! 🐳

πŸŽ‰ ΠŸΠΎΠ·Π΄Ρ€Π°Π²Π»Π΅Π½ΠΈΡ! Π’Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ Python ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅!


πŸ”„ Π Π°Π±ΠΎΡ‚Π° с Docker Compose (ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ€)

Ако ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π²ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ услуги (Π½Π°ΠΏΡ€. Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ), Docker Compose улСснява ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ.

  1. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅Β docker-compose.yml:version: "3.8" services: web: build: . ports: – "5000:5000"
  2. Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π°ΠΉΡ‚Π΅ с:docker-compose up

πŸ€” ЧСсто срСщани ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

❌ Π“Ρ€Π΅ΡˆΠΊΠ° ΠΏΡ€ΠΈ инсталиранС Π½Π° зависимости

  • ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈΒ requirements.txtΒ Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ написан.

❌ ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ сС отваря Π½Π° localhost:5000

  • Π£Π²Π΅Ρ€Π΅Ρ‚Π΅ сС, Ρ‡Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ (docker ps).
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π΄Π°Π»ΠΈ Flask Π΅ настроСн Π΄Π° ΡΠ»ΡƒΡˆΠ° Π½Π°Β 0.0.0.0.

❌ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΡŠΡ‚ спира Π²Π΅Π΄Π½Π°Π³Π°

  • Ако ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ скрипт, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΠ²ΡŠΡ€ΡˆΠ²Π° Ρ€Π°Π±ΠΎΡ‚Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅Β CMD с Π±Π΅Π·ΠΊΡ€Π°Π΅Π½ Ρ†ΠΈΠΊΡŠΠ» ΠΈΠ»ΠΈ ΠΈΠ·Ρ‡Π°ΠΊΠ²Π°Π½Π΅.

πŸ† Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Docker прСдоставя лСсСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Python прилоТСния, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° работят Π½Π°Π²ΡΡΠΊΡŠΠ΄Π΅ Π±Π΅Π· главоболия. Π‘ няколко ΡΡ‚ΡŠΠΏΠΊΠΈ:

  1. ΠΠ°ΠΏΠΈΡˆΠ΅Ρ‚Π΅Β Dockerfile.
  2. Π‘ΡŠΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ€Π°Π· (docker build).
  3. ΠŸΡƒΡΠ½Π΅Ρ‚Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (docker run).

Π’ΠΎΠ²Π° Π΅ само Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ – Docker ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ (ΠΌΡ€Π΅ΠΆΠΈ, Ρ‚ΠΎΠΌΠΎΠ²Π΅, кластСризация с Kubernetes), Π½ΠΎ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ‚Π΅ ΡΠΎΠ»ΠΈΠ΄Π½Π° основа.

πŸš€ ΠŸΡ€ΠΎΠ±Π²Π°ΠΉΡ‚Π΅ Π³ΠΎ ΠΈ сподСлСтС Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ си! ΠΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅.


πŸ“’ Π‘ΠΏΠΎΠ΄Π΅Π»Π΅Ρ‚Π΅ Ρ‚Π°Π·ΠΈ статия, Π°ΠΊΠΎ Π²ΠΈ Π΅ Π±ΠΈΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½Π°! πŸš€

ЀСдя Π‘Π΅Ρ€Π°Ρ„ΠΈΠ΅Π²

ЀСдя Π‘Π΅Ρ€Π°Ρ„ΠΈΠ΅Π²

ЀСдя Π‘Π΅Ρ€Π°Ρ„ΠΈΠ΅Π² e собствСник Π½Π° уСбсайта urocibg.eu. Π’ΠΎΠΉ Π½Π°ΠΌΠΈΡ€Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠ²Π° Π΄Π° ΠΏΠΎΠΌΠ°Π³Π° Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π° Π΄Π° Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ ΠΈ Π½Π°ΠΉ-слоТнитС тСхничСски ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. Π‘Π΅Π³Π°ΡˆΠ½Π°Ρ‚Π° ΠΌΡƒ Ρ†Π΅Π» Π΅ Π΄Π° пишС лСсни Π·Π° слСдванС статии, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π΄Π° Π½Π΅ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚.

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€ΠΈΠΌ Π²ΠΈ Π·Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π΅Ρ‚ΠΎ Π½Π° статията! Ако Π½Π°ΠΌΠ΅Ρ€ΠΈΡ…Ρ‚Π΅ информацията Π·Π° ΠΏΠΎΠ»Π΅Π·Π½Π°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄Π°Ρ€ΠΈΡ‚Π΅ посрСдством Π±ΡƒΡ‚ΠΎΠ½ΠΈΡ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ: