Docker давно стал стандартом для контейнеризации, и кажется, что все уже знают его базовые возможности: контейнеры, образы, Dockerfile.
Однако за пределами стандартных операций скрывается целый мир неочевидных фишек, которые могут значительно улучшить вашу работу с контейнерами. В этой статье мы разберем 10 таких фишек, которые не просто облегчат вашу жизнь, но и могут повысить эффективность и безопасность ваших проектов.

Почему стоит снова взглянуть на Docker?
Кажется, что Docker мы уже освоили, но технологии развиваются так быстро, что даже самые опытные разработчики порой упускают новые возможности.
В 2025 году Docker по-прежнему продолжает эволюционировать, добавляя фишки, которые помогают работать быстрее, с меньшими усилиями и с повышенной безопасностью. Если вы еще не освоили некоторые из этих скрытых возможностей, то самое время обратить на них внимание.
Ведь даже если вы ежедневно используете Docker для развертывания контейнеров, есть вероятность, что вы не до конца используете его потенциал.
Docker скрывает в себе массу функций, которые могут значительно улучшить ваш рабочий процесс и помочь в решении типичных проблем, с которыми сталкиваются DevOps специалисты.
1. Многоконтейнерные приложения с Docker Compose
Docker Compose — это инструмент, который позволяет вам управлять несколькими контейнерами одновременно с помощью одного файла конфигурации. Но что если я скажу вам, что Docker Compose может значительно упростить не только разработку, но и тестирование приложений?
С помощью Compose можно настроить не просто зависимости между контейнерами, но и контролировать их поведение, автоматизировать тесты и управлять многокомпонентными приложениями. Не ограничивайтесь только базовыми настройками, используйте переменные окружения и секреты для гибкости и безопасности.
Пример:
yaml
version: '3.7'
services:
web:
image: myapp:latest
ports:
- "5000:5000"
environment:
- DEBUG=false
db:
image: postgres:latest
environment:
- POSTGRES_PASSWORD=mysecretpassword
Docker Compose позволяет не только запускать несколько сервисов, но и управлять их взаимодействием, настройками и зависимостями.
2. Монтирование временных файлов с tmpfs
Вам нужно часто работать с временными файлами или базами данных в контейнерах, но хотите минимизировать риск потери данных при аварийном завершении работы контейнера? Используйте tmpfs.
Монтируя том на основе tmpfs, вы можете хранить временные файлы в памяти, а не на диске. Это особенно полезно для приложений, которые интенсивно используют данные, но не требуют постоянного хранения.
Пример:
bash
docker run --tmpfs /tmp:rw,size=100m myapp
Это решение не только ускоряет работу с данными, но и улучшает безопасность, поскольку данные не записываются на диск и исчезают при остановке контейнера.
3. Запуск контейнера в фоновом режиме с docker run -d
Многие используют опцию docker run -d для того, чтобы запустить контейнер в фоновом режиме. Однако стоит помнить, что на деле эта опция не только упрощает запуск, но и позволяет отслеживать логи и управлять контейнерами через Docker Compose.
Запуск контейнера в фоновом режиме с помощью флага -d идеально подходит для автоматизированных процессов, например, в CI/CD пайплайнах, где необходимо быстро развернуть контейнеры без блокировки терминала.
4. Оптимизация образов с помощью docker build --squash
Каждому разработчику, работающему с Docker, знакома проблема больших Docker-образов. Каждый слой Docker-образа увеличивает его размер, что может сделать ваше приложение неуклюжим. Используя флаг --squash, вы можете объединить слои и уменьшить размер образа.
Пример:
bash
docker build --squash -t myapp .
Эта фишка поможет вам сэкономить место и ускорить процесс деплоя, избавившись от лишних слоев.
5. Использование мульти-этапных билдов
Мульти-этапные билды позволяют вам разделить процесс сборки и финального образа. Это позволяет исключить из конечного образа ненужные зависимости, такие как утилиты для сборки, что значительно уменьшает его размер.
Пример:
Dockerfile
# Этап сборки
FROM node:14 AS build
WORKDIR /app
COPY . .
RUN npm install
# Финальный этап
FROM node:14
WORKDIR /app
COPY --from=build /app .
CMD ["npm", "start"]
Мульти-этапный билд позволяет вам оптимизировать Docker-образы, сократить их размер и улучшить безопасность.
6. Работа с секретами через Docker Swarm
В Docker Swarm можно хранить конфиденциальную информацию, такую как пароли и API-ключи, используя Docker Secrets. Это помогает обезопасить ваше приложение, исключив необходимость хранить секреты в открытом виде внутри контейнера.
Пример:
bash
echo "mysecretpassword" | docker secret create db_password -
Используя секреты в Docker, вы можете управлять конфиденциальной информацией более безопасно и гибко.
7. Использование docker cp для обмена файлами с контейнерами
Зачастую вам нужно получить доступ к файлам внутри контейнера или наоборот — экспортировать их наружу. Docker предоставляет команду docker cp, которая позволяет копировать файлы между контейнерами и хостом.
Пример:
bash
docker cp mycontainer:/path/to/file /local/path
Это поможет вам без проблем получать и передавать данные между хостом и контейнером.
8. Использование проксирования с docker run -p
Многие разработчики используют флаг -p для проксирования портов. Однако Docker поддерживает не только простое проксирование, но и возможность маппинга нескольких портов на контейнер.
Пример:
bash
docker run -p 8080:80 -p 8443:443 myapp
С помощью этой фишки вы можете настроить проксирование на несколько портов, что особенно полезно при работе с приложениями, которые требуют нескольких сервисов.
9. Установка ограничений на ресурсы с помощью --memory и --cpu
Если ваш контейнер потребляет слишком много ресурсов, вы можете ограничить количество памяти и CPU, выделяемых для контейнера. Это поможет не только предотвратить «зависания», но и оптимизировать использование ресурсов на сервере.
Пример:
bash
docker run --memory=1g --cpu-shares=512 myapp
Установка лимитов на ресурсы позволяет вам контролировать использование Docker-контейнерами системных ресурсов, что важно для стабильной работы в продакшне.
10. Использование docker stats для мониторинга контейнеров
Команда docker stats предоставляет в реальном времени информацию о потребляемых контейнерами ресурсах — CPU, памяти, сети и других.
Пример:
bash
docker stats --all
Эта команда позволяет вам отслеживать, сколько ресурсов использует каждый контейнер, и помогает оптимизировать его работу.
Заключение
Docker — это не просто инструмент для контейнеризации. Это целая экосистема, которая позволяет разрабатывать и развертывать приложения быстро, эффективно и безопасно.
Но для того чтобы извлечь из Docker максимальную пользу, нужно выходить за рамки базовых команд и функций.
С использованием фишек, о которых мы поговорили, вы сможете ускорить процесс разработки, повысить безопасность и улучшить производительность ваших контейнеров.
Не забывайте: важно не только то, как вы используете Docker, но и как вы его понимаете.