Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Истории успеха
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Истории успеха
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Архитектура и защита базового интернет-сервиса
    • Анализ поресурсной детализации расходов с помощью Object Storage
      • Начало работы с Terraform
      • Источники данных Terraform
      • Загрузка состояний Terraform в Object Storage
      • Начало работы с Packer
      • Сборка образа ВМ с набором инфраструктурных инструментов с помощью Packer
      • Блокировка состояний Terraform с помощью Managed Service for YDB
      • Использование модулей Yandex Cloud в Terraform
      • Управление ресурсами Kubernetes с помощью провайдера Terraform
      • Создать ВМ и группу ВМ с Container Optimized Image с помощью Terraform
        • Обзор
        • Консоль управления, CLI и API
        • Terraform
      • Передача логов через HTTP-вход Unified Agent в Cloud Logging
      • Запуск языковой модели DeepSeek-R1 в кластере GPU Compute Cloud

В этой статье:

  • Подготовьте облако к работе
  • Необходимые платные ресурсы
  • Создайте пару ключей SSH
  • Установите и настройте Docker
  • Создайте реестр Container Registry
  • Создайте сервисный аккаунт
  • Создайте виртуальную машину Compute Cloud
  • Соберите и загрузите Docker-образ в Container Registry
  • Загрузите Docker-образ на ВМ
  • Проверьте результат
  • Как удалить созданные ресурсы
  • См. также
  1. Базовая инфраструктура
  2. Инструменты
  3. Запуск Docker-образа на виртуальной машине
  4. Консоль управления, CLI и API

Запуск Docker-образа на виртуальной машине с помощью консоли управления, CLI и API

Статья создана
Yandex Cloud
Улучшена
Обновлена 18 июня 2025 г.
  • Подготовьте облако к работе
    • Необходимые платные ресурсы
    • Создайте пару ключей SSH
    • Установите и настройте Docker
  • Создайте реестр Container Registry
  • Создайте сервисный аккаунт
  • Создайте виртуальную машину Compute Cloud
  • Соберите и загрузите Docker-образ в Container Registry
  • Загрузите Docker-образ на ВМ
  • Проверьте результат
  • Как удалить созданные ресурсы
  • См. также

Чтобы запустить Docker-образ на ВМ с использованием реестра Yandex Container Registry, выполните следующие шаги:

  1. Подготовьте облако к работе.
  2. Создайте реестр Container Registry.
  3. Создайте сервисный аккаунт.
  4. Создайте ВМ Compute Cloud.
  5. Соберите и загрузите Docker-образ в Container Registry.
  6. Загрузите Docker-образ на ВМ.
  7. Проверьте результат.

Если созданные ресурсы вам больше не нужны, удалите их.

Подготовьте облако к работеПодготовьте облако к работе

Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:

  1. Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь.
  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.

Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.

Подробнее об облаках и каталогах.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки инфраструктуры входят:

  • плата за постоянно запущенную ВМ (см. тарифы Yandex Compute Cloud);
  • плата за использование динамического или статического публичного IP-адреса (см. тарифы Yandex Virtual Private Cloud);
  • плата за хранение Docker-образа в реестре и исходящий трафик (см. тарифы Yandex Container Registry).

Создайте пару ключей SSHСоздайте пару ключей SSH

Подготовьте SSH-ключ для доступа к ВМ.

Linux/macOS
Windows 10/11
Windows 7/8
  1. Откройте терминал.

  2. Создайте новый ключ с помощью команды ssh-keygen:

    ssh-keygen -t ed25519 -C "<опциональный_комментарий>"
    

    Вы можете передать в параметре -C пустую строку, чтобы не добавлять комментарий, или не указывать параметр -C вообще — в таком случае будет добавлен комментарий по умолчанию.

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

    По умолчанию команда предлагает сохранить ключ под именем id_ed25519 в директории /home/<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именем id_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.

Если у вас еще не установлен OpenSSH, установите его по инструкции.

  1. Запустите cmd.exe или powershell.exe (предварительно обновите PowerShell).

  2. Создайте новый ключ с помощью команды ssh-keygen:

    ssh-keygen -t ed25519 -C "<опциональный_комментарий>"
    

    Вы можете передать в параметре -C пустую строку, чтобы не добавлять комментарий, или не указывать параметр -C вообще — в таком случае будет добавлен комментарий по умолчанию.

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

    По умолчанию команда предлагает сохранить ключ под именем id_ed25519 в папку C:\Users\<имя_пользователя>/.ssh. Если в этой директории уже есть SSH-ключ с именем id_ed25519, вы можете случайно перезаписать его и потерять доступ к ресурсам, в которых он используется. Поэтому рекомендуется использовать уникальные имена для всех SSH-ключей.

Создайте ключи с помощью приложения PuTTY:

  1. Скачайте и установите PuTTY.

  2. Добавьте папку с PuTTY в переменную PATH:

    1. Нажмите кнопку Пуск и в строке поиска Windows введите Изменение системных переменных среды.
    2. Справа снизу нажмите кнопку Переменные среды....
    3. В открывшемся окне найдите параметр PATH и нажмите Изменить.
    4. Добавьте путь к папке в список.
    5. Нажмите кнопку ОК.
  3. Запустите приложение PuTTYgen.

  4. В качестве типа генерируемой пары выберите EdDSA. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.

    ssh_generate_key

  5. В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.

  6. Нажмите кнопку Save private key и сохраните закрытый ключ. Никому не сообщайте ключевую фразу от него.

  7. Нажмите кнопку Save public key и сохраните открытый ключ в файле <имя_ключа>.pub.

Важно

Надежно сохраните закрытый ключ: без него подключиться к ВМ будет невозможно.

Установите и настройте DockerУстановите и настройте Docker

Linux
macOS
Windows
  1. Установите Docker Engine. Воспользуйтесь инструкцией по установке и запуску Docker для вашей операционной системы.

  2. После завершения установки добавьте текущего пользователя в группу docker:

    sudo groupadd docker
    sudo usermod -aG docker $USER
    newgrp docker
    

Информацию о дополнительных настройках Docker в OS Linux см. в документации разработчика.

Если вы работаете на компьютере с графическим интерфейсом, вы также можете установить Docker Desktop для Linux.

Скачайте и установите дистрибутив Docker Desktop для macOS. Подробную информацию см. в документации разработчика.

  1. Скачайте и установите дистрибутив Docker Desktop для Windows.

  2. После завершения установки добавьте текущего пользователя в группу docker-users:

    1. От имени администратора откройте оснастку Управление компьютером:

      compmgmt.msc
      
    2. Раскройте меню Управление компьютером (локальным) → Служебные программы → Локальные пользователи и группы → Группы и откройте группу docker-users.

    3. Нажмите кнопку Добавить и добавьте нужного пользователя в группу.

    4. Нажмите ОК.

  3. Запустите Docker Desktop и убедитесь, что статус приложения — running.

Информацию о дополнительных настройках Docker в OS Windows см. в документации разработчика.

Создайте реестр Container RegistryСоздайте реестр Container Registry

Создайте реестр в Container Registry.

Консоль управления
CLI
API
  1. В консоли управления выберите каталог, в котором будет создан реестр.

  2. В списке сервисов выберите Container Registry.

  3. Нажмите кнопку Создать реестр.

  4. Задайте имя реестра. Требования к имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.
  5. (Опционально) В блоке Автоматическое сканирование:

    • Отключите опцию Сканировать Docker-образы при загрузке, чтобы не сканировать Docker-образы при загрузке в репозиторий.

    • Отключите опцию Сканировать все Docker-образы в реестре или настройте периодичность сканирования.

      Важно

      Автоматическое сканирование Docker-образов повышает безопасность реестра. Настройки сканирования уязвимостей по умолчанию соответствуют Стандарту по защите облачной инфраструктуры Yandex Cloud.

  6. (Опционально) Добавьте метки.

  7. Нажмите кнопку Создать реестр.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

  1. Убедитесь, что в каталоге еще не создан реестр:

    yc container registry list
    

    Результат:

    +----+------+-----------+
    | ID | NAME | FOLDER ID |
    +----+------+-----------+
    +----+------+-----------+
    

    Если в каталоге уже есть реестр, посмотрите, как можно его изменить, в разделе Изменить реестр.

  2. Создайте реестр:

    • с автоматическим сканированием уязвимостей:

      yc container registry create --name my-reg --secure
      

      Важно

      Автоматическое сканирование Docker-образов повышает безопасность реестра. Настройки сканирования уязвимостей по умолчанию соответствуют Стандарту по защите облачной инфраструктуры Yandex Cloud.

    • без автоматического сканирования уязвимостей:

      yc container registry create --name my-reg
      

    Результат:

    done
    id: crpd50616s9a********
    folder_id: b1g88tflru0e********
    name: my-reg
    status: ACTIVE
    created_at: "2019-01-09T14:34:06.601Z"
    

    Требования к имени реестра:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.

    Параметр --name необязательный, можно создать реестр без имени и обращаться к нему по идентификатору. Поле name пользовательское, оно используется при листинге в Yandex Cloud CLI и не используется в Docker CLI.

  3. Проверьте, что реестр создался:

    yc container registry list
    

    Результат:

    +----------------------+--------+----------------------+
    |          ID          |  NAME  |      FOLDER ID       |
    +----------------------+--------+----------------------+
    | crpd50616s9a******** | my-reg | b1g88tflru0e******** |
    +----------------------+--------+----------------------+
    

Чтобы создать реестр, воспользуйтесь методом create для ресурса Registry.

Создайте сервисный аккаунтСоздайте сервисный аккаунт

Создайте сервисный аккаунт и назначьте ему роль container-registry.images.puller на реестр, созданный ранее:

Консоль управления
CLI
API
  1. В консоли управления выберите каталог, в котором вы хотите создать сервисный аккаунт.
  2. В верхней части экрана перейдите на вкладку Сервисные аккаунты.
  3. Нажмите кнопку Создать сервисный аккаунт.
  4. Введите имя сервисного аккаунта images-puller и нажмите кнопку Создать.
  5. В верхней части экрана перейдите на вкладку Дашборд каталога.
  6. В списке сервисов выберите Container Registry.
  7. Выберите реестр и нажмите на строку с его именем.
  8. Перейдите на вкладку Права доступа.
  9. В правом верхнем углу нажмите кнопку Назначить роли.
  10. Нажмите кнопку Выбрать пользователя и добавьте сервисный аккаунт, указав его идентификатор.
  11. Нажмите Добавить роль и выберите роль container-registry.images.puller.
  12. Нажмите кнопку Сохранить.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

  1. Посмотрите описание команды CLI для создания сервисного аккаунта:

    yc iam service-account create --help
    
  2. Создайте сервисный аккаунт:

    По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

    yc iam service-account create --name images-puller
    

    Результат:

    id: ajelabcde12f********
    folder_id: b0g12ga82bcv********
    created_at: "2020-11-30T14:32:18.900092Z"
    name: myservice-acc
    
  3. Назначьте роль container-registry.images.puller сервисному аккаунту:

    yc container registry add-access-binding <имя_или_идентификатор_реестра> \
      --role container-registry.images.puller \
      --subject serviceAccount:<идентификатор_сервисного_аккаунта>
    

    Где --subject — идентификатор сервисного аккаунта (например: ajelabcde12f********), которому назначается роль.

  1. Чтобы создать сервисный аккаунт, воспользуйтесь методом REST API create для ресурса ServiceAccount или вызовом gRPC API ServiceAccountService/Create.

  2. Чтобы назначить роль сервисному аккаунту на реестр, воспользуйтесь методом REST API updateAccessBindings для ресурса Registry или вызовом gRPC API RegistryService/UpdateAccessBindings.

Создайте виртуальную машину Compute CloudСоздайте виртуальную машину Compute Cloud

Создайте ВМ с публичным IP-адресом и привяжите к ней созданный сервисный аккаунт:

Консоль управления
CLI
API
  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. Выберите вариант Расширенная настройка.

  3. В блоке Образ загрузочного диска выберите один из образов и версию операционной системы на базе Linux.

  4. В блоке Расположение выберите зону доступности, в которой будет создана ВМ. Если вы не знаете, какая зона доступности вам нужна, оставьте выбранную по умолчанию.

  5. (Опционально) В блоке Диски и файловые хранилища задайте нужный тип и размер загрузочного диска.

    Если вы хотите добавить на ВМ новый дополнительный диск или подключить существующий, нажмите кнопку Добавить.

    Также вы можете создать ВМ из существующего диска.

  6. В блоке Сетевые настройки:

    • В поле Подсеть выберите сеть и подсеть, к которым нужно подключить ВМ. Если нужной сети или подсети еще нет, создайте их.
    • В поле Публичный IP-адрес оставьте значение Автоматически, чтобы назначить ВМ случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее. Чтобы не назначать публичный IP-адрес, выберите Без адреса.
    • При необходимости разверните блок Дополнительно и включите защиту от DDoS-атак.
  7. В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа на ВМ:

    • В поле Логин введите имя пользователя. Не используйте имя root или другие имена, зарезервированные ОС. Для выполнения операций, требующих прав суперпользователя, используйте команду sudo.
    • В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.

      Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:

      • Нажмите кнопку Добавить ключ.
      • Задайте имя SSH-ключа.
      • Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
      • Нажмите кнопку Добавить.

      SSH-ключ будет добавлен в ваш профиль пользователя организации.

      Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.

  8. В блоке Общая информация задайте имя ВМ. Требования к имени:

    • длина — от 2 до 63 символов;
    • может содержать строчные буквы латинского алфавита, цифры и дефисы;
    • первый символ — буква, последний — не дефис.

    Примечание

    Имя виртуальной машины используется для генерации внутреннего FQDN единожды — при создании ВМ. Если для вас важен внутренний FQDN, учитывайте это и задавайте нужное имя ВМ при создании.

  9. В блоке Дополнительно выберите созданный на предыдущем шаге сервисный аккаунт.

  10. Нажмите кнопку Создать ВМ.

  1. Посмотрите описание команды CLI для создания ВМ:

    yc compute instance create --help
    
  2. Подготовьте пару ключей (открытый и закрытый) для SSH-доступа на ВМ.

  3. Выберите в Cloud Marketplace один из публичных образов на базе операционной системы Linux (например, CentOS 7).

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

    yc compute image list --folder-id standard-images
    

    Результат:

    +----------------------+-------------------------------------+--------------------------+----------------------+--------+
    |          ID          |                NAME                 |          FAMILY          |     PRODUCT IDS      | STATUS |
    +----------------------+-------------------------------------+--------------------------+----------------------+--------+
    ...
    | fdvk34al8k5n******** | centos-7-1549279494                 | centos-7                 | dqni65lfhvv2******** | READY  |
    | fdv7ooobjfl3******** | windows-2016-gvlk-1548913814        | windows-2016-gvlk        | dqnnc72gj2is******** | READY  |
    | fdv4f5kv5cvf******** | ubuntu-1604-lts-1549457823          | ubuntu-1604-lts          | dqnnb6dc7640******** | READY  |
    ...
    +----------------------+-------------------------------------+--------------------------+----------------------+--------+
    

    Где:

    • ID — идентификатор образа.

    • NAME — имя образа.

    • FAMILY — идентификатор семейства образов, к которому относится образ.

    • PRODUCT IDS — идентификаторы продуктов Yandex Cloud Marketplace, связанных с образом.

    • STATUS — текущий статус образа. Может принимать одно из значений:

      • STATUS_UNSPECIFIED — статус образа не определен.
      • CREATING — образ в процессе создания.
      • READY — образ готов к использованию.
      • ERROR — образ нельзя использовать из-за возникшей с ним проблемы.
      • DELETING — образ в процессе удаления.
  4. Посмотрите список доступных подсетей:

    yc vpc subnet list
    

    Результат:

    +----------------------+---------------------------+----------------------+----------------+-------------------+-----------------+
    |          ID          |           NAME            |      NETWORK ID      | ROUTE TABLE ID |       ZONE        |      RANGE      |
    +----------------------+---------------------------+----------------------+----------------+-------------------+-----------------+
    | b0c6n43f9lgh******** | default-ru-central1-d     | enpe3m3fa00u******** |                | ru-central1-d     | [10.130.0.0/24] |
    | e2l2da8a20b3******** | default-ru-central1-b     | enpe3m3fa00u******** |                | ru-central1-b     | [10.129.0.0/24] |
    | e9bnlm18l70a******** | default-ru-central1-a     | enpe3m3fa00u******** |                | ru-central1-a     | [10.128.0.0/24] |
    +----------------------+---------------------------+----------------------+----------------+-------------------+-----------------+
    
  5. Создайте ВМ в каталоге по умолчанию:

    yc compute instance create \
      --name first-instance \
      --zone ru-central1-b \
      --network-interface subnet-name=default-ru-central1-b,nat-ip-version=ipv4 \
      --create-boot-disk image-folder-id=standard-images,image-family=centos-7 \
      --ssh-key ~/.ssh/id_ed25519.pub
      --service-account-name service-acc
    

    Где:

    • --name — имя ВМ.

      Примечание

      Имя виртуальной машины используется для генерации внутреннего FQDN единожды — при создании ВМ. Если для вас важен внутренний FQDN, учитывайте это и задавайте нужное имя ВМ при создании.

    • --zone — зона доступности, которая соответствует выбранной подсети.

    • subnet-name — имя выбранной подсети.

    • image-family — семейство образов, например centos-7. Эта опция позволит установить последнюю версию операционной системы из указанного семейства.

    • Публичный IP. Чтобы создать ВМ без публичного IP, исключите опцию nat-ip-version=ipv4.

    • --ssh-key — путь до публичного SSH-ключа. Для этого ключа на ВМ будет автоматически создан пользователь yc-user.

    • --service-account-name — имя сервисного аккаунта, созданного на предыдущем шаге.

    В результате будет создана ВМ first-instance.

Создайте ВМ с помощью метода REST API Create для ресурса Instance:

  1. Подготовьте пару ключей (открытый и закрытый) для SSH-доступа на ВМ.

  2. Получите Yandex Identity and Access Management-токен, используемый для аутентификации в примерах:

    • Инструкция для пользователя с аккаунтом на Яндексе.
    • Инструкция для сервисного аккаунта.
  3. Получите идентификатор каталога.

  4. Получите информацию об образе, из которого надо создать ВМ (идентификатор образа и минимальный размер диска):

    • Если вы знаете семейство образа, получите информации о последнем образе в этом семействе:

      export IAM_TOKEN=CggaATEVAgA...
      export FAMILY=ubuntu-1804
      curl --header "Authorization: Bearer ${IAM_TOKEN}" \
        "https://compute.api.cloud.yandex.net/compute/v1/images:latestByFamily?folderId=standard-images&family=${FAMILY}"
      
    • Вы можете получить информацию об образе из списка публичных образов.

  5. Получите идентификатор подсети и идентификатор зоны доступности. В запросе укажите идентификатор каталога, в котором создана подсеть:

    export IAM_TOKEN=CggaATEVAgA...
    export FOLDER_ID=b1gvmob95yys********
    curl --header "Authorization: Bearer ${IAM_TOKEN}" \
      "https://vpc.api.cloud.yandex.net/vpc/v1/subnets?folderId=${FOLDER_ID}"
    {
      "subnets": [
        {
          "v4CidrBlocks": [
            "10.130.0.0/24"
          ],
        "id": "b0c6n43ftldh********",
        "folderId": "b1gvmob95yys********",
        "createdAt": "2018-09-23T12:15:00Z",
        "name": "default-ru-central1-b",
        "description": "Auto-created default subnet for zone ru-central1-b",
        "networkId": "enpe3m3faglu********",
        "zoneId": "ru-central1-b"
      },
      ...
      ]}
    
  6. Создайте файл с телом запроса на создание ВМ, например body.json:

    {
      "folderId": "b1gvmob95yys********",
      "name": "instance-demo-no-pwauth",
      "zoneId": "ru-central1-b",
      "platformId": "standard-v3",
      "resourcesSpec": {
        "memory": "2147483648",
        "cores": "2"
      },
      "metadata": {
        "user-data": "#cloud-config\nusers:\n  - name: user\n    groups: sudo\n    shell: /bin/bash\n    sudo: 'ALL=(ALL) NOPASSWD:ALL'\n    ssh_authorized_keys:\n      - ssh-ed25519 AAAAB3N... user@example.com"
      },
      "bootDiskSpec": {
        "diskSpec": {
          "size": "2621440000",
          "imageId": "fd8rc75pn12f********"
        }
      },
      "networkInterfaceSpecs": [
        {
          "subnetId": "b0c6n43ftldh********",
          "primaryV4AddressSpec": {
            "oneToOneNatSpec": {
              "ipVersion": "IPV4"
            }
          }
        }
      ],
      "serviceAccountId": "ajelabcde12f********"
    }
    

    Где:

    • folderId — идентификатор каталога.

    • name — имя, которое будет присвоено ВМ при создании.

    • zoneId — зона доступности, которая соответствует выбранной подсети.

    • platformId — платформа.

    • resourceSpec — ресурсы, доступные ВМ. Значения должны соответствовать выбранной платформе.

    • metadata — в метаданных необходимо передать открытый ключ для SSH-доступа на ВМ. Подробнее в разделе Метаданные виртуальной машины.

    • bootDiskSpec — настройки загрузочного диска. Укажите идентификатор выбранного образа и размер диска. Размер диска должен быть не меньше минимального размера диска, указанного в информации об образе.

    • networkInterfaceSpecs — настройки сети:

      • subnetId — идентификатор выбранной подсети.

      • primaryV4AddressSpec — IP-адрес, который будет присвоен ВМ. Чтобы добавить публичный IP-адрес ВМ, укажите:

        "primaryV4AddressSpec": {
          "oneToOneNatSpec": {
            "ipVersion": "IPV4"
          }
        }
        
    • serviceAccountId — идентификатор созданного на предыдущем шаге сервисного аккаунта.

    Подробнее про формат тела запроса в справочнике API.

  7. Создайте ВМ:

    export IAM_TOKEN=CggaATEVAgA...
    curl --request POST \
      --header "Content-Type: application/json" \
      --header "Authorization: Bearer ${IAM_TOKEN}" \
      --data '@body.json' \
      https://compute.api.cloud.yandex.net/compute/v1/instances
    

После создания ВМ соберите и загрузите Docker-образ в Container Registry.

Соберите и загрузите Docker-образ в Container RegistryСоберите и загрузите Docker-образ в Container Registry

Пример ниже разработан для выполнения в операционных системах MacOS и Linux. Чтобы выполнить его в системе Windows, ознакомьтесь с особенностями работы с Bash в Microsoft Windows.

  1. Откройте терминал.

  2. Для удобства выполнения команд добавьте переменные:

    • Имя пользователя и публичный IP-адрес вашей ВМ — в переменную ${PUBLIC_IP}:

      export PUBLIC_IP=<имя_пользователя>@<публичный_IP-адрес_ВМ>
      
    • Идентификатор реестра, созданного ранее, в формате crpc9qeoft23******** — в переменную ${REGISTRY_ID}:

      export REGISTRY_ID=<идентификатор_реестра>
      
  3. Аутентифицируйтесь от своего имени:

    OAuth-токен
    IAM-токен
    Docker Credential helper
    1. Если у вас еще нет OAuth-токена, получите его по ссылке.

    2. Выполните команду:

      echo <OAuth-токен> | docker login --username oauth --password-stdin cr.yandex
      

      Результат:

      Login Succeeded
      

    Примечание

    У IAM-токена короткое время жизни — не более 12 часов. Поэтому такой способ подойдет для приложений, которые будут запрашивать IAM-токен автоматически.

    1. Получите IAM-токен.

    2. Выполните команду:

      yc iam create-token | docker login --username iam --password-stdin cr.yandex
      

      Результат:

      ...
      Login Succeeded
      
    1. Если у вас еще нет профиля для CLI, создайте его.

    2. Сконфигурируйте Docker для использования docker-credential-yc:

      yc container registry configure-docker
      

      Результат:

      Credential helper is configured in '/home/<user>/.docker/config.json'
      

      Настройки сохраняются в профиле текущего пользователя.

      Важно

      Credential helper работает только при использовании Docker без sudo. О том, как настроить запуск Docker от имени текущего пользователя без использования sudo читайте в официальной документации.

    3. Проверьте, что Docker сконфигурирован.

      В конфигурационном файле /home/<user>/.docker/config.json должна появиться строка:

      "cr.yandex": "yc"
      
    4. Docker готов к использованию, например, для загрузки Docker-образов. При этом выполнять команду docker login не надо.

  4. Создайте файл Dockerfile:

    touch .dockerfile
    
  5. Откройте Dockerfile текстовым редактором, например:

    nano .dockerfile
    
  6. Добавьте туда следующие строки:

    FROM ubuntu:latest
    CMD echo "Hi, I'm inside"
    
  7. Соберите Docker-образ:

    docker build . -t cr.yandex/${REGISTRY_ID}/ubuntu:hello -f .dockerfile
    

    Результат:

    ...
    Successfully built b68ee9b6b1af
    Successfully tagged cr.yandex/crpmnjr98tm5********/ubuntu:hello
    
  8. Загрузите собранный Docker-образ в Container Registry:

    docker push cr.yandex/${REGISTRY_ID}/ubuntu:hello
    

    Результат:

    The push refers to repository [cr.yandex/crpc9qeoft23********/ubuntu]
    cc9d18e90faa: Pushed
    0c2689e3f920: Pushed
    47dde53750b4: Pushed
    hello: digest: sha256:42068479274f1d4c7ea095482430dcba24dcfe8c23ebdf6d32305928******** size: 943
    

Загрузите Docker-образ на ВМЗагрузите Docker-образ на ВМ

  1. Подключитесь по SSH к ВМ.

  2. Установите и настройте Docker на ВМ.

  3. Пройдите аутентификацию от имени сервисного аккаунта, привязанного к этой машине:

    curl --header Metadata-Flavor:Google 169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token | \
    cut -f1 -d',' | \
    cut -f2 -d':' | \
    tr -d '"' | \
    docker login --username iam --password-stdin cr.yandex
    

    Результат:

    Login Succeeded
    
  4. Для удобства выполнения команд добавьте идентификатор реестра, созданного ранее, в переменную ${REGISTRY_ID}:

    export REGISTRY_ID=<идентификатор_реестра>
    
  5. Скачайте Docker-образ на ВМ:

    docker pull cr.yandex/${REGISTRY_ID}/ubuntu:hello
    

    Результат:

    hello: Pulling from crpc9qeoft23********/ubuntu
    6a5697faee43: Pulling fs layer
    ba13d3bc422b: Pulling fs layer
    ...
    Digest: sha256:42068479274f1d4c7ea095482430dcba24dcfe8c23ebdf6d32305928********
    Status: Downloaded newer image for cr.yandex/crpc9qeoft23********/ubuntu:hello
    cr.yandex/crpc9qeoft23********/ubuntu:hello
    

Проверьте результатПроверьте результат

На ВМ запустите Docker-образ:

docker run cr.yandex/${REGISTRY_ID}/ubuntu:hello

Результат:

Hi, I'm inside

Как удалить созданные ресурсыКак удалить созданные ресурсы

Чтобы перестать платить за созданные ресурсы:

  1. Удалите ВМ.
  2. Удалите статический публичный IP-адрес, если вы его зарезервировали.
  3. Удалите Docker-образ.
  4. Удалите реестр.

См. такжеСм. также

  • Запуск Docker-образа на виртуальной машине с помощью Terraform

Была ли статья полезна?

Предыдущая
Обзор
Следующая
Terraform
Проект Яндекса
© 2025 ООО «Яндекс.Облако»