Creating a VM from a Container Optimized Image and an additional volume for a Docker container
In this tutorial, you will create a VM from a Container Optimized Image that contains a Docker container with a running MongoDB instance and an additional volume of 10 GB.
Getting started
If the required Docker image has been pushed to Yandex Container Registry, create a service account with the container-registry.images.puller role for the registry in use. A Container Optimized Image VM will pull the Docker image from the registry under this account.
Create a VM from a Container Optimized Image with an additional volume for a Docker container
If you do not have the Yandex Cloud CLI yet, install and initialize it.
The folder used by default is the one specified when creating the CLI profile. To change the default folder, use the yc config set folder-id <folder_ID> command. You can also set a different folder for any specific command using the --folder-name or --folder-id options.
-
View the description of the CLI command to create a VM:
yc compute instance create-with-container --help -
Prepare the Docker Compose specification. Save the following data to the
docker-compose.yamlfile:version: '3.4' services: app2: container_name: container-name image: "mongo:latest" ports: - "27017:27017" restart: always volumes: - /home/yc-user/coi-data:/data x-yc-disks: - device_name: coi-data fs_type: ext4 host_path: /home/yc-user/coi-dataWhen creating a VM through the CLI, the system creates a default user:
yc-user. -
Create a VM with multiple disks:
yc compute instance create-with-container \ --name coi-vm \ --zone ru-central1-a \ --create-boot-disk size=30 \ --create-disk name=data-disk,size=10,device-name=coi-data \ --network-interface subnet-name=<subnet_name>,nat-ip-version=ipv4 \ --ssh-key <path_to_SSH_key_public_part> \ --service-account-name <service_account_name> \ --docker-compose-file docker-compose.yamlWhere:
-
--name: VM name. -
--zone: Availability zone. -
--create-boot-disk: VM disk parameters.To get the minimum boot disk size required for installing an image, run this command:
yc compute image get-latest-from-family container-optimized-image --folder-id standard-imagesif you are installing a Container Optimized Image.yc compute image get-latest-from-family container-optimized-image-gpu --folder-id standard-imagesif you are installing a GPU Container Optimized Image.
You can find the minimum boot disk size in the
min_disk_sizeproperty. -
--network-interface: Network parameters:subnet-name: Name of the subnet where the VM will reside.nat-ip-version: Public IPv4 address assignment method.
-
--ssh-key: Path to the public key file. -
--service-account-name: Name of the service account you created earlier. -
--docker-compose-file: YAML container specification file.
Once created, the VM will appear in the VM list under Compute Cloud in the management console
. -
-
Check the result.
-
Get the ID of the running Docker container:
sudo docker ps -aResult:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1f71******** mongo:latest "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 27017/tcp container-name -
Connect to the running Docker container:
sudo docker exec -it 1f71******** bash -
See the list of attached disks. Note the mounted
/dev/vdb 11G 24M 9.9G 1% /datadisk:df -HResult:
Filesystem Size Used Avail Use% Mounted on overlay 32G 4.0G 27G 14% / tmpfs 68M 0 68M 0% /dev ... tmpfs 1.1G 0 1.1G 0% /proc/acpi tmpfs 1.1G 0 1.1G 0% /proc/scsi tmpfs 1.1G 0 1.1G 0% /sys/firmware
For more information about working with VMs, see our step-by-step guides.