По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
Почитать лекцию №16 про модель сети Министерства обороны США (DoD) можно тут. В 1960-х годах, вплоть до 1980-х годов, основной формой связи была коммутируемая схема; отправитель просил сетевой элемент (коммутатор) подключить его к определенному приемнику, коммутатор завершал соединение (если приемник не был занят), и трафик передавался по результирующей схеме. Если это звучит как традиционная телефонная система, то это потому, что на самом деле она основана на традиционной сетевой системе (теперь называемой обычной старой телефонной службой [POTS]). Крупные телефонные и компьютерные компании были глубоко инвестированы в эту модель и получали большой доход от систем, разработанных вокруг методов коммутации цепей. По мере того, как модель DoD (и ее набор сопутствующих протоколов и концепций) начали завоевывать популярность у исследователей, эти сотрудники решили создать новую организацию по стандартизации, которая, в свою очередь, построит альтернативную систему, обеспечивающую "лучшее из обоих миров". Они будут включать в себя лучшие элементы коммутации пакетов, сохраняя при этом лучшие элементы коммутации каналов, создавая новый стандарт, который удовлетворит всех. В 1977 году эта новая организация по стандартизации была предложена и принята в качестве International Organization for Standardizatio (ISO). Основная цель состояла в том, чтобы обеспечить взаимодействие между крупными системами баз данных, доминировавшими в конце 1970-х гг. Комитет был разделен между инженерами связи и контингентом баз данных, что усложнило стандарты. Разработанные протоколы должны были обеспечить как ориентированное на соединение, так и бесконтактное управление сеансами, а также изобрести весь набор приложений для создания электронной почты, передачи файлов и многих других приложений (помните, что приложения являются частью стека). Например, необходимо было кодифицировать различные виды транспорта для транспортировки широкого спектра услуг. В 1989 году-целых десять лет спустя-спецификации еще не были полностью выполнены. Протокол не получил широкого распространения, хотя многие правительства, крупные производители компьютеров и телекоммуникационные компании поддерживали его через стек и модель протокола DoD. Но в течение десяти лет стек DoD продолжал развиваться; была сформирована Инженерная рабочая группа по разработке Интернету (Engineering Task Force -IETF) для поддержки стека протоколов TCP/IP, главным образом для исследователей и университетов (Интернет, как тогда было известно, не допускал коммерческого трафика и не будет до 1992 года). С отказом протоколов OSI материализоваться многие коммерческие сети и сетевое оборудование обратились к пакету протоколов TCP/IP для решения реальных проблем "прямо сейчас". Кроме того, поскольку разработка стека протоколов TCP/IP оплачивалась по грантам правительства США, спецификации были бесплатными. На самом деле существовали реализации TCP/IP, написанные для широкого спектра систем, доступных благодаря работе университетов и аспирантов, которые нуждались в реализации для своих исследовательских усилий. Однако спецификации OSI могли быть приобретены только в бумажном виде у самой ISO и только членами ISO. ISO был разработан, чтобы быть клубом "только для членов", предназначенным для того, чтобы держать должностных лиц под контролем развития технологии коммутации пакетов. Однако принцип "только члены" организации работал против должностных лиц, что в конечном счете сыграло свою роль в их упадке. Однако модель OSI внесла большой вклад в развитие сетей; например, пристальное внимание, уделяемое качеству обслуживания (QoS) и вопросам маршрутизации, принесло дивиденды в последующие годы. Одним из важных вкладов стала концепция четкой модульности; сложность соединения многих различных систем с множеством различных требований побудила сообщество OSI призвать к четким линиям ответственности и четко определенным интерфейсам между слоями. Второй - это концепция межмашинного взаимодействия. Средние блоки, называемые затем шлюзами, теперь называемые маршрутизаторами и коммутаторами, явно рассматривались как часть сетевой модели, как показано на рисунке 3. Гениальность моделирования сети таким образом заключается в том, что она делает взаимодействие между различными частями намного легче для понимания. Каждая пара слоев, перемещаясь вертикально по модели, взаимодействует через сокет или приложение. Programming Interface (API). Таким образом, чтобы подключиться к определенному физическому порту, часть кода на канальном уровне будет подключаться к сокету для этого порта. Это позволяет абстрагировать и стандартизировать взаимодействие между различными уровнями. Компонент программного обеспечения на сетевом уровне не должен знать, как обращаться с различными видами физических интерфейсов, только как получить данные для программного обеспечения канального уровня в той же системе. Каждый уровень имеет определенный набор функций для выполнения. Физический уровень, также называемый уровнем 1, отвечает за модулирование или сериализацию 0 и 1 на физическом канале. Каждый тип связи будет иметь различный формат для передачи сигналов 0 или 1; физический уровень отвечает за преобразование "0" и "1" в эти физические сигналы. Канальный уровень, также называемый уровнем 2, отвечает за то, чтобы некоторая передаваемая информация фактически отправлялась на нужный компьютер, подключенный к той же линии. Каждое устройство имеет свой адрес канала передачи данных (уровень 2), который можно использовать для отправки трафика на конкретное устройство. Уровень канала передачи данных предполагает, что каждый кадр в потоке информации отделен от всех других кадров в том же потоке, и обеспечивает связь только для устройств, подключенных через один физический канал. Сетевой уровень, также называемый уровнем 3, отвечает за передачу данных между системами, не связанными через единую физическую линию связи. Сетевой уровень, таким образом, предоставляет сетевые адреса (или Уровень 3), а не локальные адреса линий связи, а также предоставляет некоторые средства для обнаружения набора устройств и линий связи, которые должны быть пересечены, чтобы достичь этих пунктов назначения. Транспортный уровень, также называемый уровнем 4, отвечает за прозрачную передачу данных между различными устройствами. Протоколы транспортного уровня могут быть либо "надежными", что означает, что транспортный уровень будет повторно передавать данные, потерянные на каком-либо нижнем уровне, либо "ненадежными", что означает, что данные, потерянные на нижних уровнях, должны быть повторно переданы некоторым приложением более высокого уровня. Сеансовый уровень, также называемый уровнем 5, на самом деле не переносит данные, а скорее управляет соединениями между приложениями, работающими на двух разных компьютерах. Сеансовый уровень гарантирует, что тип данных, форма данных и надежность потока данных все представлены и учтены. Уровень представления, также называемый уровнем 6, фактически форматирует данные таким образом, чтобы приложение, работающее на двух устройствах, могло понимать и обрабатывать данные. Здесь происходит шифрование, управление потоком и любые другие манипуляции с данными, необходимые для обеспечения интерфейса между приложением и сетью. Приложения взаимодействуют с уровнем представления через сокеты. Уровень приложений, также называемый уровнем 7, обеспечивает интерфейс между пользователем и приложением, которое, в свою очередь, взаимодействует с сетью через уровень представления. Не только взаимодействие между слоями может быть точно описано в рамках семислойной модели, но и взаимодействие между параллельными слоями на нескольких компьютерах может быть точно описано. Можно сказать, что физический уровень на первом устройстве взаимодействует с физическим уровнем на втором устройстве, уровень канала передачи данных на первом устройстве с уровнем канала передачи данных на втором устройстве и так далее. Точно так же, как взаимодействие между двумя слоями на устройстве обрабатывается через сокеты, взаимодействие между параллельными слоями на разных устройствах обрабатывается через сетевые протоколы. Ethernet описывает передачу сигналов "0" и "1" на физический провод, формат для запуска и остановки кадра данных и средство адресации одного устройства среди всех устройств, подключенных к одному проводу. Таким образом, Ethernet попадает как в физический, так и в канальный уровни передачи данных (1 и 2) в модели OSI. IP описывает форматирование данных в пакеты, а также адресацию и другие средства, необходимые для отправки пакетов по нескольким каналам канального уровня, чтобы достичь устройства за несколько прыжков. Таким образом, IP попадает в сетевой уровень (3) модели OSI. TCP описывает настройку и обслуживание сеанса, повторную передачу данных и взаимодействие с приложениями. TCP затем попадает в транспортный и сеансовый уровни (4 и 5) модели OSI. Одним из наиболее запутанных моментов для администраторов, которые когда-либо сталкиваются только со стеком протоколов TCP/IP, является другой способ взаимодействия протоколов, разработанных в/для стека OSI, с устройствами. В TCP/IP адреса относятся к интерфейсам (а в мире сетей с большой степенью виртуализации несколько адресов могут относиться к одному интерфейсу, или к услуге anycast, или к multicast и т. д.). Однако в модели OSI каждое устройство имеет один адрес. Это означает, что протоколы в модели OSI часто называются типами устройств, для которых они предназначены. Например, протокол, несущий информацию о достижимости и топологии (или маршрутизации) через сеть, называется протоколом промежуточной системы (IS-IS), поскольку он работает между промежуточными системами. Существует также протокол, разработанный для того, чтобы промежуточные системы могли обнаруживать конечные системы; это называется протоколом End System to Intermediate System (ES-IS).
img
Система доменных имен (DNS – Domain Name System) обеспечивает сетевую коммуникацию. DNS может показаться какой-то невидимой силой или сущностью до тех пор, пока что-то пойдет не так, потому что если DNS выйдет из строя, то ничего работать не будет. В данной статье будут рассмотрены передовые методы и наиболее важные меры безопасности для поддержания работоспособности вашей инфраструктуры DNS. Чтобы создать безопасную и надежную DNS, обязательно изучите перечисленные ниже пункты. Передовые технологии для обеспечения высокой производительности DNS Обеспечение избыточности и высокой доступности DNS DNS является основой сетевых приложений, поэтому инфраструктура DNS должна быть высоко доступной. А чтобы обеспечить необходимый уровень избыточности, в вашей организации должно быть, как минимум, два DNS-сервера, первичный и вторичный. Чтобы обеспечить работу критически важных для бизнеса систем, необходимо иметь, как минимум, два внутренних DNS-сервера. Все системы активного каталога, обмена данными и электронной почты полагаются на корректную работу DNS. Без исправно функционирующих внутренних DNS-серверов внутренние устройства не будут иметь возможности обмениваться данными. Если на одном DNS-сервере возникнет проблема, то второй сразу же заменяет его. Администраторы настраивают оборудование так, чтобы автоматически использовался вторичный DNS, если первичный не отвечает. IP-адрес внутреннего DNS-сервера может быть любым в диапазоне IP-адресов частной сети. Обеспечивая избыточность DNS-серверов, вы можете добиться высокой доступности инфраструктуры DNS. Непрерывная репликация с первичных серверов на вторичные обеспечит синхронизацию ваших DNS-записей и защитит систему от сбоев. Вы можете быть уверены в том, что конечный пользователь всегда будет иметь возможность получить доступ к системам. Сокрытие DNS-серверов и DNS-информации Не каждый DNS-сервер и не каждая информация должна быть доступна для всех пользователей. Во-первых, откройте только те серверы и данные, которые необходимы лицам, непосредственно использующим эти серверы. Это особенно важно, если ваши доменные имена являются общедоступными. Во-вторых, скройте свой основной DNS-сервер. Внешние пользователи не должны видеть первичные серверы. Записи для этих серверов не должны быть видны ни в одной общедоступной базе данных серверов имен. Запросы от пользователей должны обрабатывать только вторичные DNS-серверы. Если DNS-сервер доступен за пределами вашей сети, то это должен быть авторитативный DNS-сервер. Внешним пользователям не нужно обращаться к вашим рекурсивным DNS-серверам. Системная конфигурация будет высокопроизводительной только тогда, когда сервер будет отвечать только на итеративные запросы для соответствующих зон, за которые он отвечает. В довершение ко всему, иметь доступ к первичным серверам должны только системные администраторы и IT-персонал вашей организации. Если ваши первичные DNS-серверы будут открыты для всех внутренних пользователей, то это может создать серьезную угрозу для безопасности. Как показывает практика, лучше скрывать DNS-серверы и некоторые данные от пользователей, которым доступ к ним не нужен. Нужно ли использовать внешний или внутренний DNS-сервер? Ответ на данный вопрос зависит от внутренней настройки. Чтобы устройства в одном домене могли общаться друг с другом, вам необходимо указать внутренний DNS-сервер. Внешние DNS-серверы не могут работать с именами хостов внутренних устройств. Например, когда компьютер DESKTOP1 отправляет DNS-запрос для офисного принтера или сервера hr-1, только внутренняя DNS может предоставить запись ресурса. Если вы настроите устройство на использование внешнего DNS, например, 8.8.8.8 Google, то вы не сможете использовать внутренние ресурсы. Во внутренних средах необходимо установить, как первичный, так и вторичный DNS на внутренний сервер имен. Даже если основной DNS-сервер даст сбой, проблем с подключением не будет. Дополнительный DNS-сервер содержит все записи и действует как резервная копия. В случае возникновения какой-либо проблемы, этот сервер отвечает на все запросы до тех пор, пока не заработает основной сервер. Использование локального или ближайшего DNS-сервера Офисы крупных организаций часто расположены по всему миру. В таком случае следует настроить локальный DNS-сервер в каждом офисе, если позволяет инфраструктура. А все потому, что локальный сервер сокращает время ответа на DNS-запросы. Если же запрос проходит через глобальную сеть к удаленному серверу имен, то время загрузки увеличивается. При большом количестве клиентов, естественно, увеличивается количество DNS-запросов. Одна централизованная группа DNS-серверов, конечно, может обрабатывать все эти запросы, но с большой задержкой. Если компьютеры пользователей будут направляться на локальный или ближайший сервер имен, то время отклика может существенно сократиться. В таком случае задержка не превышает 50 мс. Более того, это значение обычно даже намного ниже. Использование ближайшего DNS-сервера сокращает время загрузки для всех устройств. Таким образом, вы также уменьшаете нагрузку на удаленный сервер в штаб-квартире и повышаете его производительность. Здесь также остается актуальной рекомендация иметь, как минимум, два DNS-сервера. Передовые методы обеспечения безопасности DNS DNS-серверы очень часто становятся целью кибератак. Важным шагом в предотвращении вторжений в вашу организацию является защита инфраструктуры DNS. Чтобы избежать серьезного нарушения настроек DNS, обязательно изучите меры безопасности, описанные ниже. Ведение журнала DNS-сервера Ведение журнала DNS-сервера – это один из самых эффективных способов отслеживания активности DNS. Журналы сообщают вам, если кто-то пытается вмешаться в ваши DNS-серверы. Помимо активности пользователей, журналы отладки сообщают вам о проблемах с DNS-запросами или обновлениями. Журналы DNS также показывают следы отравления кэша. При таком виде атаки злоумышленник изменяет хранящиеся в кэше данные и сбивают пользователей с курса. Например, IP-адрес www.youtube.com может быть заменен на IP-адрес вредоносного сайта. Когда пользователь отправляет запрос в DNS для youtube.com, сервер теперь возвращает неверный IP-адрес. В результате чего пользователи попадают на тот веб-сайт, который они не хотели посещать и становятся мишенью для хакеров. Несмотря на то, что ведение журнала отладки DNS повышает уровень безопасности, некоторые системные администраторы решают этим пренебречь. Основная причина такого решения – повышение производительности. Отслеживание сетевой активности может помочь вам обнаружить некоторые атаки, такие как DDoS, но не отравление кэша. Поэтому мы настоятельно рекомендуем использовать ведение журналов отладки DNS. Блокировка кэша DNS Всякий раз, когда появляется запрос от клиента, DNS находит информацию и сохраняет ее в кэше для будущего использования. Этот процесс позволяет серверу быстрее отвечать на одни и те же запросы. Злоумышленники могут воспользоваться этой функцией путем изменения сохраненной информации. Следующий шаг после использования журналов отладки DNS – это блокировка кэша DNS. Это функция определяет, когда кэшированные данные могут быть изменены. Сервер хранит информацию о поиске в течение времени, определяемого TTL (Time To Life - время жизни). Если блокировка кэша не используется, то информация может быть перезаписана до истечения TTL. Это оставляет место для атак с отравлением кэша. В некоторых операционных системах блокировка кэша может быть включена по умолчанию. Масштаб блокировки кэша может достигать 100%. Когда установлено значение 70, то перезапись данных невозможна до истечения 70% TTL. При определении блокировки кэша равным 100 изменение кэшированной информации блокируется до истечения всего TTL. Фильтрация DNS-запросов для блокировки вредоносных доменов Фильтрация DNS – это эффективный способ ограничить доступ пользователей к веб-сайту или домену. Основная причина для блокировки разрешения имен для домена – наличие информации о вредоносности этого домена. Когда клиент отправляет запрос на заблокированный веб-сайт, DNS-сервер прекращает любую связь между ними. DNS-фильтрация значительно снижает вероятность проникновения вирусов и вредоносных программ в вашу сеть. Когда пользователь не может получить доступ к вредоносной странице, то и количество угроз, которые могут проникнуть в вашу инфраструктуру, крайне мало. Таким образом, вашему IT-персоналу не требуется круглосуточно работать, чтобы очищать систему от вирусов. Помимо соображений безопасности, есть еще одна причина, по которой организации могут заблокировать домен – бизнес-политика или по соображениям производительности. В список заблокированных доменов могут входить социальные сети, азартные игры, порнография, страницы потокового видео или любые другие веб-сайты. DNS может фильтровать запросы по пользователю, группе или блокировать доступ для всех пользователей. Современные системы обеспечения защиты ПО и брандмауэры имеют DNS-фильтрацию в стандартной комплектации. Некоторые из них предоставляют списки плохих доменов, которые регулярно обновляются. Вы можете использовать готовое программное решение и таким образом автоматизировать фильтрацию DNS, а не добавлять новые записи вручную. Проверка целостности данных DNS с помощью DNSSEC Модули безопасности службы доменных имен (DNSSEC – Domain Name System Security Extensions) гарантируют, что пользователи получат действительные ответы на свои запросы. Целостность данных достигается за счет цифровой подписи DNSSEC на данных DNS, предоставляемых серверам имен. Когда конечный пользователь отправляет запрос, DNS-сервер предоставляет цифровую подпись с ответом. Стало быть, пользователи знают, что они получили достоверную информацию в качестве ответа на отправленный ими запрос. Этот дополнительный уровень безопасности помогает бороться с атаками на протокол DNS. Атаки «спуфинга» DNS и отравления кэша успешно предотвращаются, поскольку DNSSEC обеспечивает целостность данных и авторизацию их источника. В дальнейшем пользователи будут уверены, что посещают именно те страницы, которые хотели посетить. Настройка списков контроля доступа Списки контроля доступа (ACL – Access Control Lists) – это еще один способ защиты DNS-серверов от несанкционированного доступа и атак «спуфинга». К вашему основному DNS-серверу доступ должны иметь только системные и IT-администраторы. Настройка ACL для разрешения входящих подключений к серверу имен с определенных хостов гарантирует то, что только определенная часть персонала сможет обращаться к вашим серверам. Кроме того, ACL должны определять, какие серверы могут выполнять передачу зон. Злоумышленники могут попытаться определить настройки вашей зоны, отправив запросы на передачу зоны через вторичные DNS-серверы. Если вы заблокируете все запросы на передачу зоны через вторичные серверы, то злоумышленник не сможет получить информацию о зоне. Эта конфигурация не позволяет третьим лицам получить представление о том, как организована ваша внутренняя сеть. Заключение Всегда есть возможности для улучшения системной архитектуры DNS и ее безопасности. Постоянные угрозы скрываются и ждут, когда появится уязвимость в вашей информационной системе, чтобы воспользоваться ей. Но тем не менее, если вы будете следовать рекомендациям, описанным в данном руководстве, то вы охватите наиболее важные аспекты, которые необходимы для обеспечения безопасности и отказоустойчивости вашей инфраструктуры DNS.
img
Что это вообще такое? Docker Compose является инструментом для определения и запуска контейнерных приложений. С Compose вы получаете возможность настраивать службы используя файл YAML. С помощью одной команды Compose вы создаете и запускаете все службы в соответствии с вашей конфигурацией. Установка начинается с создания каталога проекта: $ mkdir composetest $ cd composetest Создайте файл под названием app.py и вставьте в него следующие данные: import time import redis from flask import Flask app = Flask(__name__) cache = redis.Redis(host='redis', port=6379) def get_hit_count(): retries = 5 while True: try: return cache.incr('hits') except redis.exceptions.ConnectionError as exc: if retries == 0: raise exc retries -= 1 time.sleep(0.5) @app.route('/') def hello(): count = get_hit_count() return 'Hello World! I have been seen {} times. '.format(count) В нашем случае название хоста - redis, который использует порт 6379. Создайте файл под названием needs.txt в каталоге вашего проекта и вставьте его в: flask Redis Теперь следует написать код для файла Dockerfile, содержащий все необходимые переменные для среды разработки. В каталоге вашего проекта создайте файл с именем Dockerfile (файл будет определять среду приложения) и вставьте следующее содержимое: FROM python:3.7-alpine WORKDIR /code ENV FLASK_APP app.py ENV FLASK_RUN_HOST 0.0.0.0 RUN apk add --no-cache gcc musl-dev linux-headers COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["flask", "run"] Определение сервисов осуществляется при создании файла с именем docker-compose.yml в каталоге вашего проекта со следующей информацией: version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" На основании содержания файла происходит запуск двух сервисов: Web и Redis, а в дальнейшем вы можете вносить в этот файл различные БД и иную важную информацию. C помощью команды Compose создайте ваше приложение, после чего из каталога проекта запустите приложение, запустив docker-compose. Вот так: $ docker-compose up Creating network "composetest_default" with the default driver Creating composetest_web_1 ... Creating composetest_redis_1 ... Creating composetest_web_1 Creating composetest_redis_1 ... done Attaching to composetest_web_1, composetest_redis_1 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) redis_1 | 1:C 17 Aug 22:11:10.480 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo redis_1 | 1:C 17 Aug 22:11:10.480 # Redis version=4.0.1, bits=64, commit=00000000, modified=0, pid=1, just started redis_1 | 1:C 17 Aug 22:11:10.480 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf web_1 | * Restarting with stat redis_1 | 1:M 17 Aug 22:11:10.483 * Running mode=standalone, port=6379. redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. web_1 | * Debugger is active! redis_1 | 1:M 17 Aug 22:11:10.483 # Server initialized redis_1 | 1:M 17 Aug 22:11:10.483 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled. web_1 | * Debugger PIN: 330-787-903 redis_1 | 1:M 17 Aug 22:11:10.483 * Ready to accept connections Compose извлекает образ Redis, создавая образ для вашего приложения и запускает выбранные службы. В этом случае код копируется в образ во время сборки. Как вам такое? Теперь попробуйте ввести http://localhost:5000/ в браузере, чтобы чекнуть запущенное приложение. Если вы используете Docker для Linux, Docker Desktop для Mac или Docker Desktop для Windows, то теперь веб-приложение должно "смотреть" на порт 5000 на хосте Docker. Введите в своем веб-браузере адрес http://localhost:5000, чтобы увидеть сообщение Hello World. Если не сработает, вы также можете попробовать зайти на http://127.0.0.1:5000. Если вы используете Docker Machine на Mac или Windows, используйте ip MACHINE_VM docker-machine для получения IP-адреса вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере. Вы должны увидеть сообщение в своем браузере: Hello World! I have been seen 1 times. Переключитесь на другое окно терминала и введите docker image ls, чтобы вывести список локальных образов/контейнеров. Вывод на этом этапе должен показывать redis и web. $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE composetest_web latest e2c21aa48cc1 4 minutes ago 93.8MB python 3.4-alpine 84e6077c7ab6 7 days ago 82.5MB redis alpine 9d8fa9aa0e5b 3 weeks ago 27.5MB Важно: Вы можете просматривать запущенные контейнеры с помощью Docker Inspect Tag или ID Запустите docker-compose из каталога вашего проекта во втором терминале, либо нажмите CTRL + C в исходном терминале, где приложение уже запущено и отредактируйте файл Compose. Отредактируйте docker-compose.yml в каталоге вашего проекта для внесения той или иной правки в веб-службе version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code environment: FLASK_ENV: development redis: image: "redis:alpine" Новый ключ редактирует каталог проекта на хосте внутри контейнера, что позволяет изменять код без необходимости перестраивать весь образ. Ключ среды устанавливает переменную FLASK_ENV, которая сообщает о запуске в режиме разработки и перезагрузке кода при изменении. Важно: этот режим должен использоваться только при разработке. В каталоге проекта введите docker-compose up, чтобы создать приложение с обновленным файлом Compose, и запустите его. $ docker-compose up Creating network "composetest_default" with the default driver Creating composetest_web_1 ... Creating composetest_redis_1 ... Creating composetest_web_1 Creating composetest_redis_1 ... done Attaching to composetest_web_1, composetest_redis_1 web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) … Поскольку код приложения теперь добавляется в контейнер с помощью тома, вы можете вносить изменения в его код и мгновенно просматривать изменения без необходимости перестраивать образ. Измените сообщение в app.py и сохраните его: Hello from Docker!: return 'Hello from Docker! I have been seen {} times. '.format(count) Обновите результат в вашем браузере (нажмите F5 или Ctrl + F5) . Приветствие должно быть обновлено, а счетчик должен увеличиваться. Вы можете поэкспериментировать с другими командами. Если вы хотите запускать свои службы в фоновом режиме, вы можете сделать следующее: docker-compose up and use docker-compose ps to see what is currently running: $ docker-compose up -d Starting composetest_redis_1... Starting composetest_web_1... $ docker-compose ps Name Command State Ports ------------------------------------------------------------------- composetest_redis_1 /usr/local/bin/run Up composetest_web_1 /bin/sh -c python app.py Up 5000->5000/tcp Команда docker-compose run позволяет вам применять одноразовые команды к вашим сервисов. Например, чтобы увидеть, какие переменные среды доступны для веб-службы: $ docker-compose run web env Выполните команду docker-compose –help, чтобы увидеть весь список доступных команд. Если вы запустили Compose с помощью docker-compose up -d, то нужно будет остановить ваши службы после работы с ними, для этого поможет команда ниже:$ docker-compose stop Если хотите полностью уничтожить контейнер, используйте команду down.
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59