📝 Docker

Dockerfile: создаём свои образы

P
Автор
PyLand Team
📅
Опубликовано
08.05.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
338
🌿
Уровень
Средний

Dockerfile — текстовый файл с инструкциями для сборки образа. Каждая инструкция — слой образа.

Минимальный Dockerfile для Python

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

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

Основные инструкции

FROM — базовый образ. Всегда первая строка.

FROM python:3.11-slim
FROM ubuntu:22.04
FROM scratch  # пустой образ

WORKDIR — рабочая директория внутри контейнера. Создаётся автоматически.

WORKDIR /app

COPY — копировать файлы с хоста в образ.

COPY app.py .          # скопировать файл
COPY . .               # скопировать всё
COPY src/ /app/src/    # скопировать папку

RUN — выполнить команду при сборке. Результат сохраняется в образ.

RUN pip install flask
RUN apt-get update && apt-get install -y curl

CMD — команда по умолчанию при запуске контейнера.

CMD ["python", "app.py"]
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]

EXPOSE — документирует порт (не открывает его, только информирует).

EXPOSE 8000

ENV — переменная окружения.

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

Сборка и запуск

# Собрать образ с тегом
docker build -t myapp:v1 .

# Собрать с другим Dockerfile
docker build -f Dockerfile.prod -t myapp:prod .

# Запустить
docker run -p 8000:8000 myapp:v1

.dockerignore

Файл .dockerignore в корне проекта — как .gitignore для Docker. Исключает файлы из контекста сборки.

.venv/
__pycache__/
*.pyc
.git/
.env
tests/
*.md

Без .dockerignore Docker копирует в образ всё включая .git и node_modules — сборка будет медленной и образ большим.

CMD vs ENTRYPOINT

# CMD — можно переопределить при запуске:
CMD ["python", "app.py"]
# docker run myapp python other.py  ← заменит CMD

# ENTRYPOINT — фиксирует команду, CMD становится аргументами:
ENTRYPOINT ["python"]
CMD ["app.py"]
# docker run myapp other.py  ← запустит python other.py

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Docker Compose: многоконтейнерные приложения

Docker Compose — инструмент для запуска нескольких связанных контейнеров как единого приложения. Конфигурация описывается в...

📅 08.05.2026 👁️ 323
📝

Что такое Docker и зачем он нужен

Docker решает одну из самых распространённых проблем в разработке: «У меня работает, а на сервере...

📅 08.05.2026 👁️ 321
📝

Multi-stage builds: уменьшаем Docker-образ

Большой образ — это медленная загрузка, больше места на диске и большая поверхность атаки. Multi-stage...

📅 30.06.2026 👁️ 318
🎓 Продолжить обучение

В каких курсах используется этот материал

Перейдите к курсу, чтобы закрепить материал на практике.

Django RequestLab: от HTTP до безопасного продакшена Открыть программу курса Docker: От хаоса к контейнерам Открыть программу курса