Внутри Docker-контейнера используется изолированная среда, которая позволяет запускать приложения в предсказуемом и воспроизводимом окружении. Контейнер предоставляет доступ к базовой файловой системе, процессам, сетевым интерфейсам и другим ресурсам, изолированным от хоста и других контейнеров. Давайте разберем основные компоненты, которые используются внутри Docker-контейнера.
Каждый контейнер имеет собственную файловую систему, основанную на многослойной архитектуре. Это изолированное пространство предоставляет доступ к: Образу Docker (image): Базовый набор файлов, определенных в Docker Image. Copy-on-write (COW): Контейнеры используют copy-on-write слой для изменений. Базовый образ остается неизменным, а любые изменения записываются в слой контейнера. Точки монтирования: Возможность монтировать директории хоста или сетевые тома (volumes) для сохранения данных.
docker run -v /host/path:/container/path nginx
В контейнере запускаются процессы, как в обычной операционной системе. Главный процесс контейнера (например, команда из
CMD или ENTRYPOINT) работает с PID 1 и отвечает за выполнение приложения. Процессы внутри контейнера изолированы от процессов на хосте благодаря использованию Linux namespaces.docker exec <container_id> ps aux
Docker-контейнеры используют виртуальные сетевые интерфейсы для связи:
veth-pair: Каждый контейнер имеет виртуальный интерфейс, подключенный к мосту (
docker0 по умолчанию).Типы сетей:
bridge (по умолчанию): Локальная сеть между контейнерами.
host: Контейнер использует сетевой стек хоста.
none: Полностью изолированный контейнер без сети.
overlay: Сеть для соединения контейнеров на разных хостах.
docker network create my_network
docker run --network my_network nginx
Контейнеры используют ресурсы хоста, но их потребление можно ограничить:
CPU: Контейнер может использовать определенную долю процессора.
docker run --cpus="2" nginx
Память: Лимит на использование оперативной памяти.
docker run -m 512m nginx
I/O (диск): Возможность ограничения операций чтения/записи.
docker run --device-read-bps=/dev/sda:1mb nginx
Docker использует технологии изоляции, встроенные в ядро Linux:
Namespaces: Обеспечивают изоляцию пространства имен (PID, сети, файловой системы и т.д.). Control Groups (cgroups): Управляют использованием ресурсов (CPU, RAM, I/O).
lsns
Docker-контейнеры работают благодаря среде выполнения, например:
runc: Легковесное средство выполнения контейнеров, совместимое со стандартом OCI. containerd: Менеджер для запуска контейнеров, который Docker использует для взаимодействия с низкоуровневыми компонентами.
Контейнер может быть настроен с использованием:
Переменных среды: Устанавливаются через
ENV в Dockerfile или с помощью флага -e.docker run -e ENV_VAR=value nginx
Аргументов при сборке: Используются в Dockerfile через
ARG.ARG BUILD_VERSION
Главное, что работает внутри контейнера, — это само приложение: Например, веб-сервер (Nginx, Apache) или база данных (MySQL, PostgreSQL). Контейнеры упрощают запуск приложений с предсказуемыми зависимостями.
Docker предоставляет возможность просматривать логи контейнера и собирать метрики
Логи
docker logs <container_id>
Информация о контейнере
docker inspect <container_id>
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1💊1
- Подключение инфраструктуры происходит в начальных шагах, перед тестированием и деплоем.
2. Подготовка:
- Настройте сервер, проверьте доступность и корректность конфигурации.
- Убедитесь, что инфраструктура поддерживает требования приложения (например, порты, доступ к базам данных).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊8
DRCP (Database Resident Connection Pooling) — это механизм в Oracle Database, который уменьшает нагрузку на базу данных за счет повторного использования соединений между клиентами и сервером. DRCP полезен для сред с большим количеством краткоживущих соединений, например, веб-приложений.
Экономит ресурсы – вместо создания новых соединений база использует пул уже существующих.
Снижает нагрузку на сервер – меньше процессов, меньше потребления памяти и CPU.
Ускоряет работу – повторное использование соединений сокращает время на установку нового подключения.
Идеально для многопоточных сред – например, PHP-приложений, где соединения краткосрочные.
Клиент (например, веб-приложение) отправляет запрос на подключение к базе. Вместо создания нового процесса сервер ищет свободное соединение в пуле DRCP.
Если в пуле есть свободное соединение, оно передается клиенту. Если нет – создается новое (если не превышен лимит).
После завершения работы клиент "освобождает" соединение. Вместо закрытия соединение возвращается в пул, чтобы быть использованным другим клиентом.
Connection Broker (диспетчер соединений) следит за балансировкой нагрузки и распределяет соединения между клиентами.
Включаем DRCP на сервере
EXEC DBMS_CONNECTION_POOL.START_POOL();
Проверяем статус пула
SELECT * FROM V$CPOOL_STATS;
Подключаем клиента с использованием DRCP
CONNECT user/password@database:pooled
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Такой файл воспринимается как опция командой удаления, поэтому нужно указать системе, что это именно имя файла. Это можно сделать, отключив распознавание флагов или указав путь к файлу явно.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊17👍1🔥1
Динамическая маршрутизация – это механизм автоматического выбора маршрута на основе изменяющихся сетевых условий. В отличие от статической маршрутизации, она автоматически адаптируется к изменениям в сети.
Протоколы динамической маршрутизации делятся на:
Протоколы внутреннего шлюза (IGP – Interior Gateway Protocol)
RIP (Routing Information Protocol) – устаревший, работает на алгоритме дистанционно-векторного маршрутизации.
OSPF (Open Shortest Path First) – основан на SPF (Dijkstra) и работает по принципу линк-стейт.
IS-IS (Intermediate System to Intermediate System) – аналог OSPF, но чаще используется в провайдерских сетях.
Протоколы внешнего шлюза (EGP – Exterior Gateway Protocol)
BGP (Border Gateway Protocol) – основной протокол маршрутизации в интернете.
eBGP vs iBGP
BGP бывает двух типов:
eBGP (External BGP) – маршрутизация между автономными системами (AS). Используется для обмена маршрутами между разными организациями или провайдерами.
iBGP (Internal BGP) – работает внутри одной AS, передавая BGP-маршруты между роутерами этой сети.
BGP использует атрибуты маршрута для выбора наилучшего пути. Основные атрибуты:
приоритетный маршрут внутри AS (чем выше, тем лучше).
список AS, через которые проходит маршрут (короче – лучше).
предпочтение одного из выходов из AS (меньше – лучше).
источник маршрута (
IGP < EGP < Incomplete). метки маршрутов для упрощения политики маршрутизации.
локальный параметр (чем больше, тем лучше).
BGP можно развернуть на разных платформах, включая аппаратные и программные решения:
Cisco (IOS, IOS-XE, IOS-XR, NX-OS) – классика для крупных сетей.
Juniper (Junos OS) – мощное решение для дата-центров и операторов.
Arista (EOS) – высокопроизводительные маршрутизаторы для ЦОДов.
Huawei (VRP) – популярно в крупных корпоративных сетях.
FRRouting (FRR) – open-source, поддерживает BGP, OSPF, IS-IS.
BIRD – лёгкий BGP-демон для Linux, используется в IX (Internet Exchange).
GoBGP – BGP-демон, написанный на Go.
VyOS – Linux-маршрутизатор с поддержкой BGP.
MikroTik (RouterOS) – бюджетное, но мощное решение.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
- Использовали для:
- Развёртывания кластеров EKS.
- Конфигурации VPC, IAM, S3, RDS.
- Подключения ресурсов между регионами.
Ценность — модульность, контроль и версионирование.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤔5
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
main). Допустим, вы работаете в ветке
feature-branch: git checkout feature-branch
Сначала убедимся, что
main обновлена: git checkout main
git pull origin main
Теперь выполняем сам rebase:
git checkout feature-branch
git rebase main
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
git add <файл>
Продолжите rebase:
git rebase --continue
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
git push origin feature-branch --force
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
PLAY [название play] — это начало выполнения плейбука и определение группы хостов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔3💊3
В Docker есть три типа монтирования данных в контейнеры:
Volumes (Тома) – рекомендуемый способ хранения данных
Bind Mounts (Привязанные тома) – монтирование локальных файлов/папок
Tmpfs (Временное хранилище в RAM) – для быстрого доступа без записи на диск
Данные хранятся внутри Docker (
/var/lib/docker/volumes) Можно использовать в нескольких контейнерах
Не зависят от файловой системы хоста
sh
docker volume create mydata
docker run -d -v mydata:/app/data --name mycontainer ubuntu
Удаление тома (только если он не используется)
sh
docker volume rm mydata
Монтирует директорию с хоста в контейнер
Изменения сразу видны на хосте
Зависит от структуры файлов на хосте
sh
docker run -d -v /home/user/logs:/app/logs --name mycontainer ubuntu
Хранит данные в оперативной памяти (RAM)
Очень быстрое чтение/запись
Пропадает при перезапуске контейнера
Пример: создать
tmpfs-монтирование для /app/cache sh
docker run -d --tmpfs /app/cache:size=100m --name mycontainer ubuntu
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Headless-сервис (ClusterIP: None) не использует прокси и балансировку, а напрямую возвращает IP-адреса всех подов. Используется для:
- stateful-приложений (например, БД кластеров);
- сервисов, которым нужно напрямую знать об остальных нодах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
DevOps-инженер и SRE (Site Reliability Engineer) — это роли, которые пересекаются в своих задачах, но имеют разные акценты и подходы.
Основная цель: Ускорить и автоматизировать процесс разработки, тестирования и развертывания приложений.
Подход: Сосредоточен на создании и поддержке CI/CD, инфраструктуры как кода (IaC) и инструментах автоматизации.
Фокус: Эффективность процессов разработки. Улучшение взаимодействия между командами разработки (Dev) и эксплуатации (Ops).
Основная цель: Обеспечение стабильности, надежности и производительности системы в продакшене.
Подход: Применяет инженерные подходы и автоматизацию для управления операциями и масштабированием.
Фокус: Стабильность и надежность системы. Мониторинг, устранение сбоев и управление инцидентами.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
CI/CD пайплайн — это последовательность стадий (stages), включающих набор job-ов:
- build — сборка приложения.
- test — юнит и интеграционные тесты.
- lint — проверка стиля и ошибок.
- deploy — выкладка в dev/stage/prod.
- cleanup — удаление временных артефактов, откаты.
Каждый job может быть зависим от предыдущих.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Чтобы определить нагрузку на Node и правильно выделить ресурсы, нужно:
Проверить текущее потребление ресурсов (CPU, RAM, диски)*
Оценить нагрузку от подов (
requests и limits) Использовать мониторинг (Prometheus, Grafana,
kubectl top) Команда
sh
kubectl top nodes
Вывод
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
node-1 500m 25% 2Gi 50%
node-2 1000m 50% 4Gi 80%
Команда
sh
kubectl top pods --all-namespaces
Вывод
NAMESPACE POD CPU(cores) MEMORY(bytes)
default web-app-1 250m 256Mi
default web-app-2 300m 512Mi
monitoring prometheus-1 600m 1Gi
Команда
sh
kubectl describe node node-1
Вывод (пример секции Allocatable)
Allocatable:
cpu: 4
memory: 8Gi
pods: 110
Проверить
requests и limits у подовsh
kubectl describe pod my-pod
Вывод
Requests:
cpu: 500m
memory: 1Gi
Limits:
cpu: 1
memory: 2Gi
Prometheus-запросы для анализа Node
Средняя загрузка CPU за 5 минут
promql
avg(rate(node_cpu_seconds_total[5m])) * 100
Среднее использование памяти
promql
avg(node_memory_Active_bytes) / avg(node_memory_MemTotal_bytes) * 100
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Да. Kubernetes поддерживает откат на предыдущую ревизию:
- С помощью команды kubectl rollout undo deployment <имя>.
- Можно указать конкретную ревизию, если нужно вернуться дальше.
Это позволяет безопасно вернуться к предыдущей стабильной версии.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
В Prometheus данные собираются по pull-модели – сервер сам запрашивает метрики у клиентов. Чтобы клиенты отдавали метрики, нужно:
1. Настроить приложение на экспонирование метрик в формате Prometheus.
2. Добавить Prometheus job для сбора этих метрик.
3. Опционально – использовать Pushgateway, если pull-модель не подходит.
Если приложение написано на Go, Python, Java или Node.js. Prometheus предлагает официальные клиентские библиотеки:
Go: [
prometheus/client_golang](https://github.com/prometheus/client_golang) Python: [
prometheus_client](https://github.com/prometheus/client_python) Java: [
simpleclient](https://github.com/prometheus/client_java) Node.js: [
prom-client](https://github.com/siimon/prom-client) Пример для Python
pip install prometheus_client
from prometheus_client import start_http_server, Counter
import time
# Создаем счетчик запросов
REQUEST_COUNT = Counter('app_requests_total', 'Total requests')
def process_request():
REQUEST_COUNT.inc() # Увеличиваем счетчик
time.sleep(1) # Имитация обработки запроса
if __name__ == '__main__':
start_http_server(8000) # Открываем метрики на 8000 порту
while True:
process_request()
npm install prom-client express
const express = require('express');
const client = require('prom-client');
const app = express();
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics();
const requestCounter = new client.Counter({
name: 'http_requests_total',
help: 'Total HTTP requests',
});
app.get('/', (req, res) => {
requestCounter.inc();
res.send('Hello, World!');
});
app.get('/metrics', (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(client.register.metrics());
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});Добавляем job в
prometheus.ymlscrape_configs:
- job_name: 'my_app'
static_configs:
- targets: ['app_host:8000']
Если клиент не может сам отдавать метрики (например, это краткоживущий job), можно использовать Pushgateway.
Запускаем Pushgateway:
docker run -d -p 9091:9091 prom/pushgateway
Отправляем метрики через
curlecho "job_execution_time 5.3" | curl --data-binary @- http://localhost:9091/metrics/job/my_batch_job
Настраиваем Prometheus на сбор данных из Pushgateway
scrape_configs:
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9091']
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Некоторые распространённые паттерны ветвления:
1. Git Flow — основная ветка main/master, разработка в develop, релизы и фичи — отдельные ветки.
2. GitHub Flow — коммиты прямо в main через pull-request'ы.
3. GitLab Flow — сочетание Git Flow и CI/CD: возможность работать как с protected branches, так и напрямую.
4. Trunk-Based Development — вся работа в одной главной ветке (main), feature flags для управления выпуском.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
В Linux права доступа к файлам и папкам регулируются с помощью команд
chmod и chown. Если вам нужно дать полный доступ ко всем файлам и папкам, используйте
chmod -R 777 /путь/к/папке
-R (recursive) — применяет права ко всем вложенным файлам и каталогам. 777 означает: 7 (чтение, запись, выполнение) для владельца 7 (чтение, запись, выполнение) для группы 7 (чтение, запись, выполнение) для всех остальных Если текущий пользователь не владеет файлами, назначьте нового владельца
chown -R username:group /путь/к/папке
username — новый владелец group — новая группа Вместо
777 лучше дать только нужные права: Для исполняемых файлов:
chmod 755 Для конфигураций и данных:
chmod 644 Для приватных ключей и чувствительных файлов:
chmod 600Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
- Docker Compose — подходит для простых локальных окружений, отладки, микросервисов в одной машине.
- Kubernetes — для продакшн-окружений, масштабируемости, отказоустойчивости, автодеплоя.
Kubernetes нужен там, где требуется оркестрация, распределённость и гибкость.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
В
iptables есть 5 таблиц, но чаще всего работают с тремя: основная таблица для контроля трафика (используется по умолчанию)
для трансляции адресов (SNAT, DNAT, редиректы)
для изменения пакетов (маркировка, TTL, QoS)
для исключения пакетов из обработки
conntrack используется в SELinux для меток безопасности
Используется для разрешения или блокировки трафика.
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Используется для NAT, порт-форвардинга, маскарадинга.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Пример: Проброс порта (DNAT) – входящие пакеты на 80 порт перенаправляем на 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
Используется для маркировки пакетов, изменения TTL, QoS.
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
Пример: Маркировка пакетов для использования в
tc (QoS) iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
requests — это минимальные ресурсы, которые гарантированно выделяются поду. limits — это максимальные ресурсы, которые pod может потреблять. Kubernetes использует requests для планирования, а limits — для ограничения. Например: request: 200Mi, limit: 1Gi.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7💊1