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— создаёт точку монтирования для работы с постоянным хранилищем.
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).