Docker простыми словами – Telegram
Docker простыми словами
6.28K subscribers
219 photos
28 videos
3 files
123 links
Сообщество по докеру.

Рассказываем про docker и его применение в программировании и тестировании.

Открыты к критике и ждем вашего фидбека.
@viktorreh @anothertechrock
Download Telegram
💡 Docker Tip: ускоряем сборку с помощью BuildKit + Target Stage

Многие знают про docker build, но редко используют BuildKit + multi-stage с опцией `--target` для локальной отладки.

👉 Если у тебя много стадий (например, build + тесты + production), ты можешь не собирать всё каждый раз, а запускать только нужную стадию:

Пример:


DOCKER_BUILDKIT=1 docker build --target dev-stage -t myapp:dev .


📈 Что это даёт:

- ⚡️ Пропускаешь финальную сборку (например, оптимизацию прод-образа)
- 🔍 Быстро тестируешь только нужный слой (например, dev-stage)
- 💾 Экономишь кэш и ускоряешь сборку — собирается только то, что нужно

🔥 Включи BuildKit по умолчанию

Добавь в файл ~/.docker/config.json:


{
"features": {
"buildkit": true
}
}


Теперь docker build всегда использует BuildKit — он быстрее, лучше кэширует и умеет собирать слои параллельно.

---

🎯 Бонус-совет: кэш зависимостей через RUN --mount=type=cache

Для Python:


RUN --mount=type=cache,target=/root/.cache \
pip install -r requirements.txt


Для npm:


RUN --mount=type=cache,target=/root/.npm \
npm install


Это ускоряет повторные билды на десятки процентов 💨

👀 Итог:
Не просто строй Docker-образы — строй их умно. BuildKit + правильные таргеты + кэш → твой билд летает 🚀
👍73
А ты сможешь пройти тест на «Data Engineer»?

🔥 ПРОЙТИ ТЕСТ: https://vk.cc/cMqglw

Проверь себя - пройди тест и оцени свой уровень навыков, а также свою готовность к обучению на курсе — «Data Engineer» от Отус.

Про курс! Под руководством практикующих экспертов ты сможешь:
💚освоить инструменты data-инженерии
💚изучить на практике Apache Spark, Airflow и ClickHouse, 💚создавать эффективные ETL-процессы и пайплайны обработки данных

🎁 Промокод на доп.скидку на курс DE_10 до 31 мая, позволяющий увеличить скидку до 20% со скидками мая.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 8 советов и приёмов Docker

1. 🔄 Включите VirtioFS для ускоренной работы с файлами на Mac
Если вы используете Docker на macOS, включите VirtioFS — это современный способ шаринга файлов между хостом и контейнером. Он быстрее традиционного osxfs. Это особенно заметно при работе с Node.js, Golang и другими языками с множеством файлов.

👉 Docker Desktop → Settings → Experimental Features → Enable VirtioFS

2. 🧪 Используйте Docker Scout для анализа уязвимостей
Docker Scout позволяет находить и устранять уязвимости в образах. Он интегрируется с Docker Desktop и CLI, позволяя видеть CVE прямо в терминале:

docker scout cves nginx:latest

3. 🌐Используйте Docker Dev Environments для совместной работы над проектами.

Создавайте и делитесь полностью настроенными dev-средами — вы можете заранее настроить окружение для разработки (dev-среду): установить все необходимые программы, зависимости, настройки и т.д.

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

Отлично для онбординга новых разработчиков — это сильно ускоряет процесс подключения новых людей к проекту: им не надо тратить время на установку и настройку ПО, всё уже готово.

Всё основано на Docker Desktop и Compose — для работы используется программа Docker Desktop и инструмент Docker Compose (описывает, какие контейнеры запускать и как их настраивать).

Пример:
Ты можешь создать dev-среду с нужной версией Python, Node.js, базой данных и всеми зависимостями, сохранить её как dev environment и отправить ссылку коллеге. Он открывает её через Docker Desktop и сразу получает полностью готовую среду — без ручных установок.


4. ☁️ Ускорьте сборку образов с Docker Build Cloud
Docker Build Cloud теперь доступен всем. Это облачная сборка, которая сокращает время билда до 70%. Используйте её в больших проектах и CI/CD.

Ссылка: https://www.docker.com/products/docker-build-cloud/


5. 📦 Расширьте Docker Desktop с помощью Extensions
Можно добавлять расширения — например, для управления контейнерами, базами данных, или даже для генерации кода. Всё через интерфейс Docker Desktop. Можно создавать свои.

6. 🚦 Добавьте HEALTHCHECK в образы
Это поможет отслеживать работоспособность контейнера. Например:

HEALTHCHECK CMD curl --fail http://localhost:3000/health || exit 1

7. 🧰 Используйте docker init для быстрого старта
Команда docker init автоматически создаёт Dockerfile и docker-compose.yml на основе вашего проекта. Быстро, просто, удобно.

docker init

8. 📊 Отслеживайте изменения с помощью docker scout compare
Сравнивайте два образа и смотрите, какие слои, пакеты и уязвимости изменились:

docker scout compare my-image:v1 my-image:v2
👍6👌1
Большой тест по Docker для новичков из 85 вопросов - https://qarocks.ru/test_post/big-docker-quiz/

Проходите и пишите у кого 85 из 85:)

P.S если найдете ошибки в ответах, присылайте попросим исправить)
🔥75👌1
«Штурвал 2.10»: встречайте поддержку Yandex Cloud и настоящую мультитенантность

10 июня в 17:00 мск встречаемся на обзорном вебинаре по релизу Kubernetes-платформы «Штурвал 2.10». Ребята из «Лаборатории Числитель» расскажут про два самых интересных обновления:

▪️Поддержку провайдера Yandex Cloud — как управлять кластерами в этом облаке так же, как у себя в инфраструктуре.

▪️Появление тенантов — как централизованно управлять доступами на понятных для бизнеса абстракциях, например, таких как «департамент», «система» и «окружение».

Вебинар будет интересен DevOps-инженерам, разработчикам, сотрудникам служб эксплуатации, специалистам по информационной безопасности, руководителям и всем, кто заинтересован в контейнеризации.

✔️ Регистрация
💩2🤔1🐳1
Docker for Developers

Автор: Richard Bullington-McGuire
Год издания: 2020

#docker #en

Скачать книгу
👍1💩1
🐳 Задача для продвинутых DevOps-инженеров: «Странный Docker контейнер, который тормозит хост»

🧠 Уровень: Senior DevOps / SRE
🎯 Цель: Найти причину деградации хост-системы при работе контейнера, не убивая продакшен

📍 Ситуация:

Ты запускаешь относительно простой контейнер:

docker run --rm myapp:latest



Через несколько минут:
- Уровень load average на хосте резко подскакивает
- CPU не перегружен, но система начинает "подвисать"
- Контейнер *не* использует много CPU или памяти (по `docker stats`)
- top и iotop на хосте — ничего подозрительного
- Но хост "лагает", SSH подключается с задержками, htop еле прокручивается

📦 Контейнер собран из Dockerfile:


FROM ubuntu:22.04
COPY . /app
WORKDIR /app
CMD ["python3", "main.py"]

  🧩 Ваша задача:

1. Объяснить, как контейнер может вызывать *нагрузку на хост*, не показывая это в docker stats
2. Найти потенциальную причину такой деградации
3. Предложить способ отладки, не убивая контейнер
4. Предложить защиту от подобных сценариев на уровне docker run и docker-compose
5. Написать Dockerfile и docker run с ограничениями, чтобы контейнер больше так не вел себя

💡 Подсказка:
Некоторые контейнеры могут порождать *огромное количество процессов* или использовать слишком много I/O операций с tmpfs или сокетами, перегружая не CPU, а системные лимиты ядра.

🛠 Решение:

1. Проверяем количество процессов:


ps -eLf | wc -l


2. Выясняем, что контейнер запускает тысячи потоков (например, while True: os.fork() или Thread() без лимита в main.py)

3. Используем strace`/`nsenter для анализа PID пространства:


docker inspect <container_id> | grep Pid
nsenter -t <pid> -a htop


4. Ставим лимиты:
- Через --pids-limit:


docker run --pids-limit 100 --memory=256m --cpus="0.5" myapp:latest

- Или в docker-compose.yml:


deploy:
resources:
limits:
cpus: "0.5"
memory: 256M


5. Добавляем в Dockerfile:


ENV PYTHONUNBUFFERED=1


📌 Вывод:
Контейнеры могут перегружать хост не по CPU/Memory, а по количеству потоков, сокетов, inode или I/O. Это не видно в docker stats, но критично для стабильности. Решение — выставлять ограничения (ulimit, pids, memory) и проверять, что внутри контейнера не бесконечный форк/спам.

💬 Отличный сценарий для продвинутого собеса на DevOps / Platform-инженера.
13
Расширенный_гайд_по_Docker_для_DevOps_специалистов_1_2.pdf
391.1 KB
🐳 Docker без боли: Огромный гайд от новичка до профи

🚀 Пришло время расставить всё по полочкам. В этом большом гайде ты узнаешь:

• как устроен Docker изнутри
• как упаковать любое приложение в контейнер
• как запускать десятки сервисов одной командой
• как дебажить, оптимизировать и защищать контейнеры
• как не сойти с ума с volumes, networks и образами

🎯 Без скучной теории — только практические команды, схемы и лайфхаки от тех, кто использует Docker в продакшене.
Сохраняй и делись с коллегами, чтобы не потерять

👉 Читать онлайн
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍7
🧠 DevOps-задача: "Обманчиво здоровый контейнер"

Условие:
У тебя настроен Docker-контейнер с приложением и прописан HEALTHCHECK в Dockerfile:


HEALTHCHECK CMD curl --fail http://localhost:8080/health || exit 1


В CI всё работает. В Kubernetes — контейнер вечно “healthy”, но:
- Метрики не собираются
- Ответы приложения не приходят
- От клиентов жалобы
- Никаких рестартов пода не происходит

При этом kubectl describe pod показывает статус: Ready: True, Containers: healthy

Задача:
Найди источник проблемы, объясни, почему HEALTHCHECK ничего не выявляет, и предложи реальное решение.

Разбор:

🔍 Подвох №1: HEALTHCHECK в Docker — не работает в Kubernetes

- Kubernetes игнорирует HEALTHCHECK, прописанный в Dockerfile
- Вместо этого использует livenessProbe и readinessProbe, заданные в манифесте YAML

📌 Поэтому контейнер кажется "здоровым", но на самом деле Kube о нём ничего не знает


🛠 Решение:

В deployment.yaml пропиши:


livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10

readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 2
periodSeconds: 5


Это активирует реальную проверку на уровне Kubernetes и позволит поду:
- перезапускаться при зависании (liveness)
- исключаться из сервисов (readiness)

🎯 Что проверяет задача:

• Понимание различий между Docker и Kubernetes health mechanisms
• Навык выявления "ложноположительных" статусов
• Умение читать реальные признаки деградации (метрики, жалобы, тайм-аут)
• Установка правильных probes — ключ к HA-системам

💡 В реальной жизни такие ошибки ведут к "здоровым", но абсолютно мертвым сервисам.
👍12👎32
⚡️ Топ-3 полезных советов для Docker на сегодня:

1️⃣ Очищайте билд-кэш через --no-cache-filter.
Вместо полной очистки кэша (docker builder prune) удаляйте только указанные слои:

docker builder prune --filter 'until=24h' --no-cache-filter alpine


2️⃣ Добавьте в .dockerignore следующие строки:

.git
node_modules
*.log
pycache/
*.tmp


Это сократит размер контекста сборки на 50–90%, особенно в проектах с большим числом зависимостей или history-heavy репозиториями.

Меньше контекста → быстрее копирование → быстрее билд.

3️⃣ Чтобы увидеть Dockerfile любого образа с Docker Hub используйте:

docker history --no-trunc <image> | tac | awk -F' /bin/sh -c ' '{print $2}'
👍121
💡 Docker Tip: ускоряем сборку с помощью BuildKit + Target Stage

Многие знают про docker build, но редко используют BuildKit + multi-stage с опцией `--target` для локальной отладки.

👉 Если у тебя много стадий (например, build + тесты + production), ты можешь не собирать всё каждый раз, а запускать только нужную стадию:

Пример:


DOCKER_BUILDKIT=1 docker build --target dev-stage -t myapp:dev .


📈 Что это даёт:

- ⚡️ Пропускаешь финальную сборку (например, оптимизацию прод-образа)
- 🔍 Быстро тестируешь только нужный слой (например, dev-stage)
- 💾 Экономишь кэш и ускоряешь сборку — собирается только то, что нужно

🔥 Включи BuildKit по умолчанию

Добавь в файл ~/.docker/config.json:


{
"features": {
"buildkit": true
}
}


Теперь docker build всегда использует BuildKit — он быстрее, лучше кэширует и умеет собирать слои параллельно.

---

🎯 Бонус-совет: кэш зависимостей через RUN --mount=type=cache

Для Python:


RUN --mount=type=cache,target=/root/.cache \
pip install -r requirements.txt


Для npm:


RUN --mount=type=cache,target=/root/.npm \
npm install


Это ускоряет повторные билды на десятки процентов 💨

👀 Итог:
Не просто строй Docker-образы — строй их умно. BuildKit + правильные таргеты + кэш → твой билд летает 🚀
👍52
The Docker Book

Автор: James Turnbull
Год издания: 2019

#docker #en #книга

Скачать книгу
🖥 Пригодится при работе с Docker
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23😁7👍31
🖥 Наглядно: Как работает Docker
Please open Telegram to view this post
VIEW IN TELEGRAM
7😴2👍1
🔍 Dockle — линтер для проверки безопасности Docker-образов. Этот инструмент сканирует контейнеры на соответствие best practices и CIS Benchmark, выявляя потенциальные уязвимости. В отличие от Hadolint, Dockle проверяет уже собранные образы, включая структуру файлов, права доступа и наличие уязвимых зависимостей.

Проект поддерживает интеграцию с CI/CD и выводит результаты в JSON или SARIF-формате. Можно игнорировать определенные проверки через .dockleignore или гибко настраивать уровни критичности. Для запуска не нужны сложные зависимости — достаточно бинарного файла или Docker-образа.

🤖 GitHub

@Docker
2👍2
🐳 Что если вам нужно запустить чужой (возможно небезопасный) код?

Представьте: вам прислали бинарник, Python-скрипт или npm-пакет, и его надо выполнить.
Вы не знаете, что внутри — а вдруг там rm -rf /, попытка выйти из контейнера, майнер или установка root-доступа?

🔥 Первый инстинкт: запустить в Docker. Кажется, контейнер спасёт?
⚠️ На самом деле — не всегда.


🛑 Docker ≠ песочница
Контейнеры по умолчанию не изолированы от ядра, сетей и сокетов хоста.
Даже простое docker run -it ubuntu запускает процесс с root-доступом внутри контейнера.

🛡 Что делать, если код небезопасен:


# Запуск без root-доступа
docker run --user 1000:1000 my-image

# Только для чтения
docker run --read-only my-image

# Удалить все cap-привилегии ядра
docker run --cap-drop=ALL my-image

# Использовать seccomp-профиль
docker run --security-opt seccomp=default.json my-image

# Отключить сеть
docker run --network=none my-image


Также стоит:
• Настроить AppArmor / SELinux
• Запретить монтирование Docker сокета
• Ограничить доступ к /proc, /sys

💡 Вывод:
Docker — это удобный инструмент упаковки, но не синоним безопасной изоляции.
Если запускаете сторонний или user-generated код (плагины, CI-скрипты, sandbox-сервисы) — относитесь к нему как к потенциально опасному.

Безопасность — это не "чеклист", а постоянная практика.

#Docker #Security #Sandbox #DevOps #Isolation

@Docker
🔥10👍4
🧹 Очистка данных в Docker: как освободить место и ускорить работу

Docker — мощный инструмент, но со временем он начинает засоряться контейнерами, образами, томами и сетями. Это тормозит систему и забивает диск.

Вот как быстро навести порядок:

▪️ Удалить остановленные контейнеры

docker container prune


▪️ Удалить неиспользуемые образы

docker image prune
docker image prune -a


▪️ Удалить неиспользуемые сети

docker network prune


▪️ Удалить неиспользуемые тома

docker volume prune


▪️ Комплексная очистка всего окружения

docker system prune
docker system prune -a


⚙️ Автоматизация очистки (раз в неделю через cron)

0 * * 0 /usr/bin/docker system prune -f


📦 Для Docker Compose-проектов

docker-compose down --remove-orphans


Регулярная очистка — залог стабильности и свободного пространства. Привычка, за которую ваша система скажет спасибо.

@Docker
11
🐳 Шпаргалка по командам Docker

docker exec -it test1 bash — Войти в контейнер контейнер test1.
docker container start test1 — Запустить контейнер test1
docker ps — показывает список запущенных контейнеров.

Некоторые из полезных флагов:
-a / --all — список всех контейнеров (по умолчанию показывает только запущенные);
-q / --quiet — перечислить только id контейнеров (полезно, когда вам нужны все контейнеры).

docker pull — большинство образов создаётся на основе базового образа из Docker Hub. Docker Hub содержит множество готовых образов, которые можно использовать вместо того, чтобы создавать и настраивать свой собственный. Чтобы скачать определённый образ или набор образов (репозиторий), используйте команду docker pull.
docker build — эта команда собирает образ Docker из Dockerfile и «контекста». Контекст сборки — это набор файлов, расположенных по определённому пути или URL. Используйте флаг -t, чтобы задать имя образа. Например, команда docker build -t my_container . соберёт образ, используя текущую директорию, на что указывает точка в конце.
docker run — запускает контейнер, на основе указанного образа. Эту команду можно дополнять другими, например, docker run my_image -it bash запустит контейнер, а затем запустит в нём bash.
docker logs — эта команда используется для просмотра логов указанного контейнера. Можно использовать флаг --follow, чтобы следить за логами работающей программы: docker logs --follow my_container.
docker volume ls — показывает список томов, которые являются предпочитаемым механизмом для сохранения данных, генерируемых и используемых контейнерами Docker.
docker rm — удаляет один и более контейнеров, например, docker rm my_container.
docker rmi — удаляет один и более образов, например, docker rmi my_image.
docker stop — останавливает один и более контейнеров. Команда docker stop my_container остановит один контейнер, а docker stop $(docker ps -a -q) — все запущенные. Более грубый способ — использовать docker kill my_container, который не пытается сначала аккуратно завершить процесс.
docker kill — принудительно убить контейнер.

Можно комбинировать эти команды. Например, для очистки всех контейнеров и образов:
docker kill $(docker ps -q) — Останавливаем все запущенные контейнеры .
docker rm $(docker ps -a -q) — Удаляем все остановленные контейнеры.
docker rmi $(docker images -q) — Удаляем все образы.

🔗 Сохраняй, чтобы не потерять!

#docker #cheatsheet #doc
8👍3
🐳 Docker совет, который знают не все: кэширование между билдами с --mount=type=cache

Вместо того чтобы каждый раз переустанавливать зависимости, можно кэшировать директории прямо в Dockerfile — особенно удобно для pip, npm, apt и т.д.

📦 Пример — ускоряем установку Python-зависимостей:


RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt


🔍 Что даёт:

- сохраняет кэш пакетов между сборками

- ускоряет билд в 2–5 раз

- уменьшает загрузку сети и слои образа

⚙️ Работает только при включённом Docker BuildKit (DOCKER_BUILDKIT=1)


📌 Маленький флаг — большой прирост скорости.
2👍1🔥1
Docker Cookbook

Автор: Sébastien Goasguen
Год издания: 2015

#docker #en #книга

Скачать книгу
2👌1
Docker_big_cheatsheet.pdf
2.6 MB
🐳 Большая шпаргалка по Docker

#cheatsheet #docker
5