Files
SecondBrain/90 Library/Containers/Docker/Images, Dockerfile - Docker.md
T
2026-05-24 15:03:28 +03:00

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
```
- Использование легковесных базовых образов, где есть такая возможность
![](Images,%20Dockerfile%20-%20Docke.png)
## Связанные заметки
- [[Environment Variables]] — инструкция `ENV` в Dockerfile устанавливает переменные окружения внутри контейнера; это расширение того же механизма Linux env vars
- [[Volume - Docker]] — инструкция `VOLUME` в Dockerfile объявляет точки монтирования для Docker Volumes