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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройте окружениеНастройте окружение

  1. Установите интерфейс командной строки Yandex Cloud.
  2. Подготовьте SSH-ключ для доступа к ВМ.
  3. Создайте реестр в Container Registry и загрузите в него Docker-образ для тестирования.
  4. Установите и настройте Docker.

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

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

    Консоль управления
    CLI
    API
    1. В консоли управления выберите каталог, в котором вы хотите создать сервисный аккаунт.
    2. В списке сервисов выберите Identity and Access Management.
    3. Нажмите кнопку Создать сервисный аккаунт.
    4. Введите имя сервисного аккаунта и нажмите кнопку Создать.
    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 <имя_сервисного_аккаунта>
      

      Результат:

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

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

      Где:

      • <имя_сервиса> — имя сервиса container.
      • <ресурс> — категория ресурса registry.
      • <имя_или_идентификатор_ресурса> — имя или идентификатор ресурса, на который назначается роль.
      • --role — идентификатор роли container-registry.images.puller.
      • --subject — идентификатор сервисного аккаунта (например: ajelabcde12f********), которому назначается роль.
    1. Чтобы создать сервисный аккаунт, воспользуйтесь методом ServiceAccountService/Create gRPC API или методом create для ресурса ServiceAccount REST API.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Примечание

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

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

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

  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.

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

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

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

    • Инструкция для пользователя с аккаунтом на Яндексе.
    • Инструкция для сервисного аккаунта.
  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

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

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

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

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

    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 не надо.

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

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

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

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

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

    Результат:

    ...
    Successfully built b68ee9b6b1af
    Successfully tagged cr.yandex/crpmnjr98tm5********/ubuntu:hello
    
  7. Загрузите собранный 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. Пройдите аутентификацию от имени сервисного аккаунта, привязанного к этой машине:

    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
    
  3. Скачайте 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

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

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

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

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

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

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

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