По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Docker - программное обеспечение с открытым исходным кодом, предназначенное для упрощения и ускорения разработки приложений. Это набор продуктов PaaS (Platform as a Service) - Платформа как услуга, которые создают изолированные виртуализированные среды для создания, развертывания и тестирования приложений. Несмотря на то, что программное обеспечение относительно просто в управлении, существуют некоторые специфичные для Docker термины, в которых путаются новые пользователи. Докерфайлы, образы, контейнеры, тома и другая терминология должны быть освоены раз и навсегда. Понимание элементов Docker ускорит обучение работе с ним. Первый вопрос, который задают многие пользователи: "В чем разница между образом Docker и контейнером?" Что такое Docker Image Образ Docker (Docker Image) - это неизменяемый файл, содержащий исходный код, библиотеки, зависимости, инструменты и другие файлы, необходимые для запуска приложения. Из-за того, что образы предназначены только для чтения их иногда называют снимками (snapshot). Они представляют приложение и его виртуальную среду в определенный момент времени. Такая согласованность является одной из отличительных особенностей Docker. Он позволяет разработчикам тестировать и экспериментировать программное обеспечение в стабильных, однородных условиях. Так как образы являются просто шаблонами, их нельзя создавать или запускать. Этот шаблон можно использовать в качестве основы для построения контейнера. Контейнер - это, в конечном счете, просто образ. При создании контейнера поверх образа добавляет слой, доступный для записи, что позволяет менять его по своему усмотрению. Образ - это шаблон, на основе которого создается контейнер, существует отдельно и не может быть изменен. При запуске контейнерной среды внутри контейнера создается копия файловой системы (docker образа) для чтения и записи. Можно создать неограниченное количество образов Docker из одного шаблона. Каждый раз при изменении начального состояния образа и сохранении существующего состояния создается новый шаблон с дополнительным слоем поверх него. Таким образом, образы Docker могут состоять из ряда слоев, каждый из которых отличается от предыдущего. Слои образа представляют файлы, доступные только для чтения, поверх которых при создании контейнера добавляется новый слой. Что такое Docker Container? Контейнер Docker (Docker Container) - это виртуализированная среда выполнения, в которой пользователи могут изолировать приложения от хостовой системы. Эти контейнеры представляют собой компактные портативные хосты, в которых можно быстро и легко запустить приложение. Важной особенностью контейнера является стандартизация вычислительной среды, работающей внутри контейнера. Это не только гарантирует, что ваше приложение работает в идентичных условиях, но и упрощает обмен данными с другими партнерами по команде. Контейнеры работают автономно, изолированно от основной системы и других контейнеров, и потому ошибка в одном из них не влияет на другие работающие контейнеры, а также поддерживающий их сервер. Docker утверждает, что эти блоки «обеспечивают самые сильные возможности изоляции в отрасли». Поэтому при разработке приложения вам не придется беспокоиться о безопасности компьютера. В отличие от виртуальных машин, где виртуализация выполняется на аппаратном уровне, контейнеры виртуализируются на уровне приложений. Они могут использовать одну машину, совместно использовать ее ядро и виртуализировать операционную систему для выполнения изолированных процессов. Это делает контейнеры чрезвычайно легкими, позволяя сохранять ценные ресурсы. Образа Docker в сравнении с Docker контейнерами Говоря о разнице между образами и контейнерами, было бы неверно противопоставлять их друг-другу. Оба элемента тесно связаны между собой и являются основными шестерёнками Docker. Из определения терминов образ и контейнер выше, легко установить связь между ними: образы могут существовать без контейнеров, тогда как для существования контейнеров необходимо запустить образ. Поэтому контейнеры зависят от изображений и используют их для создания среды выполнения и запуска приложения. Эти две концепции существуют как важные компоненты (или, скорее, фазы) в процессе запуска контейнера Docker. Наличие рабочего контейнера является конечной «фазой» этого процесса, указывая, что он зависит от предыдущих этапов и компонентов. Именно поэтому образ docker по существу управляют контейнерами и формируют их. Из Dockerfile к образу и контейнеру Все начинается с последовательности инструкций, определяющих способ построения определенного образа Docker – Dockerfile. Данный файл автоматически выполняет команды скрипта и создает образ Docker. Для создания образа из Dockerfile используется команда docker build. Затем образ используется в качестве шаблона, который разработчик может скопировать и использовать для запуска приложения. Приложению необходима изолированная среда для выполнения - контейнер. Эта среда - не просто виртуальное «пространство». Она полностью зависит от образа, на базе которого была создана. Исходный код, файлы, зависимости и двоичные библиотеки, которые находятся в образе Docker, составляют контейнер. Чтобы создать слой контейнера из образа, используйте команду docker create. Наконец, после запуска контейнера из существующего образа вы запускаете его службу и запускаете приложение. Создание образа из контейнера. Если вы вносите изменения в исходный образ и хотите сохранить его для дальнейшей работы, можно сохранить измененный образ, сделав снимок текущего состояния контейнера. Таким образом, слой контейнера прикрепляется поверх образа, в конечном итоге создавая новый неизменяемый образ. В результате получается два образа Docker, полученные из одной файловой системы. Заключение Данная статья должна помочь понять, что такое образ Docker, что такое контейнер и как они связаны. Если поймете процесс создания контейнера, поймете разницу между образом и контейнером.
img
В этой статье мы рассмотрим протокол маршрутизации Cisco EIGRP. EIGRP (Enhanced Interior Gateway Routing Protocol) - это протокол расширенной векторной маршрутизации, который должен устанавливать отношения соседства перед отправкой обновлений. Из-за этого первое, что нам нужно сделать, это проверить, правильно ли работает соседство. Если это так, мы можем продолжить, проверив, объявляются сети или нет. В этой статье рассмотрим все, что может пойти не так с EIGRP, как это исправить и в каком порядке. Давайте начнем с проверки соседства! Существует ряд элементов, которые вызывают проблемы соседства EIGRP: Неизвестная подсеть: соседи EIGRP с IP-адресами, которые не находятся в одной подсети. Несоответствие значений K: по умолчанию пропускная способность и задержка включены для расчета метрики. Мы можем включить нагрузку и надежность, но мы должны сделать это на всех маршрутизаторах EIGRP. Несоответствие AS: номер автономной системы должен совпадать на обоих маршрутизаторах EIGRP, чтобы сформировать соседство. Проблемы уровня 2: EIGRP работает на уровне 3 модели OSI. Если уровни 1 и 2 не работают должным образом, у нас будут проблемы с формированием соседства. Проблемы со списком доступа: возможно, кто-то создал список доступа, который отфильтровывает многоадресный трафик. EIGRP по умолчанию использует 224.0.0.10 для связи с другими соседями EIGRP. NBMA: по умолчанию Non Broadcast Multi Access сети, такие как Frame Relay, не разрешают широковещательный или многоадресный трафик. Это может препятствовать тому, чтобы EIGRP формировал соседние отношения EIGRP. OFF1(config)#int f0/0 OFF1(config-if)#ip address 192.168.12.1 255.255.255.0 OFF1(config-if)#router eigrp 12 OFF1(config-router)#network 192.168.12.0 OFF2(config)#int f0/0 OFF2(config-if)#ip address 192.168.21.2 255.255.255.0 OFF2(config)#router eigrp 12 OFF2(config-router)#network 192.168.21.0 Ошибку неверной подсети легко обнаружить. В приведенном выше примере у нас есть 2 маршрутизатора, и вы можете видеть, что были настроены разные подсети на каждом интерфейсе. После включения EIGRP всплывают следующие ошибки: Оба маршрутизатора жалуются, что находятся не в одной подсети. OFF2(config-router)#int f0/0 OFF2(config-if)#ip address 192.168.12.2 255.25 OFF2(config)#router eigrp 12 OFF2(config-router)#no network 192.168.21.0 OFF2(config-router)#network 192.168.12.0 Мы изменили IP-адрес на OFF2 и убедились, что для EIGRP правильно настроена команда network. Вуаля! Теперь у нас есть соседство EIGRP. Проверим это с помощью команды show ip eigrp neighbors. Извлеченный урок: убедитесь, что оба маршрутизатора находятся в одной подсети. Case #2 На этот раз IP-адреса верны, но мы используем разные значения K с обеих сторон. OFF1 включил пропускную способность, задержку, нагрузку и надежность. OFF2 использует только пропускную способность и задержку. Эту ошибку легко обнаружить, поскольку сообщение в консоли гласит "Несоответствие K-значений" на обоих маршрутизаторах. Мы можем проверить нашу конфигурацию, посмотрев ее на обоих маршрутизаторах. Как вы видите, что значения K были изменены на OFF1. OFF2(config)#router eigrp 12 OFF2(config-router)#metric weights 0 1 1 1 1 0 Давайте убедимся, что значения K одинаковы на обоих маршрутизаторах, так как мы изменили их на OFF2. После изменения значений K у нас появилось соседство EIGRP-соседей. Еще одна проблема решена! Извлеченный урок: убедитесь, что значения K одинаковы на всех маршрутизаторах EIGRP в одной и той же автономной системе. Case #3 Давайте продолжим со следующей ошибкой ... Вот еще один пример типичной проблемы. Несоответствие номера AS. Когда мы настраиваем EIGRP, мы должны ввести номер AS. В отличие от OSPF (который использует ID процесса) этот номер должен быть одинаковым на обоих маршрутизаторах. В отличие от других неверных настроек конфигурации EIGRP, эта проблема не выдает сообщение об ошибке. Используем команду show ip eigrp neighbors и видим, что соседей нет. Внимательно изучите выходные данные, чтобы обнаружить различия, и вы увидите, что маршрутизаторы используют разные номера AS. Если посмотреть на работающую конфигурацию, и мы увидим то же самое. Давайте изменим номер AS на OFF2. После смены номера AS все заработало как положено. Извлеченный урок: убедитесь, что номера AS одинаковые, если вы хотите соседства EIGRP. Case #4 И последнее, но не менее важное: если вы проверили номер AS, значения K, IP-адреса и у вас все еще нет работающего соседства EIGRP, вам следует подумать о безопасности. Возможно, access-list блокирует EIGRP и/или многоадресный трафик. Следующая ситуация: опять два маршрутизатора EIGRP и отсутствие соседства. Что здесь происходит? Мы видим, что нет соседей ... Если вы посмотрите на вывод команды show ip protocols, то увидите, что сеть была объявлена правильно. Если вы посмотрите внимательно на OFF2, вы увидите, что у нас есть пассивный интерфейс. Удалим настройки пассивного интерфейса! OFF2(config)#router eigrp 12 OFF2(config-router)#no passive-interface fastEthernet 0/0 Еще одна неправильная настройка создала нам проблемы, но мы ее решили. Задача решена! Извлеченный урок: не включайте пассивный интерфейс, если вы хотите установить соседство EIGRP. Case #5 В приведенном выше примере у нас есть те же 2 маршрутизатора, но на этот раз кто-то решил, что было бы неплохо настроить список доступа на OFF2, который блокирует весь входящий многоадресный трафик. Здесь можно запутаться. На OFF1 мы видим, что он считает, что установил соседство EIGRP с OFF2. Это происходит потому, что мы все еще получаем пакеты EIGRP от OFF2. Используем команду debug eigrp neighbors, чтобы посмотреть, что происходит. Очевидно, что OFF1 не получает ответ от своих hello messages, holdtime истекает, и это отбрасывает установление соседства EIGRP. Быстрый способ проверить подключение - отправить эхо-запрос по адресу многоадресной рассылки 224.0.0.10, который использует EIGRP. МЫ видим, что мы ответа нет от этого запроса. Рекомендуется проверить, есть ли в сети списки доступа. Так, так! Мы нашли что-то ... Этот список доступа блокирует весь многоадресный трафик. Давайте сделаем настройку, которая разрешит EIGRP. OFF2(config)#ip access-list extended BLOCKMULTICAST OFF2(config-ext-nacl)#5 permit ip any host 224.0.0.10 Мы создаем специальное правило, которое будет разрешать трафик EIGRP. Как мы видим, что трафик EIGRP разрешен - это соответствует правилу, которое мы выше создали. Оба маршрутизатора теперь показывают рабочее соседство EIGRP. Эхо-запрос, который мы только что отправили, теперь работает. Извлеченный урок: не блокируйте пакеты EIGRP! Case #6 Рассмотрим очередную ситуацию, в которой нет соседства EIGRP. На картинке выше мы имеем сеть Frame Relay и один канал PVC между OFF1 и OFF2. Вот соответствующая конфигурация: Оба маршрутизатора настроены для Frame Relay, а EIGRP настроен. Видно, что нет соседей ... это не хорошо! Можем ли мы пропинговать другую сторону? Пинг проходит, поэтому мы можем предположить, что PVC Frame Relay работает. EIGRP, однако, использует многоадресную передачу, а Frame Relay по умолчанию - NBMA. Можем ли мы пропинговать адрес многоадресной рассылки EIGRP 224.0.0.10? Здесь нет ответа на наш вопрос, по крайней мере, теперь мы знаем, что unicast трафик работает, а multicast не работает. Frame Relay может быть настроен для point-to-point или point-to-multipoint соединения. Физический интерфейс всегда является интерфейсом frame-relay point-tomultipoint, и для него требуются frame-relay maps, давайте проверим это: Мы видим, что оба маршрутизатора имеют DLCI-to-IP карты, поэтому они знают, как связаться друг с другом. Видим, что они используют ключевое слово "статический", а это говорит о том, что это сопоставление было кем-то настроено и не изучено с помощью Inverse ARP (в противном случае вы увидите "динамический"). Мы не видим ключевое слово "broadcast", которое требуется для пересылки широковещательного или многоадресного трафика. На данный момент у нас есть 2 варианта решения этой проблемы: Настроить EIGRP для использования одноадресного трафика вместо многоадресного. Проверить конфигурацию Frame Relay и убедится, что многоадресный трафик не перенаправляется. Давайте сначала сделаем unicast настройку EIGRP: OFF1(config)#router eigrp 12 OFF1(config-router)#neighbor 192.168.12.2 serial 0/0 OFF2(config)#router eigrp 12 OFF2(config-router)#neighbor 192.168.12.1 serial 0/0 Нам нужна команда neighbor для конфигурации EIGRP. Как только вы введете эту команду и нажмете enter, вы увидите это: Задача решена! Теперь давайте попробуем другое решение, где мы отправляем multicast трафик по PVC Frame Relay: OFF1(config)#router eigrp 12 OFF1(config-router)#no neighbor 192.168.12.2 serial 0/0 OFF2(config)#router eigrp 12 OFF2(config-router)#no neighbor 192.168.12.1 serial 0/0 Если это не работает ... не исправляйте это... , но не в этот раз! Пришло время сбросить соседство EIGRP. OFF1(config)#interface serial 0/0 OFF1(config-if)#frame-relay map ip 192.168.12.2 102 broadcast OFF2(config)#interface serial 0/0 OFF2(config-if)#frame-relay map ip 192.168.12.1 201 broadcast Broadcast - это ключевое волшебное слово здесь. Это разрешит широковещательный и многоадресный трафик. После изменения конфигурации frame-relay map появляется соседство EIGRP! Это все, что нужно сделать. Извлеченный урок: проверьте, поддерживает ли ваша сеть Frame Relay broadcast или нет. Настройте EIGRP для использования unicast передачи или измените конфигурацию Frame Relay для поддержки широковещательного трафика. Продолжение цикла про поиск и устранение неисправностей протокола EIGRP можно почитать тут.
img
Нужно просмотреть текст внутри двоичного файла или файла данных? Команда Linux strings извлечет и выведет на терминал биты текста, которые называются "строками". Linux полон команд, которые могут выглядеть как решения в поисках проблем. Команда strings одна из них. Так, зачем же она нужна? Есть ли похожая команда, которая перечисляет строки для печати из двоичного файла? Давайте вернемся назад. Двоичные файлы, такие как программные файлы, могут содержать строки читаемого человеком текста. Но как мы их видим? Если использовать cat или less, то, скорее всего, зависнет окно терминала. Программы, предназначенные для работы с текстовыми файлами, не могу обрабатывать исполняемые файлы, содержащие непечатаемые символы. Большая часть данных в двоичном файле нечитабельна и не могут быть выведены в окно терминала каким-либо образом, так как нет знаков или стандартных символов для представления двоичных значений, которые не соответствуют буквенно-цифровым символам, знакам пунктуации или пробелам. В совокупности они называются "печатаемыми" символами. Остальные - "непечатаемые" символы. Поэтому попытка просмотра или поиска текстовых строк в двоичном файле или файле данных является проблемой. И вот здесь на помощь спешит strings. Он извлекает строки печатаемых символов из файлов, чтобы другие команды могли использовать эти строки без необходимости контактировать с непечатаемыми символами. Использование команды strings На самом деле нет ничего сложного в этой команде: просто передаем команде название файла. Как пример, мы попробуем просмотреть содержимое исполняемого файла jibber с помощью strings. strings jibber На скриншоте ниже список строк, извлечённых из указанного файла: Установка минимальной длины строки По умолчанию, команда strings ищет строки, содержащие четыре и более символов. Чтобы изменить значение по умолчанию используется ключ –n. Имейте ввиду, что чем короче минимальная длина, тем больше шансов получить на выводе бесполезного материала. Некоторые двоичные значения имеют то же числовое значение, что и значение, представляющее печатаемый символ. Если два из этих числовых значений находятся рядом в файле, а минимальная длина, равна двум, эти байты будут отображаться как строки. Чтобы установить длину строки равной двум, используйте следующую команду: strings -n 2 jibber Теперь у нас на выводе есть строки, длина который равна двум и более символам. Учтите, что пробел тоже считается печатаемым символом. Ограничение вывода команды strings командой less Чтобы ограничить объем выведенной информации вывод команды strings можно передать команде less, а затем прокруткой просматривать всю информацию: strings jibber | less Теперь мы видим список, выводимый командой less, где начало списка отображено первым: Использование strings с файлами объектов Обычно исходный код программ компилируется в файлы объектов. Они в свою очередь связаны с файлами библиотек, чтобы создать исполняемый файл. У нас есть файл объектов jibber, давайте посмотрим, что в нем: jibber.o | less Данные выводятся в таблице по 8 колонок, каждая из строк которой заканчивается на букву “H”. В данном примере у нас SQL запрос. Но если прокрутить ниже, то можно заметить, что форматирование не относится ко всему файлу. Думаю, интересно видеть разницу между текстовыми строками файла объектов и конечного исполняемого файла. Поиск в конкретной области файла Скомпилированные программы имеют различные области, которые используются для хранения текста. По умолчанию, strings ищет текст во всем файле. Это так же, как если бы вы использовали параметр -a (all). Для поиска строк только в инициализированных, загруженных разделах данных в файле используйте параметр -d (data). strings -d jibber | less Если нет особой причины, то вполне можно обойтись значением по умолчанию. Вывод номера строки Иногда бывает необходимо узнать точное смещение, расположение строки в файле. В этом нам поможет ключ –o (offset). strings -o parse_phrases | less В данном случае номера строки показаны в восьмеричной системе. Для получения значений в других системах исчисления, достаточно использовать опцию –t, а затем передать нужный ключ: d (десятичная система), x (шестнадцатеричная) или o (восьмеричная). Опция –t с ключом o равнозначна запуску команды strings с ключом –o. strings -t d parse_phrases | less Теперь номера строк показаны в десятичной системе: strings -t x parse_phrases | less А тут в шестнадцатеричной: Вывод управляющих символов Команда strings принимает знаки табуляции и пробела, как часть строки, игнорируя при этом символ начала новой строки - /r или возврата каретки - /r. Чтобы включить их отображение нужно добавить ключ –w. strings -w add_data | less Ниже мы видим пустую строку. Это результат работы управляющих символов: либо символа новой строки, либо символ возврата каретки. Мы не ограничены только файлами Мы можем использовать строки с любым, что есть или может создать поток байтов. С помощью этой команды мы можем просмотреть содержимое оперативной памяти (RAM) нашего компьютера. Нам нужно использовать >sudo, потому что мы получаем доступ /dev/mem. Это символьного файл устройства, в котором хранится изображение оперативной памяти компьютера. sudo strings /dev/mem | less В списке не все содержимое оперативной памяти, а лишь то, что команда strings смогла извлечь. Поиск нескольких файлов сразу Маски можно использовать для выбора групп файлов для поиска. Символ * обозначает нуль и больше символов, а символ «?» означает любой отдельный символ. Можно также указать в командной строке множество имен файлов. Мы будем использовать маску для поиска всех исполняемых файлов в каталоге /bin. Поскольку список будет содержать результаты из многих файлов, будет использоваться параметр -f (имя файла). Имя файла будет напечатано в начале каждой строки. Затем можно просмотреть файл, в котором была найдена данная строка. Затем передадим результаты через grep и выведем строки, содержащие слово "Copyright": strings -f /bin/* | grep Copyright Мы получаем упорядоченный список с об авторских правах каждого файла в каталоге /bin, с именем файла в начале каждой строки. Команда strings распутана Команда strings – это не какая-то тайная команда. Это обычная команда Linux. Он делает выполняет конкретные задачи и делает это очень хорошо. Это еще один из преимуществ Linux, и действительно мощных в сочетании с другими командами. Когда вы видите, как он может оперировать двоичными файлами и другими инструментами, такими как grep, начинаете по-настоящему ценить функциональность этой слегка непонятной команды.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59