Linux Skill - Освой Linux c нуля до DevOps – Telegram
Linux Skill - Освой Linux c нуля до DevOps
11.2K subscribers
54 photos
103 videos
482 links
Освой Linux c нуля до DevOps
Подробный гайд по Linux и море других уроков для системных администраторов

📩 По всем вопросам: @chorapov

РКН https://vk.cc/cMUwm4
Download Telegram
📘 Энциклопедия Docker: 10 лучших практик для production

Привет, цифровой архитектор!

У тебя нет времени искать тонкости настройки Docker?
Собрал для тебя 10 ключевых команд и приёмов из архитектурных гайдов, которые обязательно нужно сохранить для работы в production.

1. Безопасность: Непривилегированный пользователь

Никогда не запускай контейнеры от имени root. Атакующий может получить права root на хосте.

# В Dockerfile создаем группу и непривилегированного пользователя 'app'
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app # Всегда переключаемся на непривилегированного пользователя


2. Ограничение возможностей ядра (Capabilities)

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

# Сбрасываем все Capabilities (CAP_DROP ALL)
docker run -ti --cap-drop ALL debian /bin/bash

# Добавляем только возможность привязки к низким портам (<1024)
docker run --cap-drop all --cap-add CAP_NET_BIND_SERVICE alpine:latest sh

# Запрет на повышение привилегий (hardening)
docker run --security-opt=no-new-privileges ubuntu bash


3. Оптимизация Dockerfile: Слияние RUN

Каждая инструкция RUN создает новый уровень (layer), увеличивая размер образа. Объединяйте команды с && для минимизации слоев.

# Плохо: 3 отдельных слоя
RUN apk update
RUN apk add nodejs nodejs-npm
RUN mkdir -p /app/public

# Хорошо: одна инструкция, один слой
RUN apk update && \
apk add nodejs nodejs-npm && \
mkdir -p /app/public /app/server


4. Управление томами (Volumes)

Для сохранения постоянных данных используй тома (VOLUME).

# Создание тома на хосте (local driver по умолчанию)
docker volume create my_data_vol

# Просмотр информации о томе (включая путь на хосте)
docker volume inspect my_data_vol

# Удаление всех неиспользуемых томов (используй с осторожностью!)
docker volume prune


5. Очистка системы

Для избежания беспорядочного роста образов и контейнеров (image sprawl).

# Удаление остановленных контейнеров
docker rm $(docker ps -aq -f status=exited)

# Удаление неиспользуемых (висячих) образов
docker rmi $(docker images -q -f dangling=true)

# Полная очистка: контейнеры, образы, сети, тома
docker system prune -a


6. Режимы работы с сетью

Docker по умолчанию использует режим bridge (мост), который изолирует контейнеры в частной сети.

# Просмотр активных сетевых режимов (по умолчанию: bridge, none, host)
docker network ls

# Запуск контейнера в режиме хоста (убирает изоляцию, но дает скорость)
docker run --net=host -d my_app

# Создание изолированной сети, чтобы контейнеры видели друг друга по имени
docker network create my_custom_net
docker run --network my_custom_net --name redis_db redis


7. Работа с образами и тегами

Для контроля версий всегда используй конкретные теги, а не latest.

# Получение образа с конкретным тегом
docker pull debian:jessie

# Построение образа с явным указанием тега
docker build -t my_app:v1.2 .

# Использование дайджеста для абсолютной гарантии версии
FROM redis@sha256:3479bbcab384fa343b52743b933661335448f8166203688006...


8. Использование docker exec вместо SSH-демонов

Не запускай SSH-демон внутри контейнера. Для отладки используй docker exec.

# Запуск bash внутри активного контейнера (интерактивно)
docker exec -it <CONTAINER_ID> /bin/bash

# Запуск команды внутри контейнера без входа в оболочку
docker exec -it my_web_container ls -l /var/log


9. Настройка ресурсов (cgroups)

Ограничивай ресурсы (CPU, Memory), чтобы избежать DoS-атак или утечек памяти.

# Ограничение памяти (128 Мб)
docker run -it --rm -m 128m my_app

# Ограничение использования CPU (только ядра 0 и 1)
docker run -it --rm --cpuset=0,1 -c 2 my_app


10. Постоянный контроль состояния

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

# Просмотр запущенных контейнеров
docker ps

# Просмотр всех контейнеров (включая остановленные)
docker ps -a

# Просмотр подробной конфигурации контейнера (JSON)
docker inspect <CONTAINER_ID>

# Получение журналов (STDOUT/STDERR)
docker logs <CONTAINER_ID>


#Docker #DevOps #Security #CLI #Hardening
👍10🔥1
🎥 Вебинар по Linux: Основы LVM: гибкое управление дисковым пространством в Linux

Разбираем на практике, как работает LVM и зачем системным администраторам нужно уметь управлять томами в Linux.

🧠 На вебинаре вы узнаете:
- Как устроена работа с дисками и разделами в Linux.
- Какие ограничения есть у классической таблицы разделов.
- Что такое LVM и какие преимущества оно даёт при управлении хранилищем.
- Как использовать LVM для гибкого распределения пространства на дисках.

💪 В результате вебинара вы:
- Разберётесь в базовых понятиях LVM: Physical Volume, Volume Group, Logical Volume.
- Поймёте, как добавлять и перераспределять дисковое пространство без простоев.
- Сможете самостоятельно создать и управлять логическими томами.
- Узнаете, как LVM помогает решать повседневные задачи Linux-администратора.

🎁 Все участники вебинара получат специальные условия на полное обучение курса "Administrator Linux. Professional"

👉 Для участия зарегистрируйтесь: https://otus.pw/QbF9/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
👍4👎1
🔥 Собери свой top: скрипт для моментальной диагностики Linux

Привет, системный траблшутер!

Если у тебя что-то "легло" или тормозит, нужно моментально получить срез состояния системы. Ты не хочешь запускать 10 разных команд.
Объедини ключевые команды (uptime, free, ps) в одну функцию, которая быстро покажет тебе, где узкое место.

🐧 Скрипт check_status.sh

#!/bin/bash

# Используем hostname для получения имени сервера
SERVER_NAME=$(hostname)

# Создание функции, чтобы избежать повторов кода
function get_quick_status() {
echo "--- СТАТУС СЕРВЕРА: ${SERVER_NAME} ---"

# 1. Аптайм и Load Average
echo "Load Average (1, 5, 15 мин) и Uptime:"
uptime
# Load Average > 1.0 часто указывает на проблемы

# 2. Использование памяти (в удобном формате)
echo "Использование RAM и SWAP (free -h):"
free -h
# free -h выводит информацию о памяти и swap

# 3. Использование корневого раздела
echo "Использование диска (df -h /):"
df -h / | tail -n 1 | awk '{print "Used: " $3 ", Avail: " $4 }'
# df показывает использование файловой системы

# 4. Топ-5 активных процессов по CPU
echo "Топ-5 активных процессов (PID, %CPU, COMMAND):"
ps -e --no-header -o pid,%cpu,comm | sort -nr -k 2 | head -5
# ps -e отображает информацию о текущих запущенных процессах
}

# Запускаем функцию
get_quick_status


Вывод: Ты можешь использовать эту заготовку как основу, чтобы быстро диагностировать проблемы с CPU, памятью или диском, а затем добавить vmstat или iostat для глубокого анализа, если это требуется.

#Мониторинг #Bash #CLI #Скрипт #uptime #free
👍18
Какая команда, предназначенная для работы с файлами и архивами, выводит содержимое текстового файла на стандартный вывод, но в обратном порядке (т.е. начиная с последней строки)?
Anonymous Quiz
10%
rev
52%
cat -r
7%
sed -n '1!G;h;$p'
31%
tac
👍3🔥2
Администратор ищет файлы, которые были изменены менее 10 минут назад в каталоге /etc. Какая команда find с правильной опцией будет использована?
Anonymous Quiz
43%
find /etc -mtime -10
21%
find /etc -mmin -10
20%
find /etc -atime -10
16%
find /etc -cmin -10
👍6🔥2
🚀 Встречайте новый формат в @Gradeliftbot — Спринт!

Хотите проверить свои знания по Linux быстро и эффективно? Теперь в нашем боте доступен режим "Спринт" — 20 случайных вопросов из базы в 1500+ тестов!

👉 Попробовать @Gradeliftbot
👎2
Как правильно присвоить значение переменной в Bash?
Anonymous Quiz
25%
var = value
40%
var=value
8%
var := value
27%
set var value
💾 Bash-антигайд: Удаляй tmp-файлы даже после kill -9

Хей, защитник хоста!

Если твой скрипт аварийно завершается, временные файлы (/tmp) остаются.
Чтобы гарантировать удаление, используй ловушку EXIT.

#!/bin/bash
# Создай уникальное имя для временного файла
TMP_FILE=$(mktemp)

# 1. Ловушка EXIT (сигнал 0) сработает при ЛЮБОМ выходе
trap "rm -f $TMP_FILE" EXIT

# 2. Здесь идет твой основной код
echo "Лог пишется в $TMP_FILE" >> $TMP_FILE

# 3. Дополнительно можно перехватить SIGINT (2) и SIGTERM (15)
trap "rm -f $TMP_FILE; exit 1" INT TERM


Вывод: trap...EXIT обеспечивает, что функция очистки выполнится всегда, даже при ошибке.

#Bash #Автоматизация #Скрипты #trap #CLI
🔥2
🔥 Открытый урок «Terraform: как работать с ним через GitLab».

🗓 11 декабря в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «CI/CD на основе GitLab».

На вебинаре разберем:
✔️ Как использовать Terraform для управления инфраструктурой как кодом (IaC).
✔️ Настройку CI/CD-процессов в GitLab для работы с Terraform.
✔️ Лучшие практики разграничения окружения и управления конфигурацией.

Кому будет полезно:
- DevOps-лидам, управляющим инфраструктурой и CI/CD.
- Архитекторам, разрабатывающим стратегии инфраструктурной автоматизации.
- Инженерам, внедряющим Terraform в рабочие процессы.

Что вы получите:
- Понимание, Terraform-модули для работы через GitLab.
- Понимание, настройка и оптимизация пайплайнов CI/CD .
- Практические советы по безопасному и эффективному управлению инфраструктурой .

🔗 Ссылка на регистрацию: https://otus.pw/kKbj/

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
🔐 Секреты Pro-Docker: 4 хака, которые сделают твои образы в 5 раз меньше

Привет, контейнерный гуру!

Твои Docker-образы слишком большие и могут нести угрозу безопасности?.
Я собрал 4 критически важных приёма для hardening-а и оптимизации, которые должен знать каждый, кто работает с Docker в продакшене.

1. ⚙️ Оптимизация слоёв: Уменьши размер в 71%

Каждая инструкция RUN в Dockerfile создает новый уровень (слой), что раздувает конечный размер образа. Чтобы избежать этого, используй оператор && для объединения команд в одну инструкцию RUN.

# ПЛОХО: Создаст 3 слоя
RUN apt-get update
RUN apt-get install -y nodejs
RUN rm -rf /var/lib/apt/lists/*

# ХОРОШО: Создаст 1 слой и уменьшит размер образа
FROM alpine:3.12.0
RUN apk update && \
apk add --no-cache nodejs npm && \
rm -rf /var/cache/apk/*
# Используй --no-cache, чтобы не хранить временные файлы

За счет перехода на минимальные базовые образы (например, Alpine) и объединения команд ты можешь уменьшить размер образа на 71%.

2. 🛡 Безопасность: Запуск без root и CAP_DROP

Никогда не запускай контейнер с флагом --privileged, так как это равносильно получению прав root на хосте, позволяя, например, смонтировать его корневую ФС. Всегда переключайся на непривилегированного пользователя внутри контейнера.

# Создаем непривилегированного пользователя 'app'
# Используй инструкцию USER, чтобы избежать root
RUN groupadd -r app_grp && useradd -r -g app_grp app
USER app

# Если нужны только специфические права (например, bind к порту < 1024):
# Сбрось ВСЕ права (--cap-drop all) и добавь только необходимые
docker run --cap-drop ALL --cap-add CAP_NET_BIND_SERVICE alpine sh

Ограничение возможностей (Capabilities) — ключевой принцип безопасности, так как root в Linux — это коллекция возможностей, и Docker позволяет тебе их выборочно отключить.

3. 💾 Очистка: Удали висячий мусор

Если ты не удаляешь остановленные контейнеры или висячие образы (dangling images), они будут накапливаться и занимать дисковое пространство.

# Удаление всех остановленных контейнеров
# docker rm $(docker ps -aq -f status=exited)
docker rm $(docker ps -aq) -f

# Удаление всех висячих (без тегов) образов
docker rmi $(docker images -q -f dangling=true)

# Очистка всего Docker-мусора (образов, сетей, контейнеров)
# Используй с осторожностью, это удалит ВСЁ, что не используется
docker system prune -a

Используй docker system prune -a для быстрой очистки, но помни, что тома (volumes) не удаляются автоматически и требуют отдельной очистки, если они не используются.

4. 🧠 Ограничение ресурсов: Защита от DoS-атак

Ограничивай использование ресурсов с помощью cgroups, чтобы взломанный контейнер не смог вызвать отказ в обслуживании (DoS), исчерпав память или CPU хоста.

# Ограничение памяти (128 МБ)
# -m 128m задает жесткий лимит, предотвращая OOM на хосте
docker run -it --rm -m 128m my_app

# Ограничение использования CPU (на 2 CPU или 50% CPU-времени)
docker run -it --rm --cpus="2" my_app
# или, используя доли CFS:
docker run -d --name load_high -c 512 amouat/stress


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

#Docker #DevOps #Security #Hardening #Optimization #CLI #Сборник
👍1
systemctl – 5 команд, которые должен знать каждый DevOps-инженер

Привет, инженер автоматизации!

Если ты переходишь с SysVinit на systemd, тебе нужен надёжный командник для быстрого траблшутинга и управления сервисами.
Команда systemctl — это твой универсальный диспетчер. Вот 5 ключевых функций, которые ты будешь использовать каждый день.

1. 🔍 Полный статус сервиса

Эта команда показывает, активен ли сервис, его PID, потребление ресурсов (CGroup, Memory, CPU) и последние строки логов.

# Получить детальную информацию о веб-сервере Nginx
systemctl status nginx.service
# PID, CGroup, Memory, CPU - важные данные для траблшутинга


2. 🚀 Включение и активация (autostart)

systemctl enable создаёт символическую ссылку, чтобы сервис запускался при загрузке системы. Флаг --now сразу запускает его.

# Включить автозапуск SSHD при загрузке и немедленно запустить
sudo systemctl enable --now sshd.service

# Проверить, включен ли сервис для автозапуска
systemctl is-enabled sshd.service


3. 💾 Применение новой конфигурации без перезапуска

Если ты изменил конфигурационный файл (например, /etc/ssh/sshd_config), тебе нужно, чтобы демон перечитал его, не прерывая работу.

# Перезагрузка конфигурации systemd, чтобы обнаружить изменения в юнит-файлах
sudo systemctl daemon-reload
# Перезагрузить конфигурацию самого сервиса (без полного restart)
sudo systemctl reload sshd.service


4. 📈 Анализ скорости загрузки (Boot Performance)

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

# Вывести список процессов, отсортированных по времени запуска
systemd-analyze blame

# Посмотреть общее время, потраченное на загрузку ядра и userspace
systemd-analyze time


5. 📜 Просмотр всех файлов юнитов

Для DevOps критически важно знать, какие сервисы вообще установлены в системе и в каком они состоянии (включен/выключен).

# Вывести список всех установленных файлов модулей типа service и их состояние (enabled/disabled/static/masked)
systemctl list-unit-files --type=service


💡 Вывод

Команда systemctl — это центральный инструмент для твоей работы в Linux. Используя status для детальной проверки, reload для безопасных обновлений и systemd-analyze blame для диагностики, ты можешь эффективно управлять production-средой.

#DevOps #systemd #systemctl #CLI #Автоматизация
👍13