TGViewer
LinuxSkill - Сводки с прода и Шпаргалки LinuxSkill - Сводки с прода и Шпаргалки @linuxskill · 10.7K subscribers
Post #985 3K
📘 Энциклопедия Docker: 10 лучших практик для production

Привет, цифровой архитектор!

У тебя нет времени искать тонкости настройки Docker?
Собрал для тебя 10 ключевых команд и приёмов из архитектурных гайдов, которые обязательно нужно сохранить для работы в production.

1. Безопасность: Непривилегированный пользователь

Никогда не запускай контейнеры от имени root. Атакующий может получить права root на хосте.

# В Dockerfile создаем группу и непривилегированного пользователя 'app'
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app # Всегда переключаемся на непривилегированного пользователя


2. Ограничение возможностей ядра (Capabilities)

Docker по умолчанию включает много возможностей, но лучше их отключить и добавить только необходимые.

# Сбрасываем все Capabilities (CAP_DROP ALL)
docker run -ti --cap-drop ALL debian /bin/bash

# Добавляем только возможность привязки к низким портам (<1024)
docker run --cap-drop all --cap-add CAP_NET_BIND_SERVICE alpine:latest sh

# Запрет на повышение привилегий (hardening)
docker run --security-opt=no-new-privileges ubuntu bash


3. Оптимизация Dockerfile: Слияние RUN

Каждая инструкция RUN создает новый уровень (layer), увеличивая размер образа. Объединяйте команды с && для минимизации слоев.

# Плохо: 3 отдельных слоя
RUN apk update
RUN apk add nodejs nodejs-npm
RUN mkdir -p /app/public

# Хорошо: одна инструкция, один слой
RUN apk update && \
apk add nodejs nodejs-npm && \
mkdir -p /app/public /app/server


4. Управление томами (Volumes)

Для сохранения постоянных данных используй тома (VOLUME).

# Создание тома на хосте (local driver по умолчанию)
docker volume create my_data_vol

# Просмотр информации о томе (включая путь на хосте)
docker volume inspect my_data_vol

# Удаление всех неиспользуемых томов (используй с осторожностью!)
docker volume prune


5. Очистка системы

Для избежания беспорядочного роста образов и контейнеров (image sprawl).

# Удаление остановленных контейнеров
docker rm $(docker ps -aq -f status=exited)

# Удаление неиспользуемых (висячих) образов
docker rmi $(docker images -q -f dangling=true)

# Полная очистка: контейнеры, образы, сети, тома
docker system prune -a


6. Режимы работы с сетью

Docker по умолчанию использует режим bridge (мост), который изолирует контейнеры в частной сети.

# Просмотр активных сетевых режимов (по умолчанию: bridge, none, host)
docker network ls

# Запуск контейнера в режиме хоста (убирает изоляцию, но дает скорость)
docker run --net=host -d my_app

# Создание изолированной сети, чтобы контейнеры видели друг друга по имени
docker network create my_custom_net
docker run --network my_custom_net --name redis_db redis


7. Работа с образами и тегами

Для контроля версий всегда используй конкретные теги, а не latest.

# Получение образа с конкретным тегом
docker pull debian:jessie

# Построение образа с явным указанием тега
docker build -t my_app:v1.2 .

# Использование дайджеста для абсолютной гарантии версии
FROM redis@sha256:3479bbcab384fa343b52743b933661335448f8166203688006...


8. Использование docker exec вместо SSH-демонов

Не запускай SSH-демон внутри контейнера. Для отладки используй docker exec.

# Запуск bash внутри активного контейнера (интерактивно)
docker exec -it <CONTAINER_ID> /bin/bash

# Запуск команды внутри контейнера без входа в оболочку
docker exec -it my_web_container ls -l /var/log


9. Настройка ресурсов (cgroups)

Ограничивай ресурсы (CPU, Memory), чтобы избежать DoS-атак или утечек памяти.

# Ограничение памяти (128 Мб)
docker run -it --rm -m 128m my_app

# Ограничение использования CPU (только ядра 0 и 1)
docker run -it --rm --cpuset=0,1 -c 2 my_app


10. Постоянный контроль состояния

Для избежания проблем, связанных с перезапуском и изменяемостью.

# Просмотр запущенных контейнеров
docker ps

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

# Просмотр подробной конфигурации контейнера (JSON)
docker inspect <CONTAINER_ID>

# Получение журналов (STDOUT/STDERR)
docker logs <CONTAINER_ID>


#Docker #DevOps #Security #CLI #Hardening
  • 👍 12
  • 🔥 1
More from @linuxskill
  1. Oct 7, 2026Post #1243
  2. Oct 6, 2026GitOps-практики: развёртываем сервис через ArgoCD Классический CI/CD запускает деплой. Но…
  3. Oct 5, 2026Post #1241
  4. Oct 2, 2026📊 Диск тормозит, а iostat показывает норму? Ищем хвост задержек Приложение подвисает на з…
  5. Sep 30, 2026💀 CPU под 100%, а в top пусто? Ловим невидимые процессы через eBPF Сервер греется, в шапк…
  6. Sep 28, 2026🔥 Знаешь только ip a? 10 неочевидных команд ip для Linux Большинство админов знают про ip…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →