--- status: stable type: concept tags: - devops - containerization - docker created: 2025-12-17 updated: 2026-05-07 aliases: - Images, Dockerfile - Docker --- # Images, Dockerfile - Docker Запуск контейнеров происходит на основе images (образов). Образы собираются с помощью Dockerfile. Основные инструкции в Dockerfile: - **FROM** - использование базового образа  - **RUN** - выполнение команд и создание слоя образа - **COPY** - копирование в контейнер файлов и папок - **ADD** - аналогично COPY, но с распаковкой архивов Дополнительные: - _LABEL_ - описание метаданных - _ENV_ - задание переменных среды - _CMD_ - описание команд с аргументами для выполнения при запуске контейнера - _WORKDIR_ - задание рабочей директории для следующей инструкции - _ARG_ - задание переменных для передачи во время сборки - _ENTRYPOINT_ - предоставление команды с аргументами для вызова во время выполнения контейнера - _VOLUME_ - создание точки монтирования для работы с docker volume - _EXPOSE_ - открытие порта в контейнере > Все эти команды создают отдельный слой (layer) для сборки контейнера ## Оптимизация Образа ```dockerfile FROM ubuntu RUN apt update RUN apt install python3 -y RUN apt install python3-dev -y ``` - Сокращение инструкций **RUN** (уменьшение количества слоев) ```dockerfile FROM ubuntu RUN apt update RUN apt install python3 python3-dev -y ``` > Docker будет пересобирать только те слои, которые были изменены ```dockerfile FROM ubuntu RUN apt update && \ apt install python3 python3-dev -y ``` - Удаление кеша пакетных менеджеров ```dockerfile RUN apt update && \ apt install python3 python3-dev -y \ rm -rf /var/lib/apt/lists/* ``` - Удаление файлов в той же инструкции, где их создавали - Инструкции, которые предположительно будут часто изменяться, ставить ниже остальных - Сокращение количество инструкций **COPY** ```dockerfile RUN apt update && \ apt install python3 python3-dev -y \ rm -rf /var/lib/apt/lists/* COPY file1 file2 file3 ./dir ``` - Использование легковесных базовых образов, где есть такая возможность ![](Images,%20Dockerfile%20-%20Docke.png) ## Связанные заметки - [[Environment Variables]] — инструкция `ENV` в Dockerfile устанавливает переменные окружения внутри контейнера; это расширение того же механизма Linux env vars - [[Volume - Docker]] — инструкция `VOLUME` в Dockerfile объявляет точки монтирования для Docker Volumes