Приложение контейнер. «Пакуем окна»: изучаем технологию контейнеров от Microsoft

Как упаковать приложение в контейнер Docker?

У меня есть приложение, написанное на NodeJS. Как я могу упаковать его в образ Docker, чтобы запускать как контейнер?

Docker - система управления контейнерами в POSIX-совместимых операционных системах (на данный момент поддерживается Linux). Особенностью Docker является возможность упаковать приложение со всем необходимым окружением таким образом, чтобы запускать его на другой системе без долгих и сложных процедур установки зависимостей или сборки из исходников. Запакованное приложение, готовое к развёртыванию, называется "образом". Образы Docker основываются на "шаблонах" - предварительно настроенных рабочих окружениях. Можно рассматривать это как дистрибутивы операционной системы, хотя это и не совсем так. Кроме того, изучив документацию на Docker, вы сможете создать собственный шаблон. Преимуществом такого подхода является то, что образ вашего приложения будет содержать только само приложение, а необходимое для него окружение будет скачиваться автоматически из репозитория шаблонов. Docker слегка напоминает chroot или bsd jail, но работает иначе.

Важно различать для себя понятия "контейнер" и "образ". Контейнер - это выполняющаяся копия вашего приложения, а образ - это файл, в котором хранится приложение, и из которого и создаётся контейнер.

Предположим, что у вас есть приложение на NodeJS, которое вы хотите упаковать в контейнер. Предположим, что файл, который запускает ваше приложение называется server.js, а для работы приложение слушает порт 8000. В качестве шаблона мы будем использовать "node:carbon". Для контейнеризации приложения вам нужно создать в каталоге, где расположены файлы вашего приложения, файл "Dockerfile", в котором будут описаны параметры подготовки образа:

$ touch Dockerfile

Содержимое файла может быть примерно таким:

# Указываем используемый шаблон FROM node:carbon # Создаём рабочий каталог приложения внутри контейнера WORKDIR /usr/src/app # Устанавливаем зависимости приложения с помощью npm # Копируются оба файла package.json И package-lock.json, если они присутствуют COPY package*.json ./ RUN npm install # Копируем в образ файлы вашего приложения COPY . . # Открываем порт 8000 чтобы он был доступен снаружи контейнера EXPOSE 8000 # Выполняем команду для запуска приложения внутри контейнера CMD [ "npm", "start" ]

Чтобы исключить ненужные файлы из образа, вы можете перечислить их имена в файле ".dockerignore". Допускается использование маски (*.log).

Сборка образа осуществляется следующей командой:

$ docker build -t username/node-web-app .

$ docker images # Example REPOSITORY TAG ID CREATED node carbon 1934b0b038d1 5 days ago username/node-web-app latest d64d3505b0d2 1 minute ago

Запуск контейнера из образа производится следующей командой:

$ docker run -p 49160:8000 -d username/node-web-app

В этом примере создаётся контейнер из образа "username/node-web-app" и сразу запускается. Порт приложения 8000 доступен на локальной машине (localhost) и для того, чтобы он был доступен "снаружи", он "пробрасывается" на порт 49160. Можно выбрать любой свободный порт, кроме того возможно пробросить порт приложения "как есть", указав опцию "-p 8000:8000".

Вы можете увидеть что ваш контейнер выполняется, введя команду:

$ docker ps # Example ID IMAGE COMMAND ... PORTS ecce33b30ebf username/node-web-app:latest npm start ... 49160->8000

Управление контейнером можно осуществлять различными командами, указывая ID этого контейнера:

$ docker pause ecce33b30ebf - приостановить работу контейнера с ID ecce33b30ebf
$ docker resume ecce33b30ebf - возобновить работу контейнера с ID ecce33b30ebf
$ docker stop ecce33b30ebf - остановить контейнер c ID ecce33b30ebf
$ docker rm ecce33b30ebf - удалить контейнер (при этом удаляются все данные, созданные приложением внутри контейнера)

Изучаем технологию контейнеров
Windows Server 2016

Одной из примечательных новинок, появившихся в Windows Server 2016, является поддержка контейнеров. Познакомимся с ней поближе

Современные системы давно уже отошли от принципа одна ОС – один сервер. Технологии виртуализации позволяют более рационально использовать ресурсы сервера, позволяя запускать несколько ОС, разделяя их между собой и упрощая администрирование. Затем появились микросервисы позволяющие развертывать изолированные приложения как отдельный легко управляемый и масштабируемый компонент. Docker изменил все. Процесс доставки приложения вместе сокружением стал на столько простым, что он не мог не заинтересовать конечного потребителя. Приложение внутри контейнера работает так как будто использует полноценную ОС. Но в отличие от виртуальных машин они не загружают собственные копии ОС, библиотеки, системные файлы и т.д. Контейнеры получают изолированное пространство имен в котором приложению доступны все необходимые ресурсы, но выйти за которые нельзя. Если нужно изменить установки, то сохраняются только различия с основной ОС. Поэтому контейнер в отличие от виртуальных машин очень быстро запускается и меньше нагружают систему. Контейнеры более эффективно используют ресурсы сервера.

Контейнеры в Windows

В Windows Server 2016 в дополнение к существующим технологиям виртуализации – Hyper-V и виртуальные приложения Server App-V, добавилась поддержка контейнеров Windows Server Containers реализованная через слой абстракции Contаiner Management stack реализующий все нужные функции. Анонсирована технология еще в Technical Preview 4, но с тех пор много что изменилось в сторону упрощения и инструкции написанные раньше можно даже не читать. Приэтом было предложено два вида «своих» контейнеров – контейнеры Windows и контейнеры Hyper-V. И наверное еще одной главной возможностью, является использование для управления контейнеров помимо командлетов PowerShell еще иинструментов Docker.

Контейнеры Windows напоминают по принципу FreeBSD Jail или Linux OpenVZ, используют с ОС одно ядро, которое вместе с остальными ресурсами (ОЗУ, сеть) разделяют между собой. Файлы ОС и службы проецируются в пространство имен каждого контейнера. Такой тип контейнера эффективно использует ресурсы, уменьшая накладные расходы, а значит позволяет более плотно размещать приложения. Так как базовые образы контейнера «имеют» одно ядро c узлом, ихверсии должны совпадать, иначе работа не гарантируется.

В контейнерах Hyper-V используется дополнительный уровень изоляции и каждому контейнеру выделяется свое ядро и память. Изоляцию в отличие от предыдущего типа осуществляет не ядро ОС, а гипервизор Hyper-V (требуется роль Hyper-V). В результате достигается меньшие накладные расходы по сравнению с виртуальными машинами, но больший уровень изоляции по сравнению с контейнерами Windows. В этом случае для запуска контейнера иметь такое же ядро вОС. Также эти контейнеры можно разворачивать и в Windows 10 Pro/Корпоративная . Особо стоит отметить, что тип контейнер выбирается не во время создания, а во время развертывания. То есть любой контейнер может быть запущен икак Windows и как Hyper-V варианте.

В качестве ОС в контейнере используются обрезанные Server Core или Nano Server. Первый, появился еще в Windows Sever 2008 и обеспечивает большую совместимость с имеющимися приложениями. Второй еще более урезан посравнениею с Server Core и предназначен для работы без монитора, позволяя запускать сервер в минимально возможной конфигурации для использования с Hyper-V, файловым сервером (SOFS) и «облачными» службами, требуя на 93% меньше места. Содержит только самые необходимые компоненты (.Net с CoreCLR, Hyper-V, Clustering и т.д.).

Для хранения используется формат образа жесткого диска VHDX. Контейнеры как и в случае с Docker сохраняются в образы в репозитории. При чем каждый сохраняется не полный набор данных, а только отличия создаваемого образа отбазового. А в момент запуска все нужные данные проецируются в память. Для управления сетевым трафиком между контейнером и физической сетью используется Virtual Switch.

В марте 2013 года Соломан Хайкс объявил о старте открытого проекта, впоследствии ставшего известным как Docker. В последующие месяцы его активно поддержало сообщество Linux, а осенью 2014 года Microsoft объявила о планах реализации контейнеров в Windows Server 2016. Компания WinDocks, соучредителем которой я являюсь, выпустила независимую версию открытого кода Docker для Windows в начале 2016 года с акцентом на первоклассную поддержку контейнера в SQL Server. Контейнеры быстро становятся центром внимания в отрасли. В этой статье мы рассмотрим контейнеры и их использование разработчиками и администраторами баз данных SQL Server

Принципы организации контейнеров

Контейнеры определяют новый метод упаковывания приложений, в сочетании с изоляцией пользователей и процессов, для мультиабонентских приложений. Различные реализации контейнеров для Linux и Windows существуют уже много лет, но с выходом Windows Server 2016 мы получили фактический стандарт Docker. Сегодня API-интерфейс и формат контейнера Docker поддерживаются в общедоступных службах AWS, Azure, Google Cloud, всех дистрибутивах Linux и Windows. У элегантной структуры Docker есть важные преимущества.

  • Переносимость. Контейнеры содержат программные зависимости приложений и выполняются неизменными на ноутбуке разработчика, общем тестовом сервере и в любой общедоступной службе.
  • Экосистема контейнеров. API-интерфейс Docker является средоточием отраслевых новинок с решениями для мониторинга, ведения журнала, хранения данных, оркестровки кластеров и управления.
  • Совместимость с общедоступными службами. Контейнеры спроектированы для архитектуры микрослужб, горизонтального масштабирования и временных рабочих нагрузок. Контейнеры проектируются таким образом, чтобы их можно было при желании удалить и заменить, а не исправлять или обновлять.
  • Скорость и экономия. Для создания контейнеров требуется несколько секунд; обеспечена эффективная поддержка мультиабонентности. У большинства пользователей количество виртуальных машин сокращается в три-пять раз (рисунок 1).

Контейнеры SQL Server

SQL Server поддерживает мультиабонентность с применением именованных экземпляров в течение десяти лет, так в чем же ценность контейнеров SQL Server?

Дело в том, что контейнеры SQL Server более практичны благодаря их быстродействию и автоматизации. Контейнеры SQL Server представляют собой именованные экземпляры, с данными и настройками, подготавливаемые в течение нескольких секунд. Возможность создавать, удалять и заменять контейнеры SQL Server за считанные секунды позволяет более практично использовать их для разработки, контроля качества и других случаев применения, которые будут рассмотрены ниже.

Благодаря быстродействию и автоматизации контейнеры SQL Server идеальны для организации производственной среды разработки и контроля качества. Каждый член группы работает с изолированными контейнерами в общей виртуальной машине, с трех-пяти-кратным сокращением числа виртуальных машин. В результате мы получаем существенную экономию на обслуживании виртуальных машин и стоимости лицензий Microsoft. Контейнеры легко интегрировать в массивы сети хранения данных (SAN) с использованием реплик хранилища и клонов баз данных (рисунок 2).

Подключенная база данных объемом 1 Тбайт формируется в экземпляре контейнера менее чем за одну минуту. Это значительное улучшение по сравнению с серверами с выделенными именованными экземплярами или предоставлением виртуальных машин для каждого разработчика. Одна компания использует восьмиядерный сервер для обслуживания до 20 контейнеров SQL Server по 400 Гбайт. В прошлом для подготовки каждой виртуальной машины требовалось более часа, а экземпляры контейнеров выдаются за две минуты. Таким образом, удалось в 20 раз сократить число виртуальных машин, уменьшить число ядер процессора в 5 раз и резко сократить расходы на оплату лицензий Microsoft. Кроме того, повысились гибкость и быстрота реагирования в бизнесе.

Применение контейнеров SQL Server

Контейнеры определяются с помощью сценариев Dockerfile, которые предусматривают конкретные шаги построения контейнера. Приведенный на экране 1 файл Dockerfile задает SQL Server 2012 с базами данных, копируемыми в контейнер, и скриптом SQL Server для маскирования выбранных таблиц.

Каждый контейнер может содержать десятки баз данных со вспомогательными файлами и файлами журнала. Базы данных могут быть скопированы и выполнены в контейнере или подключены с помощью команды MOUNTDB.

Каждый контейнер содержит частную файловую систему, изолированную от ресурсов хоста. В приведенном на экране 2 примере контейнер строится с использованием MSSQL-2014 и venture.mdf. Формируются уникальный идентификатор ContainerID и порт контейнера.


Экран 2. Контейнер на базе SQL Server 2014 и venture.mdf

Контейнеры SQL Server обеспечивают новый уровень быстродействия и автоматизации, но их поведение точно такое же, как у обычных именованных пространств. Управление ресурсами можно реализовать с помощью инструментария SQL Server или через пределы ресурсов контейнера (экран 3).

Другие случаи применения

Контейнеры - самое распространенное средство организации среды для разработки и контроля качества, но появляются и другие области применения. Тестирование аварийного восстановления - простой, но многообещающий сценарий использования. Среди прочих - контейнеризация внутренней среды SQL Server для унаследованных приложений, таких как SAP или Microsoft Dynamics. Контейнеризованный внутренний компонент используется для предоставления рабочей среды для поддержки и текущего обслуживания. Применяются также оценочные контейнеры для поддержки рабочих сред с постоянными хранилищами данных. В одной из следующих статей я подробно расскажу о постоянных данных.

Компания WinDocks стремится еще более упростить использование контейнеров через веб-интерфейс. Другой проект сосредоточен на переносе контейнеров SQL Server в процессе DevOps или Continuous Integration с конвейерами CI/CD на основе Jenkins или Team City. Сегодня вы можете познакомиться с использованием контейнеров на всех редакциях Windows 8 и Windows 10, Windows Server 2012 или Windows Server 2016 с поддержкой всех выпусков, начиная с SQL Server 2008. с помощью вашей копии WinDocks Community Edition (https://www.windocks.com/community-docker-windows).

В *nix-системах изначально реализована многозадачность и предлагаются средства, позволяющие изолировать и контролировать процессы. Такие технологии, как chroot(), обеспечивающая изоляцию на уровне файловой системы, FreeBSD Jail, ограничивающая доступ к структурам ядра, LXC и OpenVZ, давно известны и широко используются. Но импульсом в развитии технологии стал Docker, позволивший удобно распространять приложения. Теперь подобное добралось и до Windows.

Контейнеры в Windows

Современные серверы обладают избыточной производительностью, и приложения порой не используют даже их части. В результате системы какое-то время «простаивают», нагревая воздух. Выходом стала виртуализация, позволяющая запускать несколько ОС на одном сервере, гарантированно разделяя их между собой и выделяя каждой нужное количество ресурсов. Но прогресс не стоит на месте. Следующий этап - микросервисы, когда каждая часть приложения развертывается отдельно, как самодостаточный компонент, который легко масштабируется под нужную нагрузку и обновляется. Изоляция предотвращает вмешательство в работу микросервиса со стороны других приложений. С появлением проекта Docker , упростившего процесс упаковки и доставки приложений вместе с окружением, архитектура микросервисов получила дополнительный толчок в развитии.

Контейнеры - это иной тип виртуализации, предоставляющий обособленную среду для выполнения приложений, называемую OS Virtualization. Реализуются контейнеры за счет использования изолированного пространства имен, включающего все необходимые для работы ресурсы (виртуализированные имена), с которыми можно взаимодействовать (файлы, сетевые порты, процессы и прочее) и выйти за которые нельзя. То есть ОС показывает контейнеру только то, что выделено. Приложение внутри контейнера считает, что оно единственное, и работает в полноценной ОС без каких-либо ограничений. Если необходимо изменить существующий файл или создать новый, контейнер получает копии с основной ОС хоста, сохраняя только измененные участки. Поэтому развертывание нескольких контейнеров на одном хосте очень эффективно.

Отличие контейнеров от виртуальных машин заключается в том, что контейнеры не загружают собственные копии ОС, библиотеки, системные файлы и прочее. Операционная система как бы делится с контейнером. Единственное, что дополнительно требуется, - это ресурсы, необходимые для запуска приложения в контейнере. В результате контейнер стартует в считаные секунды и меньше нагружает систему, чем в случае применения виртуальных машин. Docker в настоящее время предлагает 180 тысяч приложений в репозитории, а формат унифицирован в Open Container Initiative (OCI). Но зависимость от ядра подразумевает, что в другой ОС контейнеры не будут работать. Контейнеры Linux требуют Linux API, соответственно Windows в Linux работать не станет.

Разработчики Windows до недавнего времени предлагали две технологии виртуализации: виртуальные машины и виртуальные приложения Server App-V. Каждая имеет свою нишу применения, свои плюсы и минусы. Теперь ассортимент стал шире - в Windows Server 2016 анонсированы контейнеры (Windows Server Containers). И хотя на момент TP4 разработка еще не была завершена, уже вполне можно посмотреть новую технологию в действии и сделать выводы. Нужно отметить, что, догоняя и имея на руках готовые технологии, разработчики MS пошли в некоторых вопросах чуть дальше, так что использование контейнеров стало проще и более универсальным. Главное отличие в том, что предложены два вида контейнеров: контейнеры Windows и контейнеры Hyper-V. В TP3 были доступны только первые.

Контейнеры Windows используют одно ядро с ОС, которое динамично разделяют между собой. Процесс распределения (CPU, ОЗУ, сеть) берет на себя ОС. При необходимости можно ограничить максимально доступные ресурсы, выделяемые контейнеру. Файлы ОС и запущенные службы проецируются в пространство имен каждого контейнера. Такой тип контейнера эффективно использует ресурсы, уменьшая накладные расходы, а значит, позволяет более плотно размещать приложения. Этот режим в чем-то напоминает FreeBSD Jail или Linux OpenVZ.

Контейнеры Hyper-V обеспечивают дополнительный уровень изоляции при помощи Hyper-V. Каждому контейнеру выделяется свое ядро и память, изоляцию осуществляет не ядро ОС, а гипервизор Hyper-V. В результате достигается такой же уровень изоляции, как и в виртуальных машинах, при меньших накладных расходах по сравнению с VM, но больший, если сравнить с контейнерами Windows. Для использования такого вида контейнеров нужно установить на хосте роль Hyper-V. Контейнеры Windows больше подходят для использования в доверенной среде, например когда на сервере запускаются приложения одной организации. Когда же сервером пользуются множество компаний и необходимо обеспечить больший уровень изоляции, контейнеры Hyper-V, вероятно, будут более рациональны.

Важная особенность контейнеров в Win 2016 состоит в том, что тип выбирается не в момент создания, а в момент деплоя. То есть любой контейнер может быть запущен и как Windows, и как Hyper-V.

В Win 2016 за контейнеры отвечает слой абстракции Contаiner Management stack, реализующий все нужные функции. Для хранения используется формат образа жесткого диска VHDX. Контейнеры, как и в случае с Docker, сохраняются в образы в репозитории. Причем каждый сохраняет не полный набор данных, а только отличия создаваемого образа от базового, и в момент запуска все нужные данные проецируются в память. Для управления сетевым трафиком между контейнером и физической сетью служит Virtual Switch.

В качестве ОС в контейнере может использоваться Server Core или Nano Server. Первый, в общем-то, давно не новинка и обеспечивает высокий уровень совместимости с имеющимися приложениями. Второй - еще более урезанная версия для работы без монитора, позволяющая запускать сервер в минимально возможной конфигурации для использования с Hyper-V, файловым сервером (SOFS) и облачными службами. Графический интерфейс, естественно, отсутствует. Содержит только самые необходимые компоненты (.NET с CoreCLR, Hyper-V, Clustering и так далее). Но в итоге занимает на 93% меньше места, требует меньше критических исправлений.

Еще интересный момент. Для управления контейнерами, кроме традиционного PowerShell, можно использовать и Docker. И чтобы обеспечить возможность запуска неродных утилит на Win, MS заключила партнерское соглашение для расширения API Docker и набора инструментов. Все разработки открыты и доступны в официальном GitHub проекта Docker . Команды управления Docker применимы ко всем контейнерам как Win, так и Linux. Хотя, естественно, контейнер, созданный на Linux, запустить в Windows невозможно (как и наоборот). В настоящий момент PowerShell по функциям ограничен и позволяет работать только с локальным репозиторием.

Установка Containers

В Azure есть необходимый образ Windows Server 2016 Core with Containers Tech Preview 4, который можно развернуть и использовать для изучения контейнеров. Иначе необходимо все настроить самому. Для локальной установки нужен Win 2016, причем, так как Hyper-V в Win 2016 поддерживает вложенную виртуализацию (Nested virtualization), это может быть как физический, так и виртуальный сервер. Сам процесс установки компонента стандартен. Выбираем соответствующий пункт в мастере добавления ролей и компонентов или, используя PowerShell, даем команду

PS> Install-WindowsFeature Containers

В процессе установится и сетевой контроллер Virtual Switch, его сразу необходимо настроить, иначе дальнейшие действия будут выдавать ошибку. Смотрим названия сетевых адаптеров:

PS> Get-NetAdapter

Для работы нам нужен контроллер с типом External. У командлета New-VMSwitch много параметров, но для примера обойдемся минимальными установками:

PS> New-VMSwitch -Name External -NetAdapterName Ethernet0

Проверяем:

PS> Get-VMSwitch | where {$_.SwitchType –eq "External"}

Файрвол Windows будет блокировать соединения к контейнеру. Поэтому необходимо создать разрешающее правило, как минимум для возможности подключаться удаленно при помощи PowerShell remoting, для этого разрешим TCP/80 и создадим правило NAT:

PS> New-NetFirewallRule -Name "TCP80" -DisplayName "HTTP on TCP/80" -Protocol tcp -LocalPort 80 -Action Allow -Enabled True PS> Add-NetNatStaticMapping -NatName "ContainerNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.1.2 -InternalPort 80 -ExternalPort 80

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

PS> https://aka.ms/tp4/Install-ContainerHost -OutFile C:\Install-ContainerHost.ps1 PS> C:\Install-ContainerHost.ps1

Есть еще один вариант - развернуть готовую виртуальную машину с поддержкой контейнера. Для этого на том же ресурсе есть скрипт, автоматически производящий все нужные операции. Подробная инструкция приведена на MSDN . Скачиваем и запускаем скрипт:

PS> wget -uri https://aka.ms/tp4/New-ContainerHost -OutFile c:\New-ContainerHost.ps1 PS> C:\New-ContainerHost.ps1 –VmName WinContainer -WindowsImage ServerDatacenterCore

Имя задаем произвольное, а -WindowsImage говорит о типе собираемого образа. Вариантами могут быть NanoServer, ServerDatacenter. Сразу ставится и Docker, за его отсутствие или наличие отвечает параметр SkipDocker и IncludeDocker. После запуска начнется загрузка и преобразование образа, в процессе нужно будет указать пароль для входа в VM. Сам ISO-файл достаточно большой, почти 5 Гбайт. Если канал медленный, файл можно скачать на другом компьютере, после чего переименовать в WindowsServerTP4 и скопировать в С:\Users\Public\Documents\Hyper-V\Virtual Hard Disks . Можем залогиниться в установленную виртуальную машину, указав пароль, заданный при сборке, и работать.

Теперь можно переходить непосредственно к использованию контейнеров.

Использование контейнеров с PowerShell

Модуль Containers содержит 32 командлета PowerShell, документация по некоторым еще неполная, хотя, в общем, чтобы заставить все работать, достаточная. Перечень вывести просто:

PS> Get-Command -module Containers

Получить список доступных образов можно при помощи командлета Get-ContainerImage, контейнеров - Get-Container. В случае с контейнером в колонке Status будет показан его текущий статус: остановлен или запущен. Но пока технология находится в стадии разработки, MS не представила репозиторий, да и, как говорилось, пока PowerShell работает с локальным репозиторием, поэтому для экспериментов его придется создать самому.

Итак, сервер с поддержкой у нас есть, теперь нужны сами контейнеры. Для этого ставим провайдер пакетов ContainerProvider.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «сайт», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score!

В сегодняшней Задать вопрос администратору , Я покажу вам, как развернуть образ в контейнере в Windows Server 2016, создать новое изображение и загрузить его в Docker.

Одной из основных новых функций Windows Server 2016 является поддержка контейнеров и Docker. Контейнеры обеспечивают легкие и гибкие возможности виртуализации, которые разработчики могут использовать для быстрого развертывания и обновления приложений без накладных расходов, связанных с виртуальными машинами. И в сочетании с Docker, решением для управления контейнерами, контейнерные технологии взорвались в течение последних нескольких лет.

Это обновленная статья для информации, которая ранее была включена в Развертывание и управление контейнерами Windows Server с помощью Docker это было актуально для Windows Server 2016 Technical Preview 3. Для получения дополнительной информации о Docker см. Что такое Докер? и Являются ли контейнеры Docker лучше, чем виртуальные машины? на Техническая база знаний Petri IT .

Чтобы следовать инструкциям в этой статье, вам потребуется доступ к физическому или виртуальному серверу под управлением Windows Server 2016. Вы можете загрузить оценочную копию с веб-сайта Microsoft или настроить виртуальную машину в Microsoft Azure. Вам также понадобится бесплатный Docker ID, который вы можете получить путем регистрации.

Установите Docker Engine

Первым шагом является установка поддержки Docker в Windows Server 2016.

  • Войдите в Windows Server.
  • Нажмите Поиск значок на панели задач и тип PowerShell в окне поиска.
  • Щелкните правой кнопкой мыши Windows PowerShell в результатах поиска и выберите Запуск от имени администратора из меню.
  • Введите учетные данные администратора по запросу.

Для установки Docker на Windows Server запустите следующий командлет PowerShell. Вам будет предложено установить NuGet, который загружает модуль Docker PowerShell из надежного онлайн-репозитория.

Install-Module -Name DockerMsftProvider -Force

Теперь используйте Install-Package командлет для установки механизма Docker на Windows Server. Обратите внимание, что перезагрузка необходима в конце процесса.

Install-Package -Name docker -ProviderName DockerMsftProvider -Force Restart-Computer -Force

После перезапуска сервера повторно запустите запрос PowerShell и убедитесь, что Docker установлен, выполнив следующую команду:

Версия докера

Загрузите изображение из Docker и запустите контейнерный процесс

Теперь, когда установлен движок Docker, давайте вытаскиваем образ Windows Server Core по умолчанию из Docker:

Докер тянуть майкрософт /windowsServerCore

Теперь, когда изображение загружено на локальный сервер, запустите процесс контейнера, используя запуск докеров :

Докер запустить Microsoft /windowsServerCore

Создать новое изображение

Теперь мы можем создать новое изображение с использованием ранее загруженного образа Windows Server в качестве отправной точки. Перед запуском вам понадобится идентификатор Docker. Если у вас его еще нет, зарегистрируйтесь в учетной записи Docker .

Спонсоров

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

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

"ОТ Майкрософт /windowsservercore `n CMD echo Hello World!" | сборка докера -t mydockerid /windows-test-image -

После того, как Docker закончит создание нового изображения, проверьте список доступных изображений на локальном сервере. Вы должны увидеть оба Microsoft /windowsServerCore и mydockerid /windows-test-изображения в списке.

Изображение docker

Теперь запустите новое изображение в контейнере, не забывая при этом заменить mydockerid с именем вашего Docker ID, и вы должны увидеть Привет мир! Появляются на выходе:

Докер запустить mydockerid /windows-test-изображения

Загрузите изображение в Docker

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

Вход в docker -u mydockerid -p mypassword

использование докерный толчок чтобы загрузить изображение, которое мы создали на предыдущих шагах, заменив mydockerid с именем вашего Docker ID:

Docker push mydockerid /windows-test-изображения



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: