Dockerfile

Содержание
Введение
Своё название
FROM
LABEL
RUN
COPY
ENTRYPOINT
WORKDIR
EXPOSE
ENV
VOLUME
CMD
Примеры
Статьи про 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"]

Часто применяется в случае, когда нужно выполнить несколько команд сразу после запуска контейнера.

Рассмотрим пример - нужно выполнить следующий скрипт

#!/bin/bash mkdocs build tail -f /dev/null

Предварительно скрипт нужно поместить в ту директорию контейнера, в которой находится mkdocs.yml

Структура проекта

dockerfiles/ |-- Dockerfile.mkdocs `-- mkdocs `-- entrypoint.sh

WORKDIR /mkdocs/documentation COPY mkdocs/entrypoint.sh /mkdocs/documentation RUN chmod +x entrypoint.sh ENTRYPOINT ["/mkdocs/documentation/entrypoint.sh"]

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]

CMD

С помощью CMD можно выполнить какую-то интересную команду с аргументами когда контейнер запустится.

Пример запуска SSH сервера

CMD ["/usr/sbin/sshd", "-D"]

Примеры

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"]

Похожие статьи
Dockerfile
Docker
Docker Compose
Основы
build: Создание контейнеров + примеры
Ubuntu в контейнере на Windows 10
Создать контейнер с доступом по SSH
Создать контейнер с Nginx
run: Опции запуска контейнера
Make

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: