1 - Шпаргалка по Docker и Docker Compose (CLI)

Основные команды Docker и Docker Compose из командной строки

Основные команды Docker

Команда Описание
docker ps Список работающих контейнеров
docker ps -a Список всех контейнеров (включая остановленные)
docker images Список образов
docker pull <image> Скачать образ (например, docker pull nginx)
docker run <image> Запустить контейнер из образа
docker run -d <image> Запуск в фоновом режиме (detached)
docker run -p 8080:80 <image> Проброс портов (хост:контейнер)
docker run -v /path:/path <image> Подключение тома (volume)
docker stop <container> Остановить контейнер
docker start <container> Запустить остановленный контейнер
docker restart <container> Перезапустить контейнер
docker rm <container> Удалить контейнер
docker rmi <image> Удалить образ
docker exec -it <container> bash Войти в контейнер (интерактивный терминал)
docker logs <container> Просмотр логов контейнера
docker build -t <name> . Собрать образ из Dockerfile
docker system prune Очистка неиспользуемых данных (кэш, остановленные контейнеры)
docker network ls Список сетей

Docker Compose (управление мультиконтейнерными приложениями)

Команда Описание
docker-compose up Запуск сервисов из docker-compose.yml
docker-compose up -d Запуск в фоновом режиме
docker-compose down Остановка и удаление контейнеров
docker-compose ps Список запущенных сервисов
docker-compose logs Просмотр логов
docker-compose logs <service> Логи конкретного сервиса
docker-compose build Пересобрать образы
docker-compose exec <service> bash Войти в контейнер сервиса
docker-compose restart Перезапуск сервисов
docker-compose pull Обновить образы из docker-compose.yml

Полезные флаги

  • -d → Запуск в фоне (detached)
  • -p 80:80 → Проброс портов
  • -v /data:/app → Подключение volume
  • --name my_container → Задать имя контейнеру
  • --rm → Автоудаление контейнера после остановки
  • -e VAR=value → Передача переменных окружения

Примеры

  1. Запуск Nginx с пробросом порта
    docker run -d -p 8080:80 --name my_nginx nginx
    
  2. Сборка и запуск через Docker Compose
    docker-compose up -d --build
    
  3. Остановка всех контейнеров
    docker stop $(docker ps -aq)
    

docker --help и docker-compose --help для справки по командам.

2 - Справочник по созданию образов Docker

Полный справочник по Dockerfile и сборке образов

В этом руководстве рассмотрим:

  • Синтаксис Dockerfile
  • Основные директивы
  • Оптимизация сборки
  • Команды для работы с образами

1. Структура Dockerfile

Файл Dockerfile — это инструкция для сборки Docker-образа.

Пример минимального Dockerfile

# Базовый образ
FROM ubuntu:22.04

# Установка зависимостей
RUN apt-get update && apt-get install -y curl

# Копирование файлов в образ
COPY ./app /app

# Рабочая директория
WORKDIR /app

# Команда запуска контейнера
CMD ["python", "app.py"]

2. Основные директивы

Директива Описание Пример
FROM Базовый образ FROM python:3.9
RUN Выполнить команду при сборке RUN apt-get update
COPY Копировать файлы в образ COPY ./src /app
ADD Аналог COPY, но с распаковкой архивов и поддержкой URL ADD https://example.com/file.tar.gz /tmp
WORKDIR Установить рабочую директорию WORKDIR /app
ENV Установить переменную окружения ENV NODE_ENV=production
ARG Переменная, используемая только при сборке ARG VERSION=1.0
EXPOSE Объявить порт (не пробрасывает его!) EXPOSE 80
CMD Команда по умолчанию при запуске CMD ["npm", "start"]
ENTRYPOINT Основная команда контейнера ENTRYPOINT ["/app/start.sh"]
VOLUME Создать точку монтирования VOLUME /data
USER Задать пользователя USER nobody
HEALTHCHECK Проверка здоровья контейнера HEALTHCHECK --interval=30s CMD curl -f http://localhost/health

3. Оптимизация сборки

Многоступенчатая сборка (Multi-stage Build)

Уменьшает размер финального образа.

# 1. Этап сборки
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# 2. Финальный образ
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

Кэширование слоев

  • COPY и ADD инвалидируют кэш, если файлы меняются.
  • RUN кэшируется, если команда не менялась.

Совет: Меняющиеся команды (apt-get update) размещайте в начале.


4. Сборка и управление образами

Сборка образа

docker build -t myapp:latest .
  • -t — задать имя и тег (name:tag)
  • . — путь к Dockerfile

Сборка с аргументами

ARG VERSION=1.0
ENV APP_VERSION=$VERSION
docker build --build-arg VERSION=2.0 -t myapp:2.0 .

Просмотр истории образа

docker history myapp:latest

Экспорт/импорт образа

docker save myapp:latest > myapp.tar
docker load < myapp.tar

5. Продвинутые техники

.dockerignore

Исключает файлы из копирования (аналог .gitignore):

node_modules/
*.log
.git/

Динамический CMD/ENTRYPOINT

ENTRYPOINT ["/app/start.sh"]
CMD ["--port=8080"]

Запуск с переопределением:

docker run myapp --port=3000

Health Check

HEALTHCHECK --interval=5s --timeout=3s \
  CMD curl -f http://localhost/ || exit 1

6. Примеры для разных языков

Python (FastAPI)

FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0"]

Node.js

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
CMD ["npm", "start"]

Go

FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o /app/main .

FROM alpine:latest
COPY --from=builder /app/main /main
CMD ["/main"]

7. Полезные команды

Команда Описание
docker buildx build --platform linux/amd64,linux/arm64 -t myapp:multiarch . Сборка мультиархитектурного образа
docker scan myapp:latest Проверка на уязвимости (Snyk)
docker image prune -a Удалить неиспользуемые образы

Итог:

  • Используйте многоступенчатую сборку для оптимизации.
  • Минимизируйте количество слоев (объединяйте RUN).
  • Применяйте .dockerignore, чтобы ускорить сборку.
  • Для продакшена указывайте конкретные версии (python:3.9, а не python:latest).

3 - Очистка кеша при использовании Docker

Для очистки кэша Docker можно использовать несколько команд, в зависимости от того, что именно нужно удалить

Очистка кэша Docker на сервере

Для очистки кэша Docker можно использовать несколько команд, в зависимости от того, что именно нужно удалить:

1. Очистка неиспользуемых (висячих) образов, контейнеров, сетей и volumes

docker system prune
  • Удалит:
    • Остановленные контейнеры
    • Сети, не используемые ни одним контейнером
    • Висячие (dangling) образы (те, у которых нет тегов)
    • Висячие билд-кэш

2. Агрессивная очистка (включая неиспользуемые образы)

docker system prune -a
  • Удалит все неиспользуемые образы, а не только dangling.

3. Удаление всех остановленных контейнеров

docker container prune

4. Удаление всех неиспользуемых образам

docker image prune -a

5. Удаление кэша сборки (build cache)

docker builder prune

6. Удаление всех volumes, не привязанных к контейнерам

docker volume prune

7. Полная очистка (осторожно!)

Если нужно полностью очистить Docker (все контейнеры, образы, volumes, сети):

docker system prune -a --volumes

⚠️ Будьте осторожны! Эта команда удалит всё, что не используется в данный момент.


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

  • Просмотр занимаемого места:
    docker system df
    
  • Удаление конкретного образа:
    docker rmi <image_id>
    
  • Удаление всех образов (очень опасно!):
    docker rmi $(docker images -q)
    

Вывод

Лучший вариант для периодической очистки — docker system prune.
Если нужно освободить максимум места — docker system prune -a --volumes.

🚀 После очистки можно проверить свободное место:

df -h