Запуск Docker-образа на виртуальной машине с помощью Yandex Cloud Registry
В этом руководстве вы развернете Docker-образ из реестра Yandex Cloud Registry и запустите контейнер на виртуальной машине Yandex Compute Cloud.
Чтобы запустить Docker-образ на виртуальной машине:
- Подготовьте облако к работе.
- Создайте реестр Cloud Registry.
- Создайте сервисный аккаунт.
- Создайте авторизованный ключ сервисного аккаунта.
- Создайте облачную сеть и подсеть.
- Создайте ВМ.
- Соберите Docker-образ и загрузите в Cloud Registry.
- Загрузите Docker-образ на ВМ.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость ресурсов для запуска Docker-образа входят:
- Плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud).
- Плата за хранение созданных образов (см. тарифы Yandex Cloud Registry).
- Плата за исходящий трафик из Yandex Cloud в интернет (см. тарифы Yandex Compute Cloud).
Создайте пару ключей SSH
Подготовьте SSH-ключ для доступа к ВМ.
-
Откройте терминал.
-
Создайте новый ключ с помощью команды
ssh-keygen:ssh-keygen -t ed25519 -C "<опциональный_комментарий>"Вы можете передать в параметре
-Cпустую строку, чтобы не добавлять комментарий, или не указывать параметр-Cвообще — в таком случае будет добавлен комментарий по умолчанию.После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением
.pub, закрытый ключ — в файле без расширения.По умолчанию команда предлагает сохранить ключ под именем
id_ed25519в директории/home/<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именемid_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.
Если у вас еще не установлен OpenSSH
-
Запустите
cmd.exeилиpowershell.exe(предварительно обновите PowerShell). -
Создайте новый ключ с помощью команды
ssh-keygen:ssh-keygen -t ed25519 -C "<опциональный_комментарий>"Вы можете передать в параметре
-Cпустую строку, чтобы не добавлять комментарий, или не указывать параметр-Cвообще — в таком случае будет добавлен комментарий по умолчанию.После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением
.pub, закрытый ключ — в файле без расширения.По умолчанию команда предлагает сохранить ключ под именем
id_ed25519в папкуC:\Users\<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именемid_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.
Создайте ключи с помощью приложения PuTTY:
-
Скачайте
и установите PuTTY. -
Добавьте папку с PuTTY в переменную
PATH:- Нажмите кнопку Пуск и в строке поиска Windows введите Изменение системных переменных среды.
- Справа снизу нажмите кнопку Переменные среды....
- В открывшемся окне найдите параметр
PATHи нажмите Изменить. - Добавьте путь к папке в список.
- Нажмите кнопку ОК.
-
Запустите приложение PuTTYgen.
-
В качестве типа генерируемой пары выберите EdDSA. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.

-
В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.
-
Нажмите кнопку Save private key и сохраните закрытый ключ. Никому не сообщайте ключевую фразу от него.
-
Нажмите кнопку Save public key и сохраните открытый ключ в файле
<имя_ключа>.pub.
Важно
Надежно сохраните закрытый ключ: без него подключиться к ВМ будет невозможно.
Установите и настройте Docker
-
Установите Docker Engine. Воспользуйтесь инструкцией
по установке и запуску Docker для вашей операционной системы. -
После завершения установки добавьте текущего пользователя в группу
docker:sudo groupadd docker sudo usermod -aG docker $USER newgrp docker
Чтобы группы успешно обновились, может потребоваться войти в ОС заново или перезагрузить компьютер.
Информацию о дополнительных настройках Docker в OS Linux см. в документации разработчика
Если вы работаете на компьютере с графическим интерфейсом, вы также можете установить
Скачайте
-
Скачайте
и установите дистрибутив Docker Desktop для Windows. -
После завершения установки добавьте текущего пользователя в группу
docker-users:-
От имени администратора откройте оснастку Управление компьютером:
compmgmt.msc -
Раскройте меню Управление компьютером (локальным) → Служебные программы → Локальные пользователи и группы → Группы и откройте группу
docker-users. -
Нажмите кнопку Добавить и добавьте нужного пользователя в группу.
-
Нажмите ОК.
-
-
Запустите Docker Desktop и убедитесь, что статус приложения —
running.
Информацию о дополнительных настройках Docker в OS Windows см. в документации разработчика
Создайте реестр Cloud Registry
Создайте реестр для хранения Docker-образов.
-
В консоли управления
выберите каталог, в котором хотите создать реестр. -
Перейдите в сервис Cloud Registry.
-
Нажмите Создать реестр.
-
Выберите формат
Docker. -
Выберите тип реестра Local.
-
Укажите имя реестра. Требования к имени:
- длина — от 3 до 62 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
Нажмите Создать.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
-
Посмотрите описание команды CLI для создания реестра:
yc cloud-registry registry create --help -
Создайте реестр:
yc cloud-registry registry create \ --name docker-ycr \ --description "Created with CLI" \ --registry-kind docker \ --registry-type localРезультат:
id: cn191rncdrhd******** folder_id: b1g681qpemb4******** name: docker-ycr kind: DOCKER type: LOCAL status: ACTIVE description: Created with CLI created_at: "2025-12-12T04:56:32.681439Z" modified_at: "2025-12-12T04:56:34.171714Z"
Воспользуйтесь методом REST API create для ресурса Registry или вызовом gRPC API RegistryService/Create.
Создайте сервисный аккаунт
Создайте сервисный аккаунт, от имени которого вы будете скачивать Docker-образ на ВМ. Назначьте ему роль cloud-registry.artifacts.puller на созданный реестр.
- Перейдите в сервис Identity and Access Management.
- В верхней части экрана перейдите на вкладку Сервисные аккаунты.
- Нажмите Создать сервисный аккаунт.
- Введите имя сервисного аккаунта
docker-puller. - Нажмите Создать.
- Перейдите в сервис Cloud Registry.
- Выберите ранее созданный реестр.
- Перейдите на вкладку
Права доступа. - Нажмите Назначить роли.
- В открывшемся окне выберите сервисный аккаунт
docker-puller. - Нажмите
Добавить роль и выберите рольcloud-registry.artifacts.puller. - Нажмите Сохранить.
-
Создайте сервисный аккаунт:
yc iam service-account create --name docker-pullerРезультат:
id: ajelabcde12f******** folder_id: b0g12ga82bcv******** created_at: "2020-11-30T14:32:18.900092Z" name: docker-puller -
Назначьте роль
cloud-registry.artifacts.pullerсервисному аккаунту:yc cloud-registry registry add-access-binding <имя_или_идентификатор_реестра> \ --role cloud-registry.artifacts.puller \ --subject serviceAccount:<идентификатор_сервисного_аккаунта>Где
--subject— идентификатор сервисного аккаунтаdocker-puller.Результат:
...1s...done (5s)
- Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount.
- Чтобы назначить роль сервисному аккаунту на реестр, воспользуйтесь методом REST API updateAccessBindings для ресурса Registry.
Создайте авторизованный ключ сервисного аккаунта
Создайте авторизованный ключ для сервисного аккаунта docker-puller. Авторизованный ключ позволит сервисному аккаунту получать IAM-токен для аутентификации в API Yandex Cloud.
- Перейдите в сервис Identity and Access Management.
- В открывшемся списке выберите сервисный аккаунт
docker-puller. - На панели сверху нажмите
Создать новый ключ и выберитеСоздать авторизованный ключ. - Нажмите Создать.
- В открывшемся окне нажмите Скачать файл с ключами и нажмите Закрыть.
В результате на ваш компьютер скачается файл authorized_key.json, содержащий авторизованный ключ. Ключ понадобится позднее для настройки Docker на ВМ.
Выполните команду:
yc iam key create \
--service-account-name docker-puller \
-o authorized_key.json
Результат:
id: ajetn5b1efv2********
service_account_id: ajefbp899mcl********
created_at: "2025-12-17T04:57:16.241850455Z"
key_algorithm: RSA_2048
В результате на ваш компьютер скачается файл authorized_key.json, содержащий авторизованный ключ. Ключ понадобится позднее для настройки Docker на ВМ.
Воспользуйтесь методом REST API create для ресурса Key или вызовом gRPC API KeyService/Create.
Создайте облачную сеть и подсеть
Создайте облачную сеть и подсеть, в которой будет расположена ВМ.
- Перейдите в сервис Virtual Private Cloud.
- Нажмите Создать сеть.
- В поле Имя укажите
docker-ycr-network. - В поле Дополнительно отключите опцию Создать подсети.
- Нажмите Создать сеть.
- Выберите созданную сеть
docker-ycr-network. - Справа вверху нажмите
Создать подсеть. - В поле Имя укажите
docker-ycr-subnet-ru-central1-b. - В поле Зона доступности выберите зону доступности
ru-central1-b. - В поле CIDR укажите
192.168.1.0/24. - Нажмите Создать подсеть.
-
Создайте облачную сеть
docker-ycr-network:yc vpc network create docker-ycr-networkРезультат:
id: enp1gg8kr3pv******** folder_id: b1gt6g8ht345******** created_at: "2023-12-20T20:08:11Z" name: docker-ycr-network default_security_group_id: enppne4l2eg5********Подробнее о команде
yc vpc network createчитайте в справочнике CLI. -
Создайте подсеть в зоне доступности
ru-central1-b:yc vpc subnet create docker-ycr-subnet-ru-central1-b \ --zone ru-central1-b \ --network-name docker-ycr-network \ --range 192.168.1.0/24Результат:
id: e2li9tcgi7ii******** folder_id: b1gt6g8ht345******** created_at: "2023-12-20T20:11:16Z" name: docker-ycr-subnet-ru-central1-b network_id: enp1gg8kr3pv******** zone_id: ru-central1-b v4_cidr_blocks: - 192.168.1.0/24Подробнее о команде
yc vpc subnet createчитайте в справочнике CLI.
- Чтобы создать облачную сеть, воспользуйтесь методом REST API create или вызовом gRPC API NetworkService/Create.
- Чтобы создать подсеть, воспользуйтесь методом REST API create или вызовом gRPC API SubnetService/Create.
Создайте ВМ
Создайте ВМ с публичным IP-адресом и привяжите к ней созданный сервисный аккаунт.
-
Перейдите в сервис Compute Cloud.
-
Нажмите Создать виртуальную машину.
-
В блоке Образ загрузочного диска выберите один из образов и версию операционной системы на базе Linux.
-
В блоке Расположение выберите зону доступности, в которой будет создана ВМ.
-
В блоке Сетевые настройки:
- В поле Подсеть выберите ранее созданные сеть и подсеть.
- В поле Публичный IP-адрес оставьте значение Автоматически, чтобы назначить ВМ случайный внешний IP-адрес из пула Yandex Cloud.
-
В блоке Доступ укажите данные для доступа на ВМ:
- В поле Логин введите имя пользователя.
- В поле SSH-ключ вставьте содержимое файла открытого ключа.
-
В блоке Общая информация задайте имя ВМ:
docker-vm. -
В блоке Дополнительно выберите созданный сервисный аккаунт
docker-puller. -
Нажмите Создать ВМ.
Создайте ВМ в каталоге по умолчанию:
yc compute instance create \
--name docker-vm \
--zone ru-central1-b \
--network-interface subnet-name=docker-ycr-subnet-ru-central1-b,nat-ip-version=ipv4 \
--create-boot-disk image-folder-id=standard-images,image-family=ubuntu-2004-lts \
--ssh-key <путь_к_файлу_открытого_SSH-ключа> \
--service-account-name docker-puller
Где:
--name— имя ВМ.--zone— зона доступности, которая соответствует подсети.subnet-name— имя ранее созданной подсети.image-family— семейство образов.--ssh-key— путь до публичного SSH-ключа.--service-account-name— имя сервисного аккаунта.
Результат:
id: epd6kj8giu79********
folder_id: b1g681qpemb4********
created_at: "2025-12-12T16:14:50Z"
name: docker-vm
zone_id: ru-central1-b
platform_id: standard-v2
resources:
memory: "2147483648"
cores: "2"
core_fraction: "100"
status: RUNNING
metadata_options:
gce_http_endpoint: ENABLED
aws_v1_http_endpoint: ENABLED
gce_http_token: ENABLED
aws_v1_http_token: DISABLED
boot_disk:
mode: READ_WRITE
device_name: epdvqn83lud9********
auto_delete: true
disk_id: epdvqn83lud9********
network_interfaces:
- index: "0"
mac_address: d0:0d:**:**:**:**
subnet_id: e2l8hdblgki4********
primary_v4_address:
address: 192.168.1.7
one_to_one_nat:
address: 158.***.**.***
ip_version: IPV4
serial_port_settings:
ssh_authorization: OS_LOGIN
gpu_settings: {}
fqdn: epd6kj8giu79********.auto.internal
scheduling_policy: {}
service_account_id: ajes3g9rg94s********
network_settings:
type: STANDARD
placement_policy: {}
hardware_generation:
legacy_features:
pci_topology: PCI_TOPOLOGY_V2
application: {}
Воспользуйтесь методом REST API Create для ресурса Instance или вызовом gRPC API InstanceService/Create.
Соберите Docker-образ и загрузите в Cloud Registry
Соберите Docker-образ и загрузите его в реестр.
-
Аутентифицируйтесь в Cloud Registry.
-
Создайте файл Dockerfile:
echo "FROM ubuntu:latest" > Dockerfile echo "CMD echo 'Hello World'" >> Dockerfile -
Соберите Docker-образ:
docker build . -t registry.yandexcloud.net/<идентификатор_реестра>/ubuntu:helloГде
<идентификатор_реестра>— идентификатор созданного ранее реестра.Результат:
... Successfully built db45******** Successfully tagged registry.yandexcloud.net/cn1k31pgpovl********/ubuntu:hello -
Загрузите Docker-образ в реестр:
docker push registry.yandexcloud.net/<идентификатор_реестра>/ubuntu:helloРезультат:
e8bc********: Pushed hello: digest: sha256:96d... size: 529
Загрузите Docker-образ на ВМ
Настройте окружение на ВМ, скачайте Docker-образ и запустите его.
-
Подключитесь к ВМ по SSH.
-
Установите CLI и перезапустите терминал:
curl -sSL https://storage.yandexcloud.net/yandexcloud-yc/install.sh | bash exec -l $SHELL -
Создайте файл
key.jsonи скопируйте в него содержимое файла авторизованного ключа сервисного аккаунтаdocker-puller:sudo nano key.json -
Настройте CLI для сервисного аккаунта:
yc config profile create docker-puller yc config set service-account-key key.json yc config set folder-id <идентификатор_каталога>В качестве
folder-idукажите идентификатор каталога, в котором находится реестр.Результат:
Profile 'docker-puller' created and activated -
Установите Docker:
sudo apt update sudo apt install docker.io -
Добавьте текущего пользователя в группу
dockerи отключитесь от ВМ:sudo usermod -aG docker $USER exit -
Заново подключитесь к ВМ по SSH.
-
Настройте Docker:
mkdir -p ~/.docker cat > ~/.docker/config.json <<'EOF' { "credHelpers": { "registry.yandexcloud.net": "yc" } } EOF sudo tee /usr/local/bin/docker-credential-yc >/dev/null <<'EOF' #!/usr/bin/env bash exec yc cloud-registry docker-credential "$@" EOF sudo chmod +x /usr/local/bin/docker-credential-yc -
Загрузите Docker-образ на ВМ:
docker pull registry.yandexcloud.net/<идентификатор_реестра>/ubuntu:helloРезультат:
hello: Pulling from cn191rncdrhd********/ubuntu 02de********: Pull complete Digest: sha256:96d... Status: Downloaded newer image for registry.yandexcloud.net/cn191rncdrhd********/ubuntu:hello registry.yandexcloud.net/cn191rncdrhd********/ubuntu:hello -
Запустите Docker-образ:
docker run registry.yandexcloud.net/<идентификатор_реестра>/ubuntu:helloРезультат:
Hello World
Как удалить созданные ресурсы
Чтобы не платить за ресурсы, которые вам больше не нужны, удалите их:
- Удалите ВМ.
- Удалите статический публичный IP-адрес, если вы его зарезервировали.
- Удалите сеть и подсети.
- Удалите Docker-образ из реестра.
- Удалите реестр.