Руководство. Создание приложения Docker с помощью Visual Studio Code
Это руководство является началом четырех частей серии, введя Docker для использования с Visual Studio Code (VS Code). Вы узнаете, как создавать и запускать контейнеры Docker, сохранять данные и управлять несколькими контейнерами с помощью Docker Compose.
VS Code предлагает расширение Docker, которое позволяет работать с локальной службой Docker Desktop. Docker Desktop работает на компьютере и управляет локальными контейнерами, которые являются компактными виртуализированными средами, предоставляющими платформу для создания и запуска приложений. Контейнерам не требуется объем и издержки полной операционной системы.
В первом учебнике вы узнаете, как:
- Создайте контейнер Docker.
- Сборка образа контейнера.
- Запуск контейнера приложения.
Необходимые компоненты
- Установленный экземпляр Visual Studio Code.
- Установленное расширение Docker VS Code.
- Docker Desktop настроен для использования контейнеров Linux.
- Учетная запись Docker Hub. Вы можете создать учетную запись бесплатно.
В этом руководстве работает с Windows 10 или более поздней версии и Docker Desktop, настроенными для использования контейнеров Linux.
Создание контейнера
Контейнер — это процесс на компьютере. Он изолирован от всех других процессов на главном компьютере. Для такой изоляции используются пространства имен ядра и группы управления.
Контейнер использует изолированную файловую систему. Эта пользовательская файловая система предоставляется образом контейнера. Образ содержит все необходимое для запуска приложения, например все зависимости, конфигурацию, скрипты и двоичные файлы. Образ также содержит другую конфигурацию для контейнера, например переменные среды, команду, выполняемую по умолчанию, и другие метаданные.
Установив расширение Docker для VS Code, можно приступить к работе с контейнерами в VS Code. Помимо использования контекстных меню в области Docker, можно выбрать Терминал>Новый терминал, чтобы открыть окно командной строки. Кроме того, команды можно выполнять в окне Bash. Если не указано иное, в окне Bash или в терминале VS Code можно выполнять любую команду, помеченную как Bash.
- Установите для Docker режим контейнера Linux. Чтобы переключиться на контейнеры Linux, если вы в настоящее время настроены на контейнеры Windows, щелкните правой кнопкой мыши значок Docker в области системы во время работы Docker Desktop и выберите «Переключиться на контейнеры Linux».
- В VS Code выберите Терминал>Новый терминал.
- Выполните эту команду в окне терминала или в окне Bash.
docker run -d -p 80:80 docker/getting-started
- -d — запуск контейнера в отключенном режиме (в фоновом окне).
- -p 80:80 — сопоставление порта 80 узла с портом 80 в контейнере.
- docker/getting-started — указывает образ, который будет использоваться.
Для сокращения полной команды можно использовать однозначные флаги. Например, приведенная выше команда может быть написана следующим образом:
docker run -dp 80:80 docker/getting-started

docker ps
Затем остановите и удалите контейнер:
docker stop docker rm
Создание образа контейнера для приложения
В этом учебнике используется простое приложение Todo.

Приложение позволяет создавать рабочие элементы и помечать их как завершенные или удалять их.
Чтобы создать приложение, создайте Dockerfile. Dockerfile — это текстовый сценарий инструкций, который используется для создания образа контейнера.
- Перейдите в репозиторий Учебник по началу работы с Docker, а затем выберите Код>Скачать ZIP-файл. Извлеките содержимое в локальную папку.

- В VS Code выберите Файл>Открыть папку. Перейдите в папку app в извлеченном проекте и откройте ее. Вы увидите файл с именем package.json и две папки с именами src и spec.

- Создайте файл с именем Dockerfile в той же папке, где находится файл package.json со следующим содержимым.
FROM node:20-alpine RUN apk add --no-cache python3 g++ make WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "/app/src/index.js"]
Примечание. Убедитесь, что файл не имеет расширения файла, например .txt .
docker build -t getting-started .
Примечание. Чтобы выполнить эту команду, во внешнем окне Bash перейдите в папку app с параметром Dockerfile.
Вы создали образ контейнера с помощью Dockerfile. Возможно, вы заметили, что было скачано много слоев. Dockerfile начинается с образа node:20-alpine . Если этот образ еще не был на компьютере, этот образ должен быть скачан.
После скачивания образа Dockerfile копирует ваше приложение и использует yarn для установки зависимостей приложения. Значение CMD в Dockerfile указывает команду по умолчанию, которую необходимо выполнить при запуске контейнера из этого образа.
. в конце команды docker build указывает, что Docker должен искать Dockerfile в текущем каталоге.
Запуск контейнера приложения
Теперь, когда у вас есть образ, можно запустить приложение.
-
Чтобы запустить контейнер, используйте следующую команду.
docker run -dp 3000:3000 getting-started

Параметр -d указывает, что вы запускаете контейнер в отключенном режиме в фоне. Значение -p создает сопоставление между портом узла 3000 и портом контейнера 3000. Без сопоставления портов вы не сможете получить доступ к приложению.
Следующие шаги
Вы выполнили это руководство, и у вас есть запущенный диспетчер списков дел с несколькими элементами. Вы узнали, как создать образы контейнеров и запустить контейнерное приложение.
Чтобы продолжить работу с этой серией учебников, оставьте все настройки, сделанные на данный момент. Затем попробуйте часть II этой серии:
Ниже приведены некоторые ресурсы, которые могут быть полезны:
Введение — Docker: Основы
Docker — программа, позволяющая операционной системе запускать процессы в изолированном окружении на базе специально созданных образов. Несмотря на то, что технологии, лежащие в основе Docker появились до него, именно Docker произвел революцию в том, как сегодня создается инфраструктура проектов, собираются и запускаются сервисы.
В этом курсе рассматриваются основы работы с Docker. Разбираются темы запуска и управления контейнерами. Рассказывается о том как опубликовать свой собственный образ на hub.docker.com .
Зачем нужен Docker
Docker — универсальный способ доставки приложений на машины (локальный компьютер или удаленные сервера) и их запуска в изолированном окружении.
Если вам приходилось собирать программы из исходников, то вы помните, что этот процесс включает в себя следующие шаги:
- Установить все необходимые зависимости под вашу операционную систему (их список еще надо найти)
- Скачать архив, распаковать
- Запустить конфигурирование make configure
- Запустить компиляцию make compile
- Установить make install
Этот процесс нетривиальный и далеко не всегда быстрый. Иногда даже невыполнимый из-за непонятных ошибок. И это не говоря про загрязнение операционной системы.
Docker позволяет упростить эту процедуру до запуска одной команды, причем с почти 100%-й гарантией успеха.
Предположим, что мы решили разработать статический сайт на основе Jekyll. Jekyll — популярный генератор статических сайтов, написанный на Ruby. Например, гайды Хекслета находятся (вернее находились, но это не столь важно) на статическом сайте, сгенерированном с его помощью. И при его генерации использовался Docker (об этом можно прочитать в гайде: как делать блог на Jekyll).
Старый способ использования Jekyll требовал установки на вашу основную систему как минимум Ruby и самого Jekyll в виде гема (gem — название пакетов в Ruby). Причем, как и всегда в подобных вещах, Jekyll работает только с определенными версиями Ruby, что вносит свои проблемы при настройке. С Docker запуск Jekyll сводится к одной команде, выполняемой в директории с блогом.
Docker стал универсальным средством доставки софта независимо от его структуры, зависимостей и способа установки. Все, что нужно программам, распространяемым через Docker, находиться внутри образа и не пересекаться с основной системой и другими контейнерами. Важность этого факта невозможно переоценить. Теперь обновление версий программ никак не задействует ни саму систему, ни другие программы. Сломаться больше ничего не может. Все, что нужно сделать, это скачать новый образ той программы, которую требуется обновить. Другими словами, Docker убрал проблему dependency hell и сделал инфраструктуру неизменяемой (immutable) .
Больше всего Docker повлиял именно на серверную инфраструктуру. До эры Docker управление серверами было очень болезненным мероприятием, хотя уже существовали такие программы по управлению конфигурацией, как Chef, Puppet и Ansible.
Основная причина всех проблем — изменяемое состояние. Программы ставятся, обновляются, удаляются. Все это происходит в разное время на разных серверах и немного по-разному. Например, обновить версию PHP, Ruby или Python — это целое рискованное приключение. Проще поставить рядом новый сервер и переключиться на него. Идейно Docker позволяет сделать именно такое переключение, забыть про старое и поставить новое. Каждый запущенный контейнер живет в своем окружении, причем откат в такой системе очень прост: нужно всего лишь остановить новый контейнер и поднять старый на базе предыдущего образа.
Подготовка
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
Play with Docker — онлайн-сервис для практического знакомства с Docker

В конце прошлого года два капитана Docker представили свою разработку под названием Play with Docker (PWD) — «игровую площадку для Docker». Пользователям предлагается бесплатно поработать со сборкой и запуском Docker-контейнеров прямо в веб-браузере, а также выполнить лабораторные работы для знакомства с Docker с нуля и совершенствования своих навыков.
Игровая площадка
Основной сайт сервиса — play-with-docker.com, который после прохождения CAPTCHA пересылает на один из облачных хостов, где стартует 4-часовая сессия «игровой площадки» (playground). В ней вы можете создавать новые сущности (instances), т.е. узлы тестового Docker-кластера. Каждый из них — это инсталляция легковесного дистрибутива Alpine Linux (на данный момент версии 3.6.2 с ядром Linux 4.4.0) с редактируемым локальным IP-адресом. В них установлен Docker актуальной версии 17.06 Community Edition.
Вся работа происходит прямо в веб-браузере:

Для эмуляции терминала используется JavaScript-реализация xterm.js от SourceLair, которая поддерживает множество современных браузеров (Chrome 48+, Edge 13+, Firefox 44+, Internet Explorer 11+, Opera 35+, Safari 8+). Терминал весьма удобен в работе, поддерживает стандартные клавиатурные сочетания, автодополнение по — в том числе и для команд/аргументов консольной команды docker .
Количество создаваемых сущностей ограничено пятью. А помимо стандартного образа системы со стабильным Docker можно выбрать и dev-вариант (сейчас он на базе Docker 17.07.0 CE RC1), и специальный образ с решением для управления кластерами UCP (Universal Control Plane), что означает наличие соответствующих образов ( docker/ucp , docker/ucp-agent , docker/ucp-auth , docker/ucp-swarm …) для запуска в контейнерах:
[node4] (local) root@10.0.7.6 ~ $ docker run --privileged docker/ucp docker/ucp docker/ucp-controller:2.1.5 docker/ucp-agent docker/ucp-dsinfo docker/ucp-agent:2.1.5 docker/ucp-dsinfo:2.1.5 docker/ucp-auth docker/ucp-etcd docker/ucp-auth-store docker/ucp-etcd:2.1.5 docker/ucp-auth-store:2.1.5 docker/ucp-hrm docker/ucp-auth:2.1.5 docker/ucp-hrm:2.1.5 docker/ucp-cfssl docker/ucp-metrics docker/ucp-cfssl:2.1.5 docker/ucp-metrics:2.1.5 docker/ucp-compose docker/ucp-swarm docker/ucp-compose:2.1.5 docker/ucp-swarm:2.1.5 docker/ucp-controller docker/ucp:2.1.5
К слову о кластерах: в рамках вашей тестовой инсталяции на Play with Docker можно сделать и кластер с Docker Swarm. Последовательность действий для этого будет выглядеть примерно так:
# На первом узле кластера, который станет менеджером: [node1] (local) root@10.0.7.3 ~ $ docker swarm init --advertise-addr 10.0.7.3 Swarm initialized: current node (txh3ffph72xarxjeg9gmpra2s) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-698vpn9u804ik4xdc9by60ytdabx3kuzyxj3vzhtr74qvkdlja-7xa6pwit58xzun989tao2nis7 10.0.7.3:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions. [node1] (local) root@10.0.7.3 ~ $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS txh3ffph72xarxjeg9gmpra2s * node1 Ready Active Leader # Теперь перейдите к консоли другого узла (например, node2) [node2] (local) root@10.0.7.4 ~ $ docker swarm join --token SWMTKN-1-698vpn9u804ik4xdc9by60ytdabx3kuzyxj3vzhtr74qvkdlja-7xa6pwit58xzun989tao2nis7 10.0.7.3:2377 This node joined a swarm as a worker. # Вернитесь к консоли первого узла (он является менеджером кластера) [node1] (local) root@10.0.7.3 ~ $ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS szx0qqvj5zwt6a4nho9an54yx node2 Ready Active txh3ffph72xarxjeg9gmpra2s * node1 Ready Active Leader
Более подробную пошаговую инструкцию по работе с Docker Swarm в рамках Play with Docker можно найти в этом видео (на английском языке).
А чтобы начинающим пользователям Docker было проще и лучше понять, чем же вообще можно (и полезно) заниматься в игровой площадке Docker, авторы Play with Docker дополнили свой сервис удобным ресурсом по обучению.
Обучение в PWD
Обучаться работе с Docker предлагается в формате лабораторных работ, которые опубликованы по адресу training.play-with-docker.com.
Сделаны они как пошаговые инструкции с пояснениями + запускаемый в сервисе Play with Docker эмулятор терминала, где вы можете исполнять предлагаемые инструкции (команды даже необязательно полностью вводить — достаточно кликать на листинги из описания слева, и они копируются/выполняются на терминале справа):

Главная страница лабораторных Play with Docker предлагает два гида:
- Эксплуатация (Ops) — начало работы с Docker для ИТ-специалистов и системных администраторов: первое знакомство с Docker, его основными концепциями и возможностями; более глубокое изучение особенностей Docker (архитектура, интеграция с имеющейся инфраструктурой); использование в production;
- Разработка (Dev) — начало работы с Docker для разработчиков: базовые концепции Docker и как в нём собирать/деплоить простые приложения; работа с реестрами образов и применение в непрерывной интеграции; деплой в staging, управление Docker Swarm, безопасность приложений.
PWD как Open Source
Замечательный факт про Play with Docker — публикация его исходных кодов на GitHub под свободной лицензией MIT и открытость авторов к модификациям от сообщества. В описании репозитория проекта так и говорится: «Вы знаете PWD, вы используете его — время улучшать!»
Это также означает, что вы можете запустить локальную версию Play with Docker для проведения всех нужных экспериментов на своих ресурсах. Инсталляция требует Docker 1.13+ и Go 1.7.1+. Технически для запуска сервиса используется возможность DIND (Docker-in-Docker), позволяющая запускать Docker внутри Docker. Для этого по умолчанию используется готовый образ от разработчиков ( franela/dind ), но при желании его можно модифицировать (использовать свой базовый образ).
Развитие
На апрельском DockerCon в рамках сессии Moby Cool Hack авторы Play with Docker представляли своё детище (доступно видео).
Там же они рассказывали о некоторых новых возможностях PWD:
- Драйвер для Docker Machine, позволяющий управлять PWD-хостами через терминал и подключаться к ним через SSH.
- Функция загрузки файлов с локального компьютера простым drag-n-drop в открытый терминал PWD в веб-браузере (предназначено для Dockerfile ).
- Шаблоны для сессий, позволяющие развернуть Swarm-кластер из 5 узлов буквально за несколько секунд.
- Расширение для Chrome «Play with Docker», добавляющее кнопку «Try in PWD» для запуска популярных образов из DockerHub в этом онлайн-окружении, а также возможность встраивать подобную кнопку на своих сайтах (для своих образов):
- Блог компании Флант
- Системное администрирование
- *nix
- Виртуализация
- DevOps
Общие сведения об удаленной разработке в Windows
Использование контейнеров для удаленных разработки и развертывания приложений на платформе Docker является очень популярным решением, которое предоставляет множество преимуществ. Узнайте больше о различных видах поддержки, предоставляемой инструментами и службами корпорации Майкрософт, в том числе подсистемой Windows для Linux, Visual Studio, Visual Studio Code, .NET, а также о многочисленных службах Azure.
Docker на Windows
![]()
Установка Docker Desktop для Windows
Сведения, связанные с инструкциями по установке, требованиями к системе, сведения о том, что содержится в установщике, об удалении, о различиях между стабильными и пограничными версиями, а также о переходе между контейнерами Windows и Linux.

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

Курс MS Learn: введение в контейнеры Docker
Microsoft Learn предлагает бесплатный вводной курс по контейнерам Docker, а также множество курсов, пройдя которые вы узнаете о том, как работать с Docker и как подключаться к службам Azure.

Начало работы с удаленными контейнерами Docker в WSL 2
Сведения о настройке Docker Desktop для Windows, чтобы использовать командную строку Linux (Ubuntu, Debian, SUSE и т. д.), работая в WSL 2 (подсистема Windows для Linux, версия 2).
VS Code и Docker

Создание контейнера Docker с помощью VS Code
Настройка полнофункциональной среды разработки внутри контейнера с использованием расширения Remote – Containers, а также учебники по настройке контейнеров NodeJS, Python или ASP.NET Core.

Присоединение VS Code к контейнеру Docker
Сведения о том, как присоединить Visual Studio Code к уже выполняющемуся контейнеру Docker или к контейнеру в кластере Kubernetes.

Расширенная конфигурация контейнера
Узнайте о расширенных сценариях установки для использования контейнеров Docker с Visual Studio Code или ознакомьтесь со статьей о проверке контейнеров для отладки с VS Code.

Использование удаленных контейнеров в WSL 2
Сведения об использовании контейнеров Docker с WSL 2 (подсистема Windows для Linux, версия 2) и о том, как настроить все компоненты с помощью VS Code. Вы также можете узнать, как работает этот процесс.
Visual Studio и Docker

Поддержка Docker в Visual Studio
Дополнительные сведения о поддержке Docker, доступной для проектов ASP.NET, о проектах ASP.NET Core, о консольных проектах .NET Core и .NET Framework в Visual Studio, а также о поддержке оркестрации контейнеров.

Краткое руководство. Docker в Visual Studio
Узнайте, как создавать, отлаживать и запускать контейнерные приложения .NET, ASP.NET и ASP.NET Core, а после публиковать их в Реестре контейнеров Azure (ACR), в Docker Hub, в Службе приложений Azure или в собственном реестре контейнеров в Visual Studio.

Руководство по созданию многоконтейнерного приложения с помощью Docker Compose
Сведения о том, как управлять несколькими контейнерами и организовать между ними обмен данными с помощью инструментов Visual Studio для работы с контейнерами. Вы также можете найти ссылки на учебники, например на краткое руководство Использование Docker с одностраничным приложением React в Visual Studio.

Средства для контейнеров в Visual Studio
Разделы, посвященные запуску средств сборки в контейнере, отладке приложений Docker, устранению неполадок средств разработки, развертыванию контейнеров Docker и соединению Kubernetes с Visual Studio.

.NET и Docker

Руководство по .NET. Приложения и контейнеры микрослужб
Введение в приложения на основе микрослужб, управляемые с помощью контейнеров.

Что такое Docker?
Базовые сведения о контейнерах Docker, в том числе сравнение контейнеров Docker с виртуальными машинами и базовая таксономия терминов и концепций Docker с объяснением различий между контейнерами, образами и реестрами.

Руководство. Контейнеризация приложения .NET
Узнайте, как контейнеризировать приложение .NET с помощью Docker, включая создание Dockerfile, основные команды и очистку ресурсов.

Рабочий процесс разработки для приложений Docker
Описывает рабочий процесс внутреннего цикла разработки приложений на основе контейнера Docker.
Службы контейнеров Azure

Экземпляры контейнеров Azure
Сведения о запуске контейнеров Docker по запросу в управляемой бессерверной среде Azure, а также сведения о развертываниях с помощью Docker CLI, ARM, портала Azure, о создании групп с несколькими контейнерами, совместном использовании данных между контейнерами, подключении к виртуальной сети и многом другом.
![]()
Реестр контейнеров Azure;
Узнайте, как создавать, хранить и администрировать образы, а также артефакты контейнеров в частном реестре для всех типов развертываний контейнеров. Получите сведения о создании реестров контейнеров Azure для существующих конвейеров разработки и развертывания контейнеров, о настройке задач автоматизации и о том, как управлять реестрами, узнав также о георепликации и лучших методах.

Azure Service Fabric
Узнайте об Azure Service Fabric — платформе распределенных систем для упаковки, развертывания надежных масштабируемых микрослужб и контейнеров и управления ими.

Служба приложений Azure
Сведения о создании и размещении веб-приложений, мобильных серверных частях и API RESTful на любом языке программирования без управления инфраструктурой. Попробуйте запустить модуль service Learn приложение Azure, чтобы развернуть веб-приложение на основе образа Docker и настроить непрерывное развертывание.
Видеоролик с пояснением о контейнерах Docker
Видеоролик с пояснением оркестрации Kubernetes и оркестрации контейнеров
Контейнеры в Windows

Документация по контейнерам в Windows
Сведения об упаковке приложений и их зависимостей, а также об использовании виртуализации на уровне операционной системы для предоставления быстрых, полностью изолированных сред в одной системе. Сведения о контейнерах Windows, а также краткие руководства по началу работы, руководства по развертыванию и примеры.

Часто задаваемые вопросы о контейнерах Windows
Ответы на часто задаваемые вопросы о контейнерах. Ознакомьтесь также с пояснением в StackOverflow «В чем заключается разница между Docker для Windows и Docker в Windows?»

Настройка среды
Узнайте, как настроить Windows 11, Windows 10 или Windows Server для создания, запуска и развертывания контейнеров, а также изучите предварительные требования, процесс установки Docker и принципы работы с базовыми образами контейнеров Windows.

Создание контейнера Windows Server в Службе Azure Kubernetes (AKS)
Узнайте, как развернуть пример приложения ASP.NET, размещенный в контейнере Windows Server, в кластере AKS с помощью Azure CLI.