Skip to main content

Dockerfile

CMD и ENTRYPOINT в Dockerfile

CMD и ENTRYPOINT инструкции Dockerfile задают команду, исполняемую при запуске контейнера. При их использовании есть несколько правил, например: Должна быть минимум одна из них, CMD или ENTRYPOINT, в Dockerfile. Если контейнер используется как исполняемый файл — ENTRYPOINT должна быть определена. Если контейнер запускается с другими аргументами — CMD будет переопределена.

  • FROM — задаёт базовый (родительский) образ.
  • LABEL — описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.
  • ENV — устанавливает постоянные переменные среды.
  • RUN — выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.
  • COPY — копирует в контейнер файлы и папки.
  • ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
  • CMD — описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.
  • WORKDIR — задаёт рабочую директорию для следующей инструкции.
  • ARG — задаёт переменные для передачи Docker во время сборки образа.
  • ENTRYPOINT — предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.
  • EXPOSE — указывает на необходимость открыть порт.
  • VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.
Упаковка PyWebApp in Docker
FROM python:3.9.7-alpine3.14
ENV PYTHONUNBUFFERED 1
LABEL VERSION="1.0.0"
LABEL MAINTAINER="Andrey Bondariev"
LABEL EMAIL="andreybond13@gmail.com"
LABEL NAME="Flask Web Application"
WORKDIR /FlaskWebApp
ADD main.py .
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY ./app ./app
EXPOSE 80
CMD [ "python3", "./main.py" ]

Установка для PYTHONUNBUFFERED непустого значения (1) гарантирует, что вывод Python, т. е. потоки stdout и stderr, отправляются прямо на терминал (например, лог контейнера) без предварительной буферизации, и что вы можете видеть вывод вашего приложения (например, логи Django) в реальном времени. время. Это также гарантирует, что частичный вывод не будет храниться где-то в буфере и никогда не будет записываться в случае сбоя приложения Python. PYTHONUNBUFFERED абсолютно не влияет на ввод (то есть поток stdin).

Understanding the image layers

Writing a Dockerfile

Build, tag, and publish an image

Using the build cache

Multi-stage builds