Как (и зачем) использовать containerd? 🧐
containerd — вероятно, самый широко используемый контейнерный рантайм:
🔹 Docker использует его под капотом для запуска контейнеров и хранения образов.
🔹 Kubernetes использует его как CRI-рантайм для запуска Pod'ов.
Практикуйтесь в работе с containerd: https://labs.iximiuz.com/courses/containerd-cli
👉 DevOps Portal
containerd — вероятно, самый широко используемый контейнерный рантайм:
Практикуйтесь в работе с containerd: https://labs.iximiuz.com/courses/containerd-cli
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3❤2
26 сетевых протоколов, которые нужно знать
👉 DevOps Portal
FTP (20/21, TCP) — Протокол передачи файлов: используется для передачи файлов между клиентом и сервером.
SFTP (22, TCP) — Защищённый протокол передачи файлов: FTP по SSH для безопасной передачи файлов.
TFTP (69, UDP) — Упрощённый протокол передачи файлов: простой, незащищённый протокол передачи файлов.
SSH (22, TCP) — Secure Shell: защищённый удалённый вход и выполнение команд.
TELNET (23, TCP) — Teletype Network: незащищённый удалённый вход и выполнение команд.
SMTP (25, TCP) — Простой протокол передачи почты: используется для отправки электронной почты.
SMTPS (587, TCP) — SMTP через TLS: SMTP поверх Transport Layer Security (TLS) для защищённой передачи электронной почты.
POP3 (110, TCP) — Post Office Protocol v3: получение электронной почты путём её загрузки с сервера.
POP3S (995, TCP) — POP3 через SSL: защищённый POP3 для получения электронной почты.
IMAP (143, TCP) — Протокол доступа к сообщениям Интернета: доступ к электронной почте напрямую на сервере.
IMAPS (995, TCP) — IMAP через SSL: защищённый IMAP-доступ к почте.
HTTP (80, TCP) — Протокол передачи гипертекста: незащищённый веб-сёрфинг.
HTTPS (443, TCP) — Безопасный протокол передачи гипертекста: защищённый веб-сёрфинг через SSL или TLS.
DNS (53, TCP/UDP) — Система доменных имён: используется для преобразования доменных имён в IP-адреса.
DHCP (67/68, UDP) — Протокол динамической настройки хоста: используется для динамического назначения IP-адресов.
NTP (123, UDP) — Протокол сетевого времени: синхронизация часов по сети.
LDAP (389, TCP) — Протокол лёгкого доступа к каталогам: доступ и управление информацией каталогов.
LDAPS (636, TCP/UDP) — LDAP через SSL: используется для защищённого доступа к LDAP.
SNMP (161/162, UDP) — Протокол простого управления сетью: используется для мониторинга и управления сетевыми устройствами.
SYSLOG (514, UDP) — Системное логирование: протокол и система журналирования сетевых событий.
SMB (445, TCP) — Протокол серверных сообщений: совместное использование файлов и сетевые коммуникации.
SQL (1433, TCP) — Язык структурированных запросов (SQL): управление БД от Microsoft.
SQLNET (1521, TCP) — SQLNET (служба Oracle Network): обеспечивает взаимодействие клиентов Oracle SQL с сервером баз данных Oracle.
MySQL (3306, TCP) — MySQL: сервер базы данных MySQL.
RDP (3389, TCP/UDP) — Протокол удалённого рабочего стола: удалённый доступ к рабочему столу.
SIP (5060/5061, TCP/UDP) — Протокол установления сеансов: используется для управления мультимедийными сессиями связи.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22❤6🔥4🌚1🤝1
Совет дня по Linux
Многие либо не знают об этом, либо почти не используют.
В Linux вы можете нажать
👉 DevOps Portal
Многие либо не знают об этом, либо почти не используют.
В Linux вы можете нажать
~TAB TAB, чтобы быстро получить список всех доступных пользователей в системе.$ ~TAB TAB
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥7❤6😁1
Никогда не открывайте порты в Docker-контейнерах следующим образом:
Такое конфигурирование позволяет контейнеру обходить любые правила брандмауэра, настроенные на хосте. Если необходимо обеспечить внешний доступ к контейнеру, делайте это так:
Такая конфигурация привязывает сервис к localhost, предотвращая доступ к нему извне по адресу ip:3000.
👉 DevOps Portal
ports:
- "3000:3000"
Такое конфигурирование позволяет контейнеру обходить любые правила брандмауэра, настроенные на хосте. Если необходимо обеспечить внешний доступ к контейнеру, делайте это так:
ports:
- "127.0.0.1:3000:3000"
Такая конфигурация привязывает сервис к localhost, предотвращая доступ к нему извне по адресу ip:3000.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤39👍24🤔13🔥8
Список часто используемых команд Kamal
Хотя перечень не является полным, он охватывает наиболее распространённые задачи
🔹 Команда инициализации используется для создания конфигурационных и секретных файлов один раз после добавления Kamal в проект.
🔹 Установка Docker на всех целевых хостах
🔹 Алиасы
Kamal предоставляет kamal shell из коробки. Я обычно добавляю kamal console для быстрого доступа к Rails-консоли.
🔹 Деплой приложения [в staging-окружение]
🔹 Откат приложения до VERSION [в staging-окружении]
🔹 Сборка образов
Большую часть времени вы не будете использовать команду
так как она в основном используется в
Тем не менее, вы можете использовать её для сборки образа без его пуша, что удобно для тестирования.
🔹 Ниже приведены несколько команд для чтения логов приложения и его аксессуаров
🔹 Логи аксессуара PgHero [в staging-окружении]
bash
$ kamal accessory logs pghero [-d staging]```
🔹 Логи прокси-сервера [в staging-окружении]
🔹 Показать объединённую конфигурацию (включая секреты) [для staging-окружения].
Полезно для отладки и если вы забыли IP-адрес сервера.
🔹 Вывести секреты в stdout [для staging-окружения]
🔹 Показать информацию обо всех контейнерах, сгруппированных по ролям [для staging-окружения]
🔹 Показать только контейнеры приложения [в staging-окружении], [например, для web-ролей]
🔹 Показать только контейнеры аксессуара PgHero [в staging-окружении]
👉 DevOps Portal
Хотя перечень не является полным, он охватывает наиболее распространённые задачи
$ kamal init
$ kamal server
Kamal предоставляет kamal shell из коробки. Я обычно добавляю kamal console для быстрого доступа к Rails-консоли.
$ kamal shell [-d production]
# app exec -i --reuse "bin/rails console"
$ kamal console [-d production]
$ kamal deploy [-d staging]
$ kamal rollback [VERSION] [-d staging]
Большую часть времени вы не будете использовать команду
kamal build напрямую,так как она в основном используется в
kamal deploy и kamal redeploy.Тем не менее, вы можете использовать её для сборки образа без его пуша, что удобно для тестирования.
$ kamal build dev
$ kamal app logs [--roles=web -n 100 -f]
$ kamal app logs [--primary -n 100 -f]
$ kamal app logs [--hosts=<ip_address> -n 100 -f]
$ kamal audit
bash
$ kamal accessory logs pghero [-d staging]```
$ kamal proxy logs [-d staging]
Полезно для отладки и если вы забыли IP-адрес сервера.
$ kamal config [-d staging]
$ kamal secrets print [-d staging]
$ kamal details [-d staging]
$ kamal app details [-d staging] [--roles=web]
$ kamal accessory details pghero -d staging
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Самый распространённый способ запустить контейнер — использовать Docker CLI. Но что именно делает команда
🔹
🔹
🔹
🔹
Мини-курс, чтобы научиться запускать контейнеры с разными рантаймами:
https://labs.iximiuz.com/skill-paths/run-containers-across-runtimes
👉 DevOps Portal
docker run? Чем она отличается от:podman runnerdctl runctr runrunc create/startМини-курс, чтобы научиться запускать контейнеры с разными рантаймами:
https://labs.iximiuz.com/skill-paths/run-containers-across-runtimes
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
После многих лет использования NGINX в проектах на Docker Compose, автор решил перейти на
traefik — и отмечает, что это стало одним из лучших решений в области DevOps за всё время.
В своём блоге он подробно описывает полную настройку, что изменилось и почему использование Traefik значительно упрощает работу.
Traefik из коробки предоставляет:
✅ Автоматическую маршрутизацию на основе меток контейнеров
✅ Встроенный HTTPS через Let’s Encrypt
✅ Дашборд в реальном времени для маршрутов и сервисов
✅ Балансировку нагрузки с поддержкой "липких" сессий
✅ Нативную интеграцию с Prometheus для сбора метрик
✅ Отсутствие необходимости вручную поддерживать конфигурационные файлы
Ссылка на блог:
https://medium.com/@prateekjain.dev/why-i-replaced-nginx-with-traefik-in-my-docker-compose-setup-32f53b8ab2d8
👉 DevOps Portal
traefik — и отмечает, что это стало одним из лучших решений в области DevOps за всё время.
В своём блоге он подробно описывает полную настройку, что изменилось и почему использование Traefik значительно упрощает работу.
Traefik из коробки предоставляет:
Ссылка на блог:
https://medium.com/@prateekjain.dev/why-i-replaced-nginx-with-traefik-in-my-docker-compose-setup-32f53b8ab2d8
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍9💊1
Быстрый совет по Bash: массовое переименование файлов с помощью
Команда
👉 DevOps Portal
renameКоманда
rename позволяет заменить один шаблон на другой сразу в нескольких именах файлов. В этом примере все расширения файлов .html в текущем каталоге преобразуются в .php.Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Nerdlog — tui-инструмент для работы с логами на локальных и удалённых хостах.
🔹 Не требует централизованного сервера — взаимодействие с удалёнными машинами происходит через SSH
🔹 Логи не скачиваются целиком — обработка выполняется на удалённой стороне, в интерфейс передаётся уже результат
🔹 Для удобства просмотра реализованы таймлайн и гистограмма
Статья с подробностями: dmitryfrank.com/projects/nerdlog/article
Репозиторий: github.com/dimonomid/nerdlog
👉 DevOps Portal
Статья с подробностями: dmitryfrank.com/projects/nerdlog/article
Репозиторий: github.com/dimonomid/nerdlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2🤯1
Быстрый совет по Linux
Если у вас возникают проблемы с чтением каталогов в переменной
👉 DevOps Portal
Если у вас возникают проблемы с чтением каталогов в переменной
$PATH, используйте команду tr, чтобы заменить двоеточия (":") на символы новой строки ("\n"), чтобы отобразить их построчно:$ echo $PATH | tr ":" "\n"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤11
Быстрый совет по Docker Compose
Обновление версии образа у запущенного контейнера
Да, это возможно в Docker и практически без простоев.
В блоке
Эта конфигурация лучше всего работает в сочетании с опцией
Примечание: наилучший результат достигается при использовании семантического версионирования образов.
👉 DevOps Portal
Обновление версии образа у запущенного контейнера
Да, это возможно в Docker и практически без простоев.
В блоке
services необходимо определить параметры deploy (как на изображении выше). Важным параметром здесь является order. Он указывает Docker сначала создать и запустить новый контейнер с обновлённой версией образа. После запуска нового контейнера трафик будет перенаправлен на него, а старый контейнер будет остановлен и удалён.Эта конфигурация лучше всего работает в сочетании с опцией
replicas, чтобы развернуть несколько экземпляров одного и того же контейнера и обеспечить высокую доступность.Примечание: наилучший результат достигается при использовании семантического версионирования образов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤4
Основы сетевых пространств имён в Linux
Прежде чем переходить к Docker и Kubernetes, стоит разобраться в базовых технологиях:
🔹 Создание сетевого пространства имён в Linux: https://labs.iximiuz.com/challenges/linux-network-namespace
🔹 Соединение двух сетевых пространств имён: https://labs.iximiuz.com/challenges/connect-two-network-namespaces
🔹 Соединение нескольких сетевых пространств имён: https://labs.iximiuz.com/challenges/connect-multiple-network-namespaces
👉 DevOps Portal
Прежде чем переходить к Docker и Kubernetes, стоит разобраться в базовых технологиях:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3
Ошибка в безопасности Docker, которую упускают даже сеньоры:
Не добавлять файл
Если не исключить
Совет: всегда добавляйте
👉 DevOps Portal
Не добавлять файл
.dockerignore с исключением .env — огромный риск.Если не исключить
.env из процесса сборки Docker, переменные окружения, включая API-ключи, учетные данные к БД и другие секреты, попадают прямо в образ.Совет: всегда добавляйте
.env и другие чувствительные файлы в .dockerignore.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥12
Быстрый совет по Linux
Хватит управлять SSH-подключениями вручную!
Используй блоки
С конфигом, как ниже, достаточно просто:
👉 DevOps Portal
Хватит управлять SSH-подключениями вручную!
Используй блоки
Host в ~/.ssh/config.С конфигом, как ниже, достаточно просто:
$ ssh dev-server
Please open Telegram to view this post
VIEW IN TELEGRAM
❤26👍12🔥3🤯2
Недавно Docker добавил новую функциональность под названием Docker Bake, которая предназначена для управления сложными сборками
Если у вас есть разные сборки для различных стадий CI, таких как lint, test и другие, этот инструмент поможет вам управлять сборками в более декларативной и упрощённой форме.
Также он подходит для проектов, использующих monorepo-архитектуру, но с разнообразными сборками.
Отлично совместим с docker-compose.
Docker Bake теперь официально доступен в Docker Desktop 4.38!
Подробнее в блоге Docker: https://www.docker.com/blog/ga-launch-docker-bake/
👉 DevOps Portal
Если у вас есть разные сборки для различных стадий CI, таких как lint, test и другие, этот инструмент поможет вам управлять сборками в более декларативной и упрощённой форме.
Также он подходит для проектов, использующих monorepo-архитектуру, но с разнообразными сборками.
Отлично совместим с docker-compose.
Docker Bake теперь официально доступен в Docker Desktop 4.38!
Подробнее в блоге Docker: https://www.docker.com/blog/ga-launch-docker-bake/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥5🤔1
Не позволяйте одному контейнеру съедать всю память сервера
Устанавливайте ограничения по памяти в Docker с помощью флага
👉 DevOps Portal
Устанавливайте ограничения по памяти в Docker с помощью флага
--memory или в файле Compose.Please open Telegram to view this post
VIEW IN TELEGRAM
❤21👍10🔥4
Многие DevOps-инженеры не до конца понимают структуру директории Ansible и то, как всё связано между собой.
Вот шпаргалка, которая поможет лучше разобраться
👉 DevOps Portal
Вот шпаргалка, которая поможет лучше разобраться
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍15🔥2🥱2
Когда-нибудь хотелось просто «запрыгнуть» в работающий Docker-контейнер?
Именно для этого и существует
Нужно отладить что-то или посмотреть логи?
На фото краткая шпаргалка, которая точно пригодится
👉 DevOps Portal
Именно для этого и существует
docker execНужно отладить что-то или посмотреть логи?
exec позволяет запускать любые команды внутри контейнера без его перезапуска.На фото краткая шпаргалка, которая точно пригодится
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥6❤2😁1