DevOps Portal | Linux
13.4K subscribers
867 photos
112 videos
10 files
881 links
Присоединяйтесь к нашему каналу и погрузитесь в мир DevOps

Связь: @devmangx

РКН: https://clck.ru/3P8kFH
Download Telegram
💻 Совет по устранению неполадок в Kubernetes: Устранение проблем с сетью.

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

Лично я предпочитаю использовать инструмент "Netshoot", основанный на Docker-образе. В нем есть большинство необходимых инструментов (ping, curl, dig, nmap, netcat и т. д.), и его можно запустить как временный под. Он будет работать, пока вы им пользуетесь, а как только вы выйдете из пода, тот сразу же будет удален.

Команда для его запуска:
❯ kubectl run tmp-shell --rm -i --tty --image nicolaka/netshoot --namespace=<namespace> -- /bin/bash

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
Kubernetes 101: назначение Pod'ов на узлы

В статье подробно рассматриваются механизмы назначения Pod'ов на узлы в Kubernetes.

Автор объясняет такие инструменты, как nodeSelector, nodeAffinity и taints/tolerations, которые позволяют контролировать, где именно будут запускаться ваши Pod'ы

👉 Ссылка на статью

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Docker против Kubernetes: В чем разница?

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

Docker

🔹 Платформа для контейнеризации.
🔹 Упаковывает приложения и зависимости в контейнеры.
🔹 Обеспечивает переносимость между средами.
🔹 Запускает контейнеры на одном хосте.
🔹 Используется в CI/CD-пайплайнах для автоматизации развёртывания.

Kubernetes

🔹 Система оркестрации контейнеров.
🔹 Управляет контейнеризированными приложениями на большом масштабе.
🔹 Обрабатывает развёртывание, масштабирование и сетевые взаимодействия.
🔹 Распределяет рабочие нагрузки между несколькими узлами.
🔹 Оптимизирован для микросервисов и облачно-ориентированных приложений.

Как они работают вместе

Docker создает и запускает контейнеры. Kubernetes оркестрирует и управляет ими в большом масштабе. Вместе они позволяют создавать масштабируемые и устойчивые облачные системы и DevOps-процессы.

Нужны ли вам оба инструмента?

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

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍153
Строим контейнерные образы как профи 😎

Множество ресурсов по созданию образов:
🔹5 учебных пособий по композиции образов, выбору базового образа, многоступенчатым сборкам и образам без дистрибутива.
🔹12 практических задач для создания и отладки образов.

Посмотреть здесь: https://labs.iximiuz.com/skill-paths/build-container-images

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥61
Это репозиторий примеров из книги "Ansible for DevOps" Джеффа Гирлинга.

Он демонстрирует использование Ansible для автоматизации серверов и управления конфигурациями, с реальными примерами и плейбуками

👉 https://github.com/geerlingguy/ansible-for-devops

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19
💡 Быстрый совет по Docker

Хотите узнать, сколько дискового пространства занимают образы, контейнеры, локальные тома или кэш сборки?

Используйте команду:

docker system df


👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥51
Репозиторий с кучей полезных материалов и информации, связанных с DevOps

Содержит ресурсы по таким темам, как Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure и GC

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52
Структура манифеста развертывания Kubernetes: объяснение

В YAML-файле развертывания Kubernetes определяется, как приложение должно быть развернуто и управляться в кластере Kubernetes.

Ниже приведена структура YAML с пояснениями.

Объяснение ключевых разделов

🔸apiVersion & kind: Определяет, что этот ресурс является развертыванием и использует API Kubernetes apps/v1.
🔸metadata: Содержит информацию, такую как имя и метки для организации приложения.
🔸spec.replicas: Определяет желаемое количество работающих экземпляров (Pod'ов).
🔸spec.selector.matchLabels: Гарантирует, что развертывание управляет только Pod'ами с соответствующими метками.
🔸spec.template:
- Определяет шаблон Pod'а (его metadata и spec).
- Раздел containers описывает контейнер, включая образ, порты и ресурсы.
- Можно также задать переменные среды, монтирование томов и лимиты ресурсов.
🔸spec.strategy: Управляет стратегией обновления развертывания (RollingUpdate или Recreate).
🔸volumes: Позволяет определить постоянное хранилище, такое как ConfigMaps, Secrets или Persistent Volumes.

— Дополнительные параметры
🔸Проверки работоспособности: Liveness & Readiness Probes
🔸Управление размещением: Affinity & Node Selectors
🔸Предварительная обработка: Init Containers

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151
💡 Совет по Linux

Получите контекст вашего поиска с помощью grep, используя параметр -C:

$ grep -C3 filename


Это покажет 3 строки до и после найденного совпадения.

Очень помогает при анализе логов 😎

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍225
🖥 Основные компоненты Docker: объяснение

Docker решает проблему «у меня на машине работает» 😱

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

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

В основе Docker лежит несколько ключевых компонентов.

Разбираясь в них, вы получите прочную базу понимания. Давайте разберем их!

🔸Образы (Images)
Образы — это неизменяемые шаблоны, используемые для создания контейнеров. Они создаются с помощью инструкций в Dockerfile или загружаются из Docker-реестра, такого как Docker Hub.

🔸Контейнер (Container)
Контейнер — это запущенный экземпляр образа. Это легковесный, автономный пакет, содержащий все необходимое для работы приложения.

🔸Dockerfile
Файл, содержащий последовательность команд для создания образа Docker.

🔸Docker Engine
Docker Engine отвечает за запуск и управление контейнерами. Он состоит из демона Docker и CLI-инструмента, взаимодействующего с ним через REST API.

🔸Docker Daemon
Фоновый сервис, управляющий объектами Docker. Он обрабатывает API-запросы и управляет образами, контейнерами, сетями и томами хранения.

🔸Docker Registry
Репозитории для хранения и распространения образов Docker. Реестры могут быть публичными или частными. По умолчанию Docker использует публичный реестр Docker Hub.

🔸Сеть Docker (Docker Network)
Контейнеры работают в сетях, что позволяет им взаимодействовать друг с другом и с внешним миром. Сеть предоставляет коммуникационный шлюз между контейнерами на одном или разных хостах.

🔸Тома (Volumes)
Тома позволяют сохранять данные вне контейнера и делиться ими между контейнерными инстансами, даже после удаления контейнера. Они обеспечивают независимость данных от жизненного цикла контейнера.

Все эти компоненты взаимосвязаны, создавая удобную систему для автоматизации развертывания, масштабирования и управления приложениями. Благодаря этому Docker стал мощным и важным инструментом в современной разработке программного обеспечения.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥72
💡 Быстрый совет по Linux 🐧

Когда вы запускаете программу в терминале или по SSH, она завершится сразу после закрытия сессии терминала (когда вы выйдете из него) или при разрыве соединения.

Чтобы избежать этого и сохранить выполнение программы и всех её процессов, используйте команду nohup (сокращение от no hangup – «без зависания»). Она игнорирует все сигналы разрыва соединения, позволяя процессу продолжать работу даже при закрытии терминала.

Например, чтобы сжать большой объем данных с помощью команды tar и гарантировать, что процесс не прервётся при случайном закрытии терминального окна, выполните команду:

$ nohup tar -cf archive.tar file1 file2


Также nohup создаёт файл nohup.out, в который записывает вывод команды:

$ cat nohup.out


Альтернативно, можно использовать tmux, disown или screen.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍206🔥1🤔1
💡Совет по Bash-скриптам

Вы можете использовать ловушку DEBUG, чтобы шаг за шагом проходить через bash-скрипт, давая вам возможность проверять каждую строку перед её выполнением — это идеально для отладки!

— Вот как это работает:

Команда trap с параметром DEBUG срабатывает сразу перед выполнением каждой строки, приостанавливая выполнение, чтобы вы могли решить, хотите ли продолжить. Это как интерактивное «пошаговое выполнение» вашего bash-скрипта.

В отличие от sh -x, который выводит каждую строку без остановки, этот метод позволяет вам контролировать выполнение каждой команды перед её запуском.

Ловушка DEBUG не является настоящим сигналом, а представляет собой специальную функцию (псевдосигнал), которая срабатывает перед каждой строкой скрипта, что удобно для понимания поведения скрипта построчно.

Вы также можете изучить похожие псевдосигналы, такие как EXIT, который выполняет команды перед завершением скрипта; RETURN, который срабатывает при возврате из функции или после того, как скрипт был загружен (с помощью source или .); и ERR, который обрабатывает команды, возвращающие ненулевой код завершения при активированном set -e.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥41
Как работает преобразование сетевых адресов (NAT)

Преобразование сетевых адресов (NAT) — это фундаментальная технология в современных сетях, которая позволяет устройствам в частной сети обмениваться данными с внешними сетями, такими как Интернет, используя один публичный IP-адрес. Эта возможность критически важна для экономии ограниченных ресурсов IPv4-адресов и повышения безопасности сети. Рассмотрим, как работает NAT на основе приведенной инфографики.

Основы NAT

NAT работает, изменяя информацию о IP-адресах в пакетах, когда они проходят через маршрутизатор или брандмауэр. Конкретно, он преобразует частные IP-адреса в локальной сети в публичный IP-адрес для связи с внешними сетями.

Компоненты и процесс

1. Частная сеть и публичный IP:

🔹Устройства в частной сети получают частные IP-адреса (например, 192.168.3.6, 192.168.3.7, 192.168.3.8).
🔹Маршрутизатор, выполняющий NAT, имеет частный IP-адрес (например, 192.168.3.0/24) на своем внутреннем интерфейсе и публичный IP-адрес (например, 200.100.10.1) на внешнем интерфейсе, предоставленный поставщиком Интернет-услуг (ISP).

2. Преобразование пакетов:

🔹Когда устройство (например, 192.168.3.6) хочет общаться с внешним сервером (например, 65.44.21.24) через Интернет, оно отправляет пакет с своим частным IP-адресом в качестве источника.
🔹Маршрутизатор с включенным NAT перехватывает этот пакет. Прежде чем отправить его в назначение, маршрутизатор заменяет частный IP-адрес (192.168.3.6:5733) на свой публичный IP-адрес (200.100.10.1:5733). Этот процесс позволяет пакету пройти через Интернет, поскольку он не маршрутизирует частные IP-адреса.

3. Поддержание сеансов:

🔹Маршрутизатор поддерживает таблицу NAT для отслеживания активных сеансов. Эта таблица содержит соответствия между внутренними частными IP-адресами и портами и внешними публичными IP-адресами и портами.
🔹Например, таблица NAT может отображать соответствие 192.168.3.6:5733 -> 200.100.10.1:5733, что позволяет маршрутизатору корректно перенаправлять ответы обратно на исходное устройство в частной сети.

4. Обратное преобразование пакетов:

🔹Когда внешний сервер (65.44.21.24) отвечает, он отправляет пакеты на публичный IP-адрес (200.100.10.1:5733).
🔹NAT-маршрутизатор перехватывает эти входящие пакеты, обращается к таблице NAT и преобразует адрес назначения обратно в частный IP-адрес (192.168.3.6:5733), прежде чем отправить его соответствующему внутреннему устройству.

Преимущества NAT

🔹Сохранение IP-адресов: NAT позволяет нескольким устройствам в локальной сети использовать один публичный IP-адрес, что значительно уменьшает количество требуемых IP-адресов.
🔹Безопасность: NAT скрывает внутренние IP-адреса сети, обеспечивая дополнительный уровень безопасности, предотвращая прямой доступ к внутренним устройствам из внешней сети.

Заключение

NAT — это важная технология, которая помогает эффективно использовать IP-адреса и повышать безопасность сети. Преобразуя частные IP-адреса в публичные и управляя этими соответствиями, NAT обеспечивает бесперебойную связь между частными сетями и Интернетом. Эта функциональность незаменима в условиях ограниченных ресурсов IP-адресов и повышенных требований к безопасности.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
💡 Быстрый совет по Linux 🐧

Многие либо не знают об этом, либо редко используют.

Нажатие Ctrl+U в терминале Linux удаляет все от позиции курсора до начала строки.

Аналогично, Ctrl+K удаляет все от позиции курсора до конца строки.

Это особенно полезно, если вы неправильно ввели пароль. Вместо того чтобы долго удерживать клавишу backspace, просто нажмите Ctrl+U, чтобы очистить ввод и ввести пароль заново.

Эти сочетания клавиш имеют множество других практических применений

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍49🔥10
Что такое параметризованные пайплайны в Jenkins?

Динамичные и переиспользуемые пайплайны

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

Применение:
🔹Конфигурация сборок: Запуск сборок для разных окружений (dev, staging, production), веток или версий приложения.
🔹Тестирование: Выполнение тестов на разных браузерах, операционных системах и конфигурациях.
🔹Деплой: Развертывание приложения в различные среды с индивидуальными настройками.
🔹Кастомные workflow: Возможность задавать параметры вручную для специфических задач.

Создание параметризованного пайплайна

1. Определение параметров: В Jenkins Pipeline (в декларативном или скриптовом синтаксисе) используется директива parameters для объявления доступных параметров:
pipeline {
parameters {
string(name: 'ENVIRONMENT', defaultValue: 'dev', description: 'Целевое окружение для деплоя (dev, staging, prod)')
choice(name: 'BUILD_TYPE', choices: ['Release', 'Debug'], description: 'Тип сборки')
}
}


2. Использование параметров: Обращение к значениям, введенным пользователем, через объект params в шагах пайплайна:
stages {
stage('Build') {
steps {
echo "Сборка для окружения: ${params.ENVIRONMENT}"
echo "Тип сборки: ${params.BUILD_TYPE}"
}
}
}


3. Запуск сборок: При старте параметризованного пайплайна в UI Jenkins появится форма для ввода параметров.

Типы параметров в Jenkins:
🔹String: Текстовый ввод.
🔹Choice: Выпадающий список значений.
🔹Boolean: Флаг (true/false).
🔹File: Загрузка файла.
🔹Password: Скрытый ввод для конфиденциальных данных.
🔹И другие. (Полный список доступен в документации Jenkins.)

— Преимущества параметризованных пайплайнов:
🔹Гибкость: Управление процессами без изменения кода пайплайна.
🔹Переиспользуемость: Один пайплайн можно применять для разных задач.
🔹Удобство: Позволяет даже нетехническим пользователям запускать билды с нужными параметрами.
🔹Оптимизация CI/CD: Упрощает процессы непрерывной интеграции и доставки (CI/CD).

— Дополнительные замечания:
🔹Можно задавать параметры по умолчанию.
🔹В истории билдов отображаются введенные параметры для каждого запуска.
🔹Для управления параметризованными пайплайнами можно использовать Jenkins Shared Libraries.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
This media is not supported in your browser
VIEW IN TELEGRAM
💻 Основные компоненты Kubernetes

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

И здесь на помощь приходит Kubernetes.

Kubernetes (K8s) упрощает развертывание, масштабирование и управление контейнеризованными приложениями, становясь основой современной практики DevOps.

В своей основе Kubernetes строится на нескольких ключевых компонентах, каждый из которых выполняет свою роль.

Понимание этих компонентов даст вам крепкую базу знаний — давайте погрузимся 😱

🔹Node: Машины (физические или виртуальные), на которых работают контейнеризованные приложения. Узлы (Nodes) хостят рабочую нагрузку, которая состоит из Pods.

🔹Pod: Самая мелкая единица развертывания в Kubernetes, содержащая один или несколько контейнеров, которые делят хранилище, сеть и ресурсы.

🔹Control plane (Управляющая плоскость): "Мозг" кластера, управляющий состоянием системы и контролирующий работу узлов и Pods.

Состав управляющей плоскости:

API сервер: обрабатывает запросы на управление кластером
Scheduler (Планировщик): назначает Pods на узлы
Controller manager (Менеджер контроллеров): поддерживает желаемое состояние системы
etcd: хранит конфигурацию кластера и его состояние в виде распределенного хранилища ключ-значение

🔹Service (Сервис): Предоставляет стабильные конечные точки (IP/DNS), чтобы обеспечить связь между Pods или открыть приложения для внешних пользователей.

🔹Ingress: Управляет внешним трафиком HTTP/HTTPS, направляя его к соответствующим сервисам внутри кластера.

🔹Namespace: Виртуальный кластер в рамках Kubernetes, позволяющий изолировать ресурсы и поддерживать многопользовательскую среду.

🔹Persistent Volume (Постоянный том): Отделяет хранилище от Pods, обеспечивая сохранность данных при перезапуске или удалении контейнеров.

Все эти компоненты работают вместе, создавая мощную систему для автоматизации оркестрации приложений. Kubernetes стал основой для обеспечения надежности и масштабируемости в современных программных системах.

Однако это не решение для каждого приложения. Есть крутой кривой обучения и высокая сложность. В некоторых случаях более простые или легковесные решения, такие как Docker Swarm или PaaS-платформы, могут быть более подходящими

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍64
💡 Совет дня по Linux 🐧

В Linux оператор конвейера (|) полезен, когда нужно направить вывод одной команды на вход другой для дальнейшей обработки:

$ cat data.txt | grep "No such file"


Однако это не перенаправляет ошибки. Если файл не существует, команда grep не даст результата.

Что если нужно перенаправить и обработать как ошибки, так и обычный вывод? 🤔

Здесь на помощь приходит оператор перенаправления |&.

Этот оператор направляет как стандартный вывод (stdout), так и стандартные ошибки (stderr) первой команды через конвейер на стандартный ввод (stdin) второй команды. Посмотрите на следующий пример:

$ cat data.txt |& grep "No such file"


Обратите внимание на разницу: команда grep смогла найти совпадение.

Оператор |& в bash является сокращением для оператора перенаправления 2>&1 |:

$ cmd-1  2>&1  |  cmd-2


👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍215
👩‍💻 Docker Volumes: Полное руководство

Контейнеры Docker изначально задумывались как эфемерные, то есть их файловая система не сохраняется после остановки или удаления контейнера. Docker Volumes (тома) обеспечивают механизм хранения и обмена данными, который выходит за пределы жизненного цикла контейнера, предотвращая потерю данных. Это особенно важно для приложений, которым требуется постоянное хранилище, таких как базы данных, CMS или stateful-сервисы.

Типы томов Docker
Существует три основных типа томов в Docker:

🔹Именованные тома (Named Volumes)
Это наиболее распространенный и удобный тип. Они управляются самим Docker и хранятся в файловой системе хоста в специальном каталоге (/var/lib/docker/volumes/ на Linux). Именованные тома подходят для хранения данных, требующих сохранности (например, базы данных) и легко поддаются резервному копированию или миграции.

🔹Анонимные тома (Anonymous Volumes)
Анонимные тома, как и именованные, управляются Docker, но не имеют явного имени. Они используются для временных данных, которые не нужно сохранять между пересозданиями или перезапусками контейнера. Их сложнее отслеживать, и они автоматически удаляются, когда контейнер, их использующий, уничтожается.

🔹Привязанные тома (Bind Mounts)
В отличие от обычных томов, привязанные тома позволяют монтировать конкретный каталог или файл с хостовой системы в контейнер. Этот метод предоставляет больше контроля над местоположением и правами доступа к данным. Изменения, внесенные в файлы на хосте, сразу отображаются в контейнере и наоборот. Bind mounts удобны для совместного использования конфигурационных файлов или исходного кода в процессе разработки.

Создание и монтирование именованных томов

Создать именованный том можно командой:

docker volume create jenkins_home

Если имя не указано, Docker сгенерирует его автоматически.

Для запуска контейнера с монтированным томом используйте флаг -v:

docker run -d --name jenkins -p 8080:8080 -v jenkins_home:/var/data jenkins/jenkins

В этом примере том jenkins_home монтируется в контейнер по пути /var/data.

По умолчанию тома монтируются с правами чтения-записи. Чтобы примонтировать том в режиме "только для чтения", используйте :ro:

docker run -d --name jenkins -p 8080:8080 -v jenkins_home:/var/data:ro jenkins/jenkins


Создание и монтирование анонимных томов

Анонимный том создается автоматически при запуске контейнера с -v, но без указания источника:

docker run -d -v /data nginx


Создание и монтирование привязанных томов

Привязанные тома используют файловую систему хоста, а не Docker. Чтобы создать bind mount, необходимо заранее создать нужный каталог или файл на хосте.

Для монтирования каталога используйте флаг -v:

docker run -d -p 80:80 -v $(pwd):/data nginx


Или более явный --mount:
docker run -d -p 80:80 --mount type=bind,source=$(pwd),target=/data nginx


Теперь любые файлы, созданные в /data внутри контейнера, появятся в текущем каталоге на хосте.

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

Просмотр и управление томами Docker

🔹Список всех томов в системе:
docker volume ls


🔹Просмотр информации о томе:
docker volume inspect jenkins_home


🔹Удаление томов Docker
Удаление конкретного тома:
docker volume rm jenkins_home


Удаление всех неиспользуемых томов:
docker volume prune


Анонимные тома и привязанные тома обычно удаляются вместе с контейнером.

Практическое применение Docker Volumes

🔹Сохранение данных: базы данных или файловые хранилища сохраняют данные даже после удаления контейнера.
🔹Общий доступ к данным: несколько контейнеров могут использовать общий том.
🔹Разработка: привязанные тома позволяют разрабатывать без пересборки контейнеров, так как код обновляется на лету.
🔹Резервное копирование и миграция: данные тома можно скопировать с одного хоста на другой.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍162
Лучшие практики использования томов Docker
🔹Используйте именованные тома для важных данных.
🔹Регулярно очищайте неиспользуемые тома, чтобы не занимать дисковое пространство.
🔹Будьте осторожны с привязанными томами, так как они дают контейнеру доступ к файловой системе хоста.
🔹Используйте плагины для томов для расширенных возможностей, таких как шифрование и снапшоты.

Заключение
Docker Volumes — это мощный инструмент для управления данными в контейнерах. Их грамотное использование значительно упрощает развертывание, разработку и администрирование контейнеризированных приложений.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13
Быстрый совет по Linux 🐧

Вы можете использовать опцию -exec команды find, чтобы вызвать внешнюю программу для выполнения определённого действия над найденными файлами, соответствующими заданным критериям. Например, удаление файлов, вывод прав доступа и т. д.

$ find ~/ -type f -exec ls -lah {} \;


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

Приведённая команда выводит информацию о правах доступа и других метаданных для каждого найденного файла.

Разбор опции -exec:
🔹exec ls — указывает find выполнить команду ls для каждого найденного файла.
🔹-lah — отображает все файлы (включая скрытые), их права доступа и другие метаданные (например, размер) в удобочитаемом формате.
🔹{} — это специальный placeholder, заменяемый именем каждого найденного файла. Он всегда должен быть последним в списке параметров.
🔹; — указывает конец списка параметров. Его необходимо экранировать (\;), иначе shell интерпретирует его неправильно.

Также вместо ; можно использовать +, что позволяет передавать сразу несколько файлов в одну команду. Между + и {} должен быть пробел.

Можно выполнять несколько команд с помощью -exec. Например, следующая команда считает количество слов в текстовых файлах и их занимаемое место на диске:

$ find . -name "*.txt" -exec wc {} \; -exec du -sh {} \;


👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍241