Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

<p>Название</p><p>Dolor Set Amet</p><p>LOREM IPSUM</p><p>Глава 1</p><p>Docker</p><p>Docker — программное</p><p>о б е с п е ч е н и е д л я</p><p>а в т о м а т и з а ц и и</p><p>р а з в ё р т ы в а н и я и</p><p>управления приложениями</p><p>в средах с поддержкой</p><p>контейнеризации.</p><p>Контейнеры коренным образом</p><p>изменяют способ разработки,</p><p>распространения и функционирования</p><p>программного обеспечения.</p><p>Разработчики могут создавать</p><p>программное обеспечение на локальной</p><p>системе, точно зная, что оно будет</p><p>работать одинаково в любой</p><p>операционной среде – в программном</p><p>комплексе ИТ-отдела, на ноутбуке</p><p>пользователя или в облачном кластере.</p><p>Раздел 1</p><p>СОДЕРЖАНИЕ</p><p>1. Описание</p><p>2. Установка</p><p>3. Использование</p><p>4. Распространение</p><p>5. Развертывание</p><p>Контейнеры</p><p>2</p><p>Инженеры по эксплуатации могут сосредоточиться на поддержке</p><p>работы в сети, на предоставлении ресурсов и на обеспечении</p><p>бесперебойной работы и тратить меньше времени на</p><p>конфигурирование окружения и на «борьбу» с системными</p><p>зависимостями.</p><p>Масштабы перехода к практическому применению контейнеров</p><p>стремительно растут во всей промышленности информационных</p><p>технологий, от небольших стартапов до крупных предприятий.</p><p>Разработчики и инженеры по эксплуатации должны понимать, что</p><p>необходимость постоянного использования контейнеров будет</p><p>возрастать в течение нескольких следующих лет.</p><p>Контейнеры (containers) представляют собой средства инкапсуляции</p><p>приложения вместе с его зависимостями.</p><p>3</p><p>На первый взгляд контейнеры могут показаться всего лишь</p><p>упрощенной формой виртуальных машин (virtual machines – VM) – как</p><p>и виртуальная машина, контейнер содержит изолированный</p><p>экземпляр операционной системы (ОС), который можно</p><p>использовать для запуска приложений.</p><p>Но контейнеры обладают некоторыми преимуществами,</p><p>обеспечивающими такие варианты использования, которые трудно</p><p>или невозможно реализовать в обычных виртуальных машинах:</p><p>• контейнеры совместно используют ресурсы основной ОС, что</p><p>делает их на порядок более эффективными. Контейнеры можно</p><p>запускать и останавливать за доли секунды. Для приложений,</p><p>запускаемых в контейнерах, накладные расходы минимальны или</p><p>вообще отсутствуют, по сравнению с приложениями, запускаемыми</p><p>непосредственно под управлением основной ОС; 4</p><p>•переносимость контейнеров обеспечивает потенциальную</p><p>возможность устранения целого класса программных ошибок,</p><p>вызываемых незначительными изменениями рабочей среды, –</p><p>лишается обоснования древний довод разработчика: «но это</p><p>работает на моем компьютере»;</p><p>•упрощенная сущность контейнера означает, что разработчики</p><p>могут одновременно запускать десятки контейнеров, что дает</p><p>возможность имитации работы промышленной распределенной</p><p>системы. Инженеры по эксплуатации могут запустить на одном</p><p>хосте намного больше контейнеров, чем при использовании</p><p>отдельных виртуальных машин;</p><p>•кроме того, контейнеры предоставляют преимущества конечным</p><p>пользователям и разработчикам без необходимости развертывания</p><p>приложения в облаке.</p><p>5</p><p>Пользователи могут загружать и запускать сложные приложения</p><p>без многочасовой возни с конфигурированием и проблемами при</p><p>установке и при этом не беспокоиться о каких-либо изменениях в</p><p>их локальных системах. В свою очередь, разработчики подобных</p><p>приложений могут избежать проблем, связанных с различиями в</p><p>конфигурациях пользовательских сред и с доступностью</p><p>зависимостей для этих приложений.</p><p>И что более важно, существуют принципиальные различия в целях</p><p>использования виртуальных машин и контейнеров – целью</p><p>применения виртуальной машины является полная эмуляция</p><p>инородной программной (операционной) среды, тогда как цель</p><p>применения контейнера – сделать приложения переносимыми и</p><p>самодостаточными.</p><p>6</p><p>Сравнение контейнеров с виртуальными машинами</p><p>Несмотря на то что контейнеры и виртуальные</p><p>машины на первый взгляд кажутся похожими, между</p><p>ними существуют важные различия, которые проще</p><p>всего продемонстрировать на графических схемах.</p><p>На рисунке показаны три приложения, работающих в</p><p>отдельных виртуальных машинах на одном хосте.</p><p>Здесь требуется гипервизор для создания и запуска</p><p>виртуальных машин, управляющий доступом к</p><p>нижележащей ОС и к аппаратуре, а также при</p><p>необходимости интерпретирующий системные вызовы.</p><p>Для каждой виртуальной машины необходимы полная копия ОС,</p><p>запускаемое приложение и все библиотеки поддержки.</p><p>7</p><p>В противоположность описанной схеме на рисунке</p><p>показано, как те же самые три приложения могут</p><p>работать в системе с контейнерами. В отличие от</p><p>виртуальных машин, ядро хоста совместно</p><p>используется (разделяется) работающими</p><p>контейнерами. Это означает, что контейнеры всегда</p><p>ограничиваются использованием того же ядра,</p><p>которое функционирует на хосте. Приложения Y и Z</p><p>пользуются одними и теми же библиотеками и могут</p><p>совместно работать с этими данными, не создавая избыточных копий.</p><p>Внутренний механизм контейнера отвечает за пуск и остановку</p><p>контейнеров так же, как гипервизор в виртуальной машине. Тем не</p><p>менее процессы внутри контейнеров равнозначны собственным</p><p>процессам ОС хоста и не влекут за собой дополнительных накладных</p><p>расходов, связанных с выполнением гипервизора. 8</p><p>Как виртуальные машины, так и контейнеры можно использовать</p><p>для изоляции приложений друг от друга при работе на одном хосте.</p><p>Дополнительная степень изоляции в виртуальных машинах</p><p>обеспечивается гипервизором, и виртуальные машины являются</p><p>многократно проверенной в реальных условиях технологией.</p><p>Docker и контейнеры</p><p>Контейнеры являются старой теоретической концепцией. Еще</p><p>несколько десятков лет назад в Unix-системах существовала</p><p>команда chroot, обеспечивающая простейшую форму изоляции</p><p>части файловой системы.</p><p>С 1998 года в ОС FreeBSD появилась утилита jail,</p><p>распространяющая изоляционные возможности chroot на</p><p>процессы.</p><p>9</p><p>В 2001 году реализация Solaris Zones обеспечивала относительно</p><p>полную технологию контейнеризации, но ее применение было</p><p>ограничено только ОС Solaris.</p><p>В том же 2001 году компания Parrallels Inc (в дальнейшем SWsoft)</p><p>выпустила коммерческую версию технологии контейнеров Virtuozzo</p><p>для ОС Linux, а в 2005 году открыла исходные коды ядра этой</p><p>технологии под именем OpenVZ.</p><p>Затем компания Google начала разработку CGroups для ядра ОС</p><p>Linux и приступила к перемещению своей инфраструктуры в</p><p>контейнеры. Проект Linux Containers (LXC) был создан в 2008 году</p><p>и вскоре объединил CGroups, пространства имен ядра, технологию</p><p>chroot и некоторые другие технологии, чтобы предоставить</p><p>полностью завершенное решение по обеспечению контейнеризации.</p><p>10</p><p>Наконец, в 2013 году Docker стал последним штрихом в общей</p><p>картине состояния контейнеризации, и эта технология по праву</p><p>заняла свое место как одно из главных направлений развития ИТ-</p><p>индустрии.</p><p>В основу Docker была заложена существующая технология Linux-</p><p>контейнеров с разнообразными обертками и расширениями – в</p><p>основном использующими переносимые образы и удобный для</p><p>пользователя интерфейс – для создания полностью готового к</p><p>применению решения,</p><p>обеспечивающего создание и</p><p>распространение</p><p>контейнеров.</p><p>11</p><p>Платформа Docker состоит из двух отдельных компонентов:</p><p>Механизм Docker Engine</p><p>предоставляет эффективный и удобный интерфейс для запуска</p><p>контейнеров. До этого для запуска контейнеров, использующих</p><p>такую технологию, как, например, LXC,</p><p>требовались изрядный запас специальных</p><p>знаний в этой области и большой объем</p><p>ручной работы.</p><p>12</p><p>Docker Engine</p><p>механизма, отвечающего за</p><p>создание и функционирование</p><p>контейнеров</p><p>Docker Hub</p><p>облачного сервиса для</p><p>распространения контейнеров.</p><p>Docker Hub предоставляет огромное</p><p>количество образов контейнеров с открытым</p><p>доступом для загрузки, позволяя</p><p>пользователям быстро начать работу с ними</p><p>и избежать рутинной работы, ранее уже проделанной другими</p><p>людьми.</p><p>Несколько позже были разработаны инструментальные средства</p><p>для Docker:</p><p>•Swarm – менеджер кластеров,</p><p>•Kitematic – графический пользовательский интерфейс для работы</p><p>с контейнерами и</p><p>•Machine – утилита командной строки для поддержки работы</p><p>Docker-хостов. 13</p><p>Ввиду открытости исходных кодов Docker Engine стали</p><p>возможными создание большого сообщества приверженцев</p><p>технологии Docker и его постоянный рост, а также вытекающие из</p><p>этого преимущества массовой помощи в исправлении ошибок и</p><p>внесении усовершенствований.</p><p>Новшества, внесенные с применением технологии Docker,</p><p>существенно изменили способ разработки программного</p><p>обеспечения. Без Docker контейнеры, вероятнее всего, еще долго</p><p>оставались бы малозаметным направлением в развитии</p><p>информационных технологий.</p><p>14</p><p>Установка Docker в ОС Linux</p><p>Наилучшим способом установки Docker в ОС Linux является</p><p>использование установочного скрипта, предоставляемого</p><p>компанией Docker.</p><p>Несмотря на то что большинство основных дистрибутивов Linux</p><p>формируют собственные пакеты, зачастую они отстают от</p><p>выпусков новых версий Docker, что становится существенной</p><p>проблемой, учитывая темп развития Docker.</p><p>Для автоматической установки Docker нужна возможность</p><p>использования скрипта, предоставленного на сайте https://</p><p>get.docker.com.</p><p>15</p><p>https://get.docker.com</p><p>https://get.docker.com</p><p>https://get.docker.com</p><p>https://get.docker.com</p><p>Добавим репозиторий:</p><p>yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</p><p>yum install docker-ce</p><p>Перед началом работы Docker рекомендуется перевести SELinux в</p><p>разрешающий режим (permissive mode), в котором ошибки</p><p>регистрируются в системном журнале, но никакие ограничения не</p><p>применяются.</p><p>systemctl start docker</p><p>systemctl enable docker</p><p>Поскольку по умолчанию для запуска бинарного файла Docker</p><p>требуются привилегии суперпользователя, необходимо вводить все</p><p>команды с префиксом sudo.</p><p>16</p><p>Это быстро надоедает. Ситуацию можно исправить, добавив</p><p>нужного пользователя в группу</p><p>docker. В Linux это делается так:</p><p>$ sudo usermod -aG docker username</p><p>Чтобы убедиться в</p><p>правильности установки и</p><p>работоспособности</p><p>программной среды</p><p>Docker, следует выполнить</p><p>команду docker version.</p><p>Эта команда должна</p><p>выдать информацию, как</p><p>на скриншоте</p><p>17</p><p>Запуск первого образа</p><p>Для проверки правильности установки программной системы</p><p>Docker выполните следующую команду:</p><p>$ docker run debian echo "Hello World"</p><p>Выполнение может занять некоторое время, в зависимости от</p><p>скорости вашего интернет-соединения, но в итоге вы должны</p><p>увидеть результат, похожий на приведенный ниже:</p><p>Мы выполнили команду docker run, инициализирующую запуск</p><p>контейнеров. 18</p><p>Аргумент debian – это имя образа, который мы намерены</p><p>использовать, в данном случае – упрощенная версия дистрибутива</p><p>Debian Linux. Первая строка вывода сообщает об отсутствии</p><p>локальной копии образа Debian.</p><p>Затем Docker в онлайн-режиме проверяет Docker Hub и загружает</p><p>самую новую версию образа Debian.</p><p>После загрузки и проверки образа Docker помещает его в</p><p>работающий контейнер и выполняет заданную команду echo "Hello</p><p>World" внутри контейнера.</p><p>19</p><p>Если выполнить эту же команду еще раз, то контейнер запустится</p><p>немедленно, без предварительной загрузки образа.</p><p>Выполнение команды должно занять около секунды, и это</p><p>удивительно, если учесть объем необходимой работы:</p><p>Docker подготовил и запустил контейнер, выполнил команду echo,</p><p>затем остановил контейнер.</p><p>Если попытаться сделать нечто подобное в обычной виртуальной</p><p>машине, то придется ждать несколько секунд, а может быть, даже</p><p>несколько минут.</p><p>20</p><p>С помощью Docker можно запустить командную оболочку shell</p><p>внутри контейнера, выполнив следующую команду:</p><p>$ docker run -i -t debian /bin/bash</p><p>root@622ac5689680:/# echo "Hello from Container-land!"</p><p>Hello from Container-land!</p><p>root@622ac5689680:/# exit</p><p>exit</p><p>Здесь мы получаем новый промпт командной строки внутри</p><p>контейнера, что очень похоже на вход с помощью сервиса ssh в</p><p>командную оболочку на удаленном компьютере.</p><p>Флаги -i и -t сообщают Docker, что необходимо создать сеанс</p><p>интерактивной работы на подключаемом терминальном устройстве</p><p>tty.</p><p>21</p><p>Команда /bin/bash инициализирует командную оболочку bash.</p><p>При выходе из командной оболочки контейнер прекратит работу –</p><p>контейнеры работают, пока существует их основной процесс.</p><p>Основные команды</p><p>Теперь займемся более подробным исследованием Docker, запуская</p><p>контейнер и наблюдая в нем результаты выполнения различных</p><p>команд и действий. Сначала инициализируем новый контейнер, но в</p><p>этот раз зададим для него имя хоста с помощью флага -h:</p><p>$ docker run -h CONTAINER -i -t debian /bin/bash</p><p>22</p><p>После выполнения команды docker ps -a выводится список всех</p><p>контейнеров, включая остановленные (stopped) (формально их</p><p>называют «контейнерами, из которых был совершен выход» (exited</p><p>containers)).</p><p>Чтобы окончательно избавиться от контейнера, следует</p><p>воспользоваться командой docker rm</p><p>Если необходимо удалить все остановленные контейнеры, можно</p><p>использовать результат выполнения команды docker ps -aq -f</p><p>status=exited, которая выводит идентификаторы всех</p><p>остановленных контейнеров. Например:</p><p>$ docker rm -v $(docker ps -aq -f status=exited)</p><p>23</p><p>Поскольку эта операция повторяется достаточно часто, можно</p><p>поместить ее в скрипт командной оболочки или присвоить ее</p><p>псевдоним (alias). Обратите внимание на то, что аргумент -v</p><p>позволяет удалить все тома (разделы), управляемые Docker, на</p><p>которые не ссылаются какие-либо другие контейнеры.</p><p>Избежать перезапуска ранее остановленных контейнеров можно,</p><p>включив в команду docker run флаг --rm, который позволяет</p><p>удалить остановленный контейнер и созданную на время его</p><p>существования соответствующую файловую систему.</p><p>24</p><p>Теперь попробуем разобраться, как создать новый, действительно</p><p>полезный контейнер, заслуживающий сохранения для дальнейшего</p><p>использования.</p><p>Мы создадим приложение cowsay, работающее внутри Docker.</p><p>Начнем с запуска контейнера и установки нескольких пакетов:</p><p>$ docker run -it --name cowsay --hostname cowsay debian bash</p><p>root@cowsay:/# apt-get update</p><p>Reading package lists... Done</p><p>(Чтение списков пакетов... Выполнено)</p><p>Далее установим необходимые пакеты</p><p>root@cowsay:/# apt-get install -y cowsay fortune</p><p>25</p><p>Приступаем к работе:</p><p>root@cowsay:/# /usr/games/fortune | /usr/games/cowsay</p><p>Превосходно.</p><p>Сохраним этот контейнер.</p><p>Для превращения контейнера в образ нужно всего лишь выполнить</p><p>команду docker</p><p>commit.</p><p>При этом не имеет</p><p>значения, работает</p><p>контейнер или он</p><p>остановлен.</p><p>26</p><p>Необходимо передать в команду имя контейнера («cowsay»), имя</p><p>для создаваемого образа («cowsayimage»), а также имя</p><p>репозитория, в котором образ будет сохранен («test»):</p><p>root@cowsay:/# exit</p><p>exit</p><p>$ docker commit cowsay test/cowsayimage</p><p>Возвращаемое командой значение представляет собой уникальный</p><p>идентификатор созданного образа.</p><p>27</p><p>Теперь у нас есть образ с предустановленным приложением cowsay,</p><p>который мы можем запускать в любое время:</p><p>$ docker run test/cowsayimage /usr/games/cowsay "Moo"</p><p>Великолепно. Но</p><p>имеются и некоторые</p><p>затруднения. Если</p><p>нужно что-то изменить,</p><p>то нам придется вручную повторить все ранее проделанные</p><p>операции. Например, если потребуется использовать другой</p><p>основной образ ОС, то мы будем вынуждены снова выполнить</p><p>процедуру с самого начала. И, что более важно, такая процедура не</p><p>является легко воспроизводимой – повторение набора действий для</p><p>создания образа связано с трудностями и является потенциальным</p><p>источником ошибок. 28</p><p>Решение этой проблемы заключается в использовании</p><p>специального файла Dockerfile для создания образа и</p><p>автоматизированного повторного воспроизведения этой</p><p>процедуры.</p><p>29</p><p>30</p><p>31</p><p>32</p><p>33</p><p>34</p>

Mais conteúdos dessa disciplina