Docker простыми словами
6.24K subscribers
228 photos
26 videos
3 files
122 links
Сообщество по докеру.

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

Открыты к критике и ждем вашего фидбека.
@viktorreh @anothertechrock
Download Telegram
🔍 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
🚀 13 Docker‑трюков с примерами и пояснениями

1\\. Multi\\-stage builds

FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .
FROM alpine:3.20
COPY --from=builder /app/myapp /usr/local/bin/
ENTRYPOINT ["myapp"]

Минимизирует размер и зависимости контейнера.

2\\. Squash layers

docker build --squash -t myapp:latest .

Сжимает слои в один.

3\\. BuildKit secrets

RUN --mount=type=secret,id=token git clone [email protected]:corp/private.git

Безопасное использование ключей.

4\\. .dockerignore

node_modules
*.md

Ускоряет сборку.

5\\. HEALTHCHECK

HEALTHCHECK CMD curl -f https://localhost/healthz || exit 1

Контейнер сам сообщает, что он еще жив.

6\\. CLI --format

docker ps --format '{{.Names}}\t{{.Status}}'

Удобный вывод для скриптов.

7\\. Оптимизация Dockerfile

COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .

Стабильные шаги выше — быстрее кеш.

8\\. Лимиты ресурсов

docker run --cpus=1 --memory=512m app

Ограничивает потребление ресурсов.

9\\. docker events

docker events --filter type=container --filter event=start

Реагируйте на события демона.

10\\. Read-only

docker run --read-only --tmpfs /tmp app

Файловая система только для чтения.

11\\. docker system prune

docker system prune -a --volumes

Удаляет всё ненужное.

12\\. ENTRYPOINT override

docker run --entrypoint /bin/sh -it app

Отладка падающих контейнеров.

13\\. Docker contexts

docker context create prod --docker "host=ssh://user@host"
docker context use prod

Быстрое переключение между окружениями.

📌 Подробнее

@Docker
👍7🔥54
🧹 Очистка данных в 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 run. Только потом оказывается, что образ весит гигабайт, собирается вечность и в нем десяток уязвимостей.

Чтобы сократить разрыв между «базой» и способностью мыслить, как сильный инженер, Слёрм сделал 4-недельный «Docker-практикум».

Что внутри:
7 нетиповых задач: от оптимизации Go-сервиса до работы с «кровавым энтерпрайзом» на Java.
Код-ревью, которого нам всем так не хватает, от инженера, с комментариями: «Тут ты неправильно сложил слои, из-за этого образ на 200МБ больше. А тут — скопировал в образ лишнее, создав вектор атаки».
Встречи с экспертами с разбором задач и эталлонным решением и мыслью: «А что так можно было?»

Никакой теории, только практика - всё как в жизни. 

В итоге:
Ваши Docker-образы устойчивы и готовы к продакшену 
Вы больше не гуглите базовые вещи, потому что понимаете нюансы

Это не курс, а симулятор работы в сильной инженерной команде, где от вас ждут результаты.

Цена: от 10 900 рублей

Узнать подробности и записаться по ссылке
💩41
🐳 Шпаргалка по командам 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
6👍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
Прокачай свои пайплайны с GitLab CI — секреты для DevOps и разработчиков.

Хотите, чтобы ваши пайплайны в GitLab CI были не только надёжными, но и эффективными? Тогда этот вебинар — для вас! 
Мы покажем, как избежать ошибок, ускорить релизы и сделать процесс работы с GitLab CI простым и предсказуемым.

Ошибки, которые вы научитесь избегать:
📲чрезмерная ручная настройка: мы покажем, как сделать пайплайн автономным и стабильным
📲сложные и нечитаемые пайплайны: узнаете, как разделить логику пайплайна для лучшей поддержки и управления
📲непонимание влияния CI/CD на бизнес: мы объясним, как правильный пайплайн ускоряет процесс разработки и способствует росту бизнеса

📅 Дата: 30 июля, 19:00 (МСК) - бесплатно
👉 Записаться на вебинар — https://tglink.io/d60499222d59

Не упустите шанс сделать процесс разработки более предсказуемым и эффективным

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2W5zFGVsvxg
1💩1
Docker Cookbook

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

#docker #en #книга

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

#cheatsheet #docker
5
Открытые мастера в Kubernetes — потенциальный инцидент в продакшене.

В новой статье на Хабр разработчики сервиса
Managed Kubernetes из
MWS Cloud Platform ⬜️ рассказывают:

⏺️какие уязвимости с радостью используют хакеры при открытых control plane-нодах в твоём кластере;
⏺️какие требования к hosted control plane-решению предъявляет публичный облачный провайдер, предоставляющий k8s as-a-service;
⏺️о плюсах и минусах популярных open source-решений.

➡️ Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
Визуализация процесса работы с Docker 👇

Давайте разберем основные термины с помощью аналогии:

🔹Dockerfile
— Представьте Dockerfile как рецепт или набор инструкций.

Вы начинаете с создания Dockerfile, который перечисляет все «ингредиенты» (программное обеспечение и конфигурации), необходимые для работы вашего приложения.

🔹Docker Image
— Используя Dockerfile как рецепт, вы «готовите» или «собираете» Docker Image.

Этот образ — как замороженный снимок вашего приложения, содержащий все, что нужно для его запуска.

🔹Docker Container
— После создания Docker Image вы можете «подать его на стол», создав Docker Container.

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

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

Наш Docker чатик 🐬
Please open Telegram to view this post
VIEW IN TELEGRAM
👎31
«Штурвал 2.11»: упрощенная установка, новые логи и дашборды
 
Ребята из «Лаборатории Числитель» выкатили новый релиз «Штурвала» — платформы управления кластерами Kubernetes — и зовут на обзор, чтобы показать все самое важное:
 
▪️Новый графический инсталлятор с поддержкой Cluster API, что позволяет легко разворачивать кластеры управления даже джунам;
▪️Замена OpenSearch на интегрированное в платформу решение VictoriaLogs;
▪️Обновленный дашборд неймспейса: больше информации, меньше путаницы;
▪️Новый дашборд доступности компонентов для упрощения мониторинга состояния кластеров;
▪️Новый Cluster API провайдер к VMware vCloud Director.

Когда: 12 августа, 11:00 мск
 
Регистрируйтесь и готовьте свои вопросы!
Вопрос на собеседовании.

Каково назначение docker_host?

Он задает URL или путь к сокету unix, используемые для соединения с API Docker. Значение по умолчанию:

unix://var/run/docker.sock


Для подключения к удаленному серверу обычно используется TCP, например:

tcp://192.0.1.20:3230


#собеседование
4
☕️ Cup — минималистичный инструмент для отслеживания обновлений контейнеров. Этот легковесный проект (всего 5.4 МБ!) сканирует образы в различных реестрах — от Docker Hub до Gitea и показывает доступные обновления без риска нарваться на лимиты API.

Что особенно удобно — Cup работает даже на Raspberry Pi и предлагает как CLI, так и веб-интерфейс с JSON-выводом для интеграций. Правда, в отличие от аналогов, он не умеет автоматически запускать пайплайны — зато идеально подходит для тех, кто предпочитает простые и прозрачные инструменты.

🤖 GitHub
3