Dockerfile
Введение | |
Своё название | |
FROM | |
LABEL | |
RUN | |
COPY | |
ENTRYPOINT | |
WORKDIR | |
EXPOSE | |
ENV | |
VOLUME | |
Примеры | |
Статьи про Docker |
Введение
Dockerfile используется для создания образов.
Команда
build
создаёт образ в соответсвии с инструкциями внутри.
Если вы использовали
make
или
batch
файлы, то сможете увидеть некоторые аналогии
Своё название
По умолчанию Docker ждёт, что докерфайл называется
Dockerfile
Если вам нужно использовать несколько разных докерфайлов - можно
дать каждому своё название.
Называть докерфайлы нужно в соответсвии с
документацией
:
Dockerfile.name
Например, можно называть по имени дистрибутива или по назначению:
Dockerfile.ubuntu
,
Dockerfile.debug
и так далее
FROM
Инструкция FROM нужна, чтобы использовать другие образы. Если вам будет нужен Python можно взять готовый образ
FROM python:3.9
LABEL
Инструкция LABEL нужна, чтобы указать автора
LABEL author="andreyolegovich"
RUN
Инструкция RUN нужна, чтобы запусть команды. Например, команды Bash
RUN python -m pip install --upgrade pip
# или
RUN npm install
COPY
Когда код уже готов к продакшену инструкцией COPY его копируют в контейнер.
COPY src/ $YOUR_APP
ENTRYPOINT
Инструкция ENTRYPOINT указывает на точку входа в контейнер.
Желательно оформить в виде json массива.
ENTRYPOINT ["node", "server.js"]
WORKDIR
Инструкция WORKDIR указывает на рабочую директорию. Где данный контейнер будет запускаться.
пример
WORKDIR /var/app
EXPOSE
Инструкция EXPOSE открывает определённый порт
Например открыть порт 5000 для
Flask
EXPOSE 5000
ENV
С помощью ENV можно задать переменные окружения.
Например можно задать рабочую директорию через ENV и потом переиспользовать
ENV APP_DIR=/home/app/python
RUN mkdir -p $APP_DIR
WORKDIR $APP_DIR
COPY src/ $APP_DIR
VOLUME
С помощью VOLUME можно указать в какой диретории создать внешний раздел.
VOLUME ["/var/app"]
или несколько разделов
VOLUME ["/var/app", "/var/log]
Примеры
FROM python:3.9
ENV MICRO_SERVICE=/home/app/webapp
# set work directory
RUN mkdir -p $MICRO_SERVICE
# where your code lives
WORKDIR $MICRO_SERVICE
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install dependencies
RUN python -m pip install --upgrade pip
# copy project
COPY src/ $MICRO_SERVICE
RUN python -m pip install -r ./requirements.txt
EXPOSE 8501
CMD streamlit run app.py
Пример докерфайла для простейшего контейнера
# getting base image ubuntu # for emply image use: # FROM scratch FROM ubuntu MAINTAINER eth1.ru RUN apt-get update CMD ["echo", "HH: image is creating"]