# Терминал
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