Вы новичок в использовании образов Docker для Windows? Работаете ли вы в среде Windows и хотите узнать о сборке Docker для контейнерных образов? Вы попали по адресу. Лучший способ узнать что-то новое – это сделать это с помощью команд docker build
и docker build "tag"
!
В этой статье вы узнаете, как создать свой первый образ Docker для Windows из Dockerfile с помощью команды docker build
.
Поехали!
Понимание образов контейнеров Docker
Долгие годы единственным способом тестирования или разработки на различных операционных системах (ОС) было иметь несколько выделенных физических или виртуальных машин с образом выбранной вами версии ОС. Этот метод требовал больше аппаратных средств и накладных расходов для создания новых машин для каждого программного обеспечения и спецификации ОС.
Однако в наши дни использование образов контейнеров Docker стало популярным частично из-за популярности микросервисной архитектуры. В ответ на рост популярности Docker, Microsoft начала публично поддерживать образы Docker для нескольких флагманских продуктов на своей странице Docker Hub. Они даже добавили поддержку образов для Windows как функцию продукта в Windows 10 и Windows Server 2016!
A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable. As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Понимание сборки Docker и образов
Команда docker build
может использоваться для автоматизации создания образа контейнера, применения практики “контейнер как код” в DevOps и интеграции контейнеризации в цикл разработки ваших проектов. Файлы Dockerfile – это просто текстовые файлы, содержащие инструкции сборки, используемые Docker для создания нового образа контейнера, который основан на существующем образе.
Пользователь может указать базовый образ и список команд, которые должны быть выполнены при развертывании образа контейнера или при запуске в первый раз. В этой статье вы узнаете, как создать образ docker на базе Windows из Dockerfile с использованием контейнера Windows.
Этот процесс имеет несколько преимуществ по сравнению с использованием предварительно созданного образа контейнера:
- Вы можете перестроить образ контейнера для нескольких версий Windows, что отлично подходит для тестирования изменений кода на нескольких платформах.
- У вас будет больше контроля над тем, что установлено в контейнере. Это позволит вам минимизировать размер контейнера.
- По соображениям безопасности вы можете захотеть проверить контейнер на уязвимости и применить усиление безопасности к базовому образу
Предварительные требования
Эта статья – это руководство по изучению создания образа Docker с использованием Dockerfile. Если вы хотите следовать за мной, убедитесь, что у вас есть следующие предварительные требования.
- Установлен Docker для Windows. Я буду использовать Docker Community Edition (CE) версии 2.1.0.4 в моей среде.
- Для загрузки образов Docker требуется доступ в Интернет
- Операционная система Windows 10+ (в данном руководстве используется версия 1709)
- Включенная вложенная виртуализация
- 5 ГБ свободного места на жестком диске вашего компьютера
- PowerShell 5.0+
- В этом руководстве используется среда разработки Visual Studio Code. Однако вы можете использовать любую другую среду разработки по вашему выбору.
Примечание: Обязательно включите конфигурацию контейнеров Windows при установке Docker.
Подготовка
Сначала вам понадобится папка для хранения всех образов Docker и контейнеров, которые вы будете создавать на основе этих образов. Для этого откройте терминал PowerShell или cmd (в этой статье мы будем использовать PowerShell) и создайте новый каталог с именем C:\Containers.
После создания папки перейдите в нее. Это устанавливает текущий рабочий каталог консоли в C:\Containers для установки по умолчанию всех загрузок в этот каталог.
В этой статье вы получите первоначальный старт. Большинство файлов для работы над этим проектом уже доступны. После создания папки выполните Git pull, чтобы скопировать необходимые файлы для этой статьи из репозитория TechSnips Github в папку C:\Containers. После завершения проверьте, чтобы папка C:\Containers выглядела так, как указано ниже.

Загрузка образа IIS Windows Docker
Первая задача – загрузить “шаблон” или базовый образ. Позже вы создадите свой собственный образ Docker, но сначала вам нужен образ для начала работы. Вы будете загружать последние образы IIS и Windows Server Core, необходимые для этого учебного пособия. Обновленный список образов можно найти на странице официального репозитория образов Microsoft Docker.
Обзор текущих базовых образов Docker
Перед тем как загрузить образ из репозитория образов, давайте сначала рассмотрим текущие базовые образы Docker, которые у вас уже есть в локальной системе. Для этого запустите консоль PowerShell от имени администратора и введите docker images
. Эта команда вернет все образы на вашей локальной системе.
Как видно ниже, изначально доступные образы отсутствуют.

Загрузка базового образа
Теперь пришло время скачать базовый образ IIS с Docker Hub. Для этого выполните команду docker pull
, как показано ниже. Этот процесс может занять некоторое время в зависимости от скорости вашего интернет-соединения.

Теперь выполните команду docker images
, и у вас должен быть доступен самый последний образ Microsoft Windows Core IIS для этого руководства.

Инспекция Dockerfile
На предыдущем этапе вы скачали существующий Dockerfile для этого руководства. Давайте теперь рассмотрим, что именно это включает в себя.
Откройте файл C:\Containers\Container1\Dockerfile в вашем любимом редакторе. Содержимое этого Dockerfile используется для определения конфигурации образа контейнера на этапе сборки.
Вы можете увидеть объяснение того, что делает каждый фрагмент этого файла, встроенное в комментариях.
Построение нового образа Docker
У вас готов Dockerfile, и вы загрузили базовый образ IIS. Теперь пришло время построить новый образ Docker с использованием Dockerfile.
Для создания нового образа используйте команду docker build "тег"
. Эта команда создает образ. В этой статье вы также используете опцию -t **
, которая заменяет часть “тега”. Эта опция позволяет дать вашему новому образу дружественное имя и ссылаться на Dockerfile, указав путь к папке, где он находится.
Ниже вы видите пример того, как убедиться, что консоль находится в каталоге C:\Containers, а затем создать новый образ из Dockerfile в каталоге C:\Containers\Container1.
После запуска вы увидите ход выполнения команды, когда она обрабатывает каждую инструкцию в файле docker построчно:

После завершения у вас должен быть новый образ Docker!
Теперь выполните команду docker images
, чтобы просмотреть доступные изображения. Ниже приведен пример созданного образа container1.

Примечание: Команда
docker build —help
– это полезный параметр для отображения подробной информации о выполняемой команде Docker.
Запуск Docker Container
На этом этапе у вас должен быть создан новый образ. Пришло время запустить контейнер с использованием этого образа. Для запуска нового контейнера используйте команду docker run
.
docker run
команда запустит новый контейнер Docker на основе образа container1, который вы создали ранее. Вы можете увидеть пример ниже.
Обратите внимание, что используется параметр -d
. Это указывает времени выполнения Docker запустить образ в отсоединенном режиме и выйти, когда корневой процесс, используемый для запуска контейнера, завершится.
Когда выполнится команда docker run
, она вернет идентификатор созданного контейнера. Приведенный ниже пример записывает этот идентификатор в переменную $containerID
, чтобы мы могли легко обращаться к нему позже.

После того как контейнер запущен, выполните команду docker ps
. Эта команда позволяет увидеть, какие контейнеры в данный момент работают с использованием каждого образа. Обратите внимание, что запущенный образ автоматически получает прозвище (busy_habit в данном случае). Это прозвище иногда используется вместо идентификатора контейнера для управления им.

Запуск кода внутри контейнера Docker
A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec
command.
В этом примере выполните docker exec
, чтобы просмотреть вывод PowerShell для команды Get-ChildItem
в контейнере с использованием следующего синтаксиса команды. Это позволит убедиться, что инструкции в Dockerfile по удалению файлов IIS по умолчанию были выполнены успешно.
Вы можете видеть ниже, что существует только файл index.html, что означает, что файлы IIS по умолчанию были удалены.

Теперь выполните команду ipconfig
в контейнере, чтобы получить локальный IP-адрес образа контейнера и попытаться подключиться к веб-сайту IIS.
Вы можете видеть ниже, что ipconfig
был запущен в контейнере так же, как если бы он был запущен на вашем локальном компьютере, и вернул всю информацию об IP.

ipconfig
in a Docker containerИнспектирование веб-сайта IIS
Теперь пришло время раскрыть плоды вашего труда! Пора посмотреть, правильно ли сервер IIS, работающий в контейнере Docker, обслуживает страницу index.html.
Откройте браузер и вставьте IP-адрес IPv4, найденный через ipconfig
, в адресную строку. Если все хорошо, вы должны увидеть сообщение Hello World!!, как показано ниже.

Обзор истории Docker
Одна из полезных команд, которую можно использовать при работе с контейнерами Docker, – это команда docker history
. Хотя она не обязательно связана с созданием образа или самого контейнера, команда docker history
является полезной, поскольку позволяет просматривать изменения, внесенные в образ контейнера.
Вы можете видеть ниже, что команда docker history
возвращает всю информацию о действиях Dockerfile и PowerShell, выполненных в контейнере container1, с которым вы работали.

docker history
Очистка запущенных образов Docker
Ниже приведены шаги для очистки всех остановленных контейнеров, работающих на вашем компьютере. Это позволит освободить дисковое пространство и системные ресурсы.
Запустите команду docker ps
, чтобы просмотреть список контейнеров, работающих на вашей системе:

Теперь остановите запущенные контейнеры с помощью команды docker stop
:

Наконец, вы можете окончательно удалить остановленные контейнеры с помощью команды docker system prune
.
