🔖 Справочник: Dockerfile и команды сборки

⚡ Шпаргалка: Dockerfile и docker build

# Терминал — сборка образа
docker build -t my-image:1.0 .                   # собрать из текущей папки
docker build -t my-image -f Dockerfile.prod .    # указать другой Dockerfile
docker build --no-cache -t my-image .            # без кеша

# Терминал — запуск образа
docker run -d -p 8080:80 --name my-nginx my-image        # nginx
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=secret \
  -v pg-data:/var/lib/postgresql/data postgres:16-alpine  # postgres

1. Команда docker build

# Терминал
docker build [OPTIONS] PATH

# Основные флаги:
#   -t NAME:TAG       тег образа (имя:версия)
#   -f FILENAME       путь к Dockerfile (по умолчанию ./Dockerfile)
#   --no-cache        не использовать кеш — пересобрать всё
#   --build-arg K=V   передать ARG-переменную
#   --target STAGE    собрать до определённого этапа (multistage)
#   --platform        целевая платформа (linux/amd64, linux/arm64)

# Примеры:
docker build -t myapp:1.0 .
docker build -t myapp:latest -f ./docker/Dockerfile .
docker build --no-cache -t myapp .
docker build --build-arg APP_VERSION=2.0 -t myapp:2.0 .
docker build --target builder -t myapp-builder .

2. Инструкции Dockerfile — шпаргалка

Инструкция Назначение Пример
FROM Базовый (родительский) образ FROM python:3.12-slim
LABEL Метаданные образа LABEL maintainer="you@example.com"
WORKDIR Рабочая директория для последующих инструкций WORKDIR /app
COPY Копировать файлы/папки из контекста сборки в образ COPY requirements.txt .
ADD Как COPY, но умеет распаковывать .tar и скачивать по URL ADD archive.tar.gz /app/
RUN Выполнить команду при сборке и создать слой RUN pip install -r requirements.txt
ENV Переменная окружения (доступна в контейнере) ENV APP_ENV=production
ARG Переменная только при сборке (не в контейнере) ARG VERSION=1.0
EXPOSE Документировать порт контейнера (не открывает реально) EXPOSE 80
CMD Команда по умолчанию при запуске (переопределяется docker run) CMD ["python3", "app.py"]
ENTRYPOINT Фиксированная точка входа (аргументы docker run добавляются к ней) ENTRYPOINT ["python3", "app.py"]
USER Пользователь для выполнения команд USER appuser
VOLUME Точка монтирования для постоянного хранилища VOLUME ["/data"]
ONBUILD Команды, выполняемые при использовании образа как базового ONBUILD RUN apt-get update

3. Запуск nginx в Docker

# Терминал — запуск официального образа nginx
docker run -d -p 8080:80 --name my-nginx nginx

# Запуск своего образа со статикой (после docker build)
docker run -d -p 8080:80 --name my-nginx my-nginx-image

# Проверка работы nginx
curl http://localhost:8080
# Или открыть в браузере: http://localhost:8080

# Посмотреть логи nginx
docker logs my-nginx
docker logs -f my-nginx     # в реальном времени

# Войти в контейнер nginx для отладки
docker exec -it my-nginx bash
docker exec -it my-nginx sh  # если bash не установлен (alpine-образ)

4. Запуск БД в Docker

MySQL

# Терминал
docker run -d \
  --name mysqlDB \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -e MYSQL_DATABASE=myapp \
  -e MYSQL_USER=myuser \
  -e MYSQL_PASSWORD=userpassword \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

# Подключиться к MySQL из контейнера
docker exec -it mysqlDB mysql -u root -p

# Переменные окружения MySQL:
# MYSQL_ROOT_PASSWORD   — пароль root (обязателен)
# MYSQL_DATABASE        — создать базу данных при старте
# MYSQL_USER / MYSQL_PASSWORD — создать пользователя

PostgreSQL

# Терминал
docker run -d \
  --name postgresDB \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=my-secret-pw \
  -e POSTGRES_DB=myapp \
  -e POSTGRES_USER=myuser \
  -v pg-data:/var/lib/postgresql/data \
  postgres:16-alpine

# Подключиться к PostgreSQL из контейнера
docker exec -it postgresDB psql -U myuser -d myapp

# Переменные окружения PostgreSQL:
# POSTGRES_PASSWORD     — пароль суперпользователя (обязателен)
# POSTGRES_DB           — создать базу данных при старте
# POSTGRES_USER         — имя суперпользователя (по умолчанию postgres)

5. Управление томами

# Терминал
docker volume create mydata              # создать именованный volume
docker volume ls                         # список volumes
docker volume inspect mydata             # подробная информация (путь на хосте)
docker volume rm mydata                  # удалить volume
docker volume prune                      # удалить все неиспользуемые volumes

# Монтирование при docker run:
# Именованный volume (управляется Docker):
docker run -v mydata:/app/data myimage

# Bind mount (конкретная папка хоста):
docker run -v ./data:/app/data myimage             # относительный путь
docker run -v C:\projects\data:/app/data myimage   # Windows PowerShell
← К оглавлению урока