Creating a VM from a Container Optimized Image with 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 MongoDB running and a 10 GB volume attached.
Getting started
If the Docker image you need is stored in Yandex Container Registry, create a service account with the container-registry.images.puller role for the registry in question. Your Container Optimized Image VM will use this account to pull the Docker image from the registry.
Create a VM from a Container Optimized Image, with an additional Docker container volume
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 specify a different folder for any command using --folder-name or --folder-id. If you access a resource by its name, the search will be limited to the default folder. If you access a resource by its ID, the search will be global, i.e., through all folders based on access permissions.
-
See the description of the CLI command for creating a VM:
yc compute instance create-with-container --help -
Set up a 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 you create a VM via 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 properties.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 properties:subnet-name: Name of the subnet the VM will reside in.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.