Это многостраничный печатный вид этого раздела. Нажмите что бы печатать.
Описание настроек Docker
- 1: Шпаргалка по Docker и Docker Compose (CLI)
- 2: Справочник по созданию образов Docker
- 3: Очистка кеша при использовании Docker
1 - Шпаргалка по Docker и Docker Compose (CLI)
Основные команды 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
→ Передача переменных окружения
Примеры
- Запуск Nginx с пробросом порта
docker run -d -p 8080:80 --name my_nginx nginx
- Сборка и запуск через Docker Compose
docker-compose up -d --build
- Остановка всех контейнеров
docker stop $(docker ps -aq)
docker --help
и docker-compose --help
для справки по командам.
2 - Справочник по созданию образов Docker
В этом руководстве рассмотрим:
- Синтаксис 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 можно использовать несколько команд, в зависимости от того, что именно нужно удалить:
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