91 lines
3.4 KiB
Markdown
91 lines
3.4 KiB
Markdown
---
|
|
status: stable
|
|
type: concept
|
|
tags:
|
|
- devops
|
|
- containerization
|
|
- docker
|
|
created: 2025-12-17
|
|
updated: 2026-05-07
|
|
title: 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
|
|
```
|
|
|
|
- Использование легковесных базовых образов, где есть такая возможность
|
|
|
|

|
|
|
|
## Связанные заметки
|
|
- [[Environment Variables]] — инструкция `ENV` в Dockerfile устанавливает переменные окружения внутри контейнера; это расширение того же механизма Linux env vars
|
|
- [[Volume - Docker]] — инструкция `VOLUME` в Dockerfile объявляет точки монтирования для Docker Volumes |