← Назад к вопросам

Какими командами собирал Docker

1.2 Junior🔥 221 комментариев
#Docker и контейнеризация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Docker Commands для сборки и управления образами и контейнерами

В качестве DevOps Engineer с десятилетним опытом, я активно использую Docker для создания, сборки и управления контейнерами. Вот ключевые команды, которые я регулярно применяю в работе.


Основные команды для сборки (Build)

Основная команда для сборки Docker-образов — docker build.

docker build -t myapp:latest .
  • -t myapp:latest — задаёт имя (myapp) и тег (latest) для создаваемого образа.
  • . — указывает контекст сборки (путь к директории с Dockerfile).

Практические примеры и параметры:

# Сборка с указанием конкретного Dockerfile
docker build -f ./backend/Dockerfile.prod -t backend:v1.0 ./backend

# Сборка без использования кэша слоёв (для чистого тестирования)
docker build --no-cache -t myapp:test .

# Сборка с указанием целевой архитектуры (например, для ARM)
docker build --platform linux/arm64 -t myapp:arm .

# Сборка с ограничением ресурсов (например, памяти)
docker build --memory 512m -t myapp:optimized .

Dockerfile — это инструкция для сборки. Внутри него используются команды, которые Docker выполняет последовательно:

  • FROM — базовый образ.
  • COPY / ADD — добавление файлов в образ.
  • RUN — выполнение команд во время сборки (например, установка пакетов).
  • CMD / ENTRYPOINT — команда для запуска контейнера.

Команды для управления образами (Images)

После сборки образ нужно проверить, протестировать и возможно опубликовать.

# Список всех локальных образов
docker images
# Или более современный вариант
docker image ls

# Удаление образа
docker image rm myapp:latest

# Пометка образа для реестра (например, Docker Hub)
docker tag myapp:latest myregistry.com/team/myapp:1.0

# Публикация образа в реестр
docker push myregistry.com/team/myapp:1.0

Команды для работы с контейнерами (Containers)

Сборка создаёт образ, но для запуска приложения нужен контейнер.

# Запуск контейнера из собранного образа
docker run -d --name myapp-container -p 8080:80 myapp:latest

# Параметры:
# -d  — запуск в detached mode (в фоне)
# --name — присвоение имени контейнеру
# -p 8080:80 — проброс портов (host:container)

# Проверка запущенных контейнеров
docker ps
# Проверка всех контейнеров (включая остановленные)
docker ps -a

# Остановка контейнера
docker stop myapp-container

# Удаление контейнера
docker rm myapp-container

# Просмотр логов контейнера (очень важно для диагностики)
docker logs myapp-container

# Реальный пример запуска с переменными окружения и volume
docker run -d \
  --name myapp-prod \
  -p 80:8080 \
  -e DATABASE_URL="postgres://user:pass@host/db" \
  -v /host/data:/app/data \
  myapp:latest

Усовершенствованные команды сборки и оптимизации

В современной практике мы часто используем мультистадийные сборки (multi-stage builds) в Dockerfile для уменьшения размера итогового образа.

# Пример multi-stage Dockerfile
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

FROM alpine:latest AS runtime
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]

Для сборки такого файла команда docker build не меняется, но результат будет гораздо легче (финальный образ на основе alpine, без всего инструментария Go).

Дополнительные полезные команды для сборки:

# Экспорт образа в файл для передачи или архивирования
docker save -o myapp.tar myapp:latest

# Импорт образа из файла
docker load -i myapp.tar

# Проверка истории сборки образа (показывает слои)
docker history myapp:latest

# Инспекция образа (детальная информация, включая слои, переменные окружения)
docker image inspect myapp:latest

Инструменты и практики для эффективной сборки

  • BuildKit: Современный движок сборки от Docker. Включается через переменную окружения DOCKER_BUILDKIT=1 или в настройках daemon. Он обеспечивает параллельную сборку, улучшенный кэш и секреты во время сборки.
    export DOCKER_BUILDKIT=1
    docker build --secret id=mysecret,src=./secret.txt -t myapp:secure .
    
  • .dockerignore: Файл, аналогичный .gitignore, который исключает файлы из контекста сборки, уменьшая его размер и увеличивая скорость.
    # Пример содержимого .dockerignore
    *.log
    .git
    node_modules
    Dockerfile
    
  • Параметризованные сборки с --build-arg: Передача аргументов в Dockerfile.
    docker build --build-arg VERSION=1.2.3 -t myapp:$VERSION .
    

Итог: Основной команда сборки — docker build. Однако эффективная работа с Docker требует комплексного использования целого ряда команд: docker image для управления образами, docker run для запуска контейнеров, а также вспомогательных команд для инспекции (inspect, history), очистки (rm, prune) и публикации (tag, push). Ключ к успеху — не только знание команд, но и понимание лучших практик: использование мультистадийных сборок, .dockerignore и оптимизации контекста для быстрых и безопасных pipeline в CI/CD.

Какими командами собирал Docker | PrepBro