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)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!