Creating a VM from a Container Optimized Image with multiple Docker containers
In this tutorial, you'll create a VM that contains multiple Docker containers from a Container Optimized Image. A VM is created based on the Docker Compose specification.
Before you start
If the required Docker image is pushed to Yandex Container Registry, create a service account with the container-registry.images.puller role for the registry in use. A VM with a Container Optimized Image pulls the Docker image from the registry on behalf of this account.
Create a VM with multiple Docker containers
If you don't have the Yandex Cloud command line interface yet, install and initialize it.
The folder specified in the CLI profile is used by default. You can specify a different folder using the --folder-name
or --folder-id
parameter.
To create a VM with multiple Docker containers from a Container Optimized Image:
-
View a description of the CLI command to create a VM from a Container Optimized Image:
yc compute instance create-with-container --help
-
Create a Docker container specification. Save the following data to a file named
docker-compose.yaml
:version: '3.7' services: app1: container_name: nginx image: "nginx" ports: - "80:80" restart: always app2: container_name: redis image: "redis" restart: always
-
Create a VM with multiple Docker containers:
yc compute instance create-with-container \ --name my-vm \ --zone ru-central1-a \ --ssh-key ssh-key.pub \ --network-interface subnet-name=<subnet name>,nat-ip-version=ipv4 \ --service-account-name default-sa \ --docker-compose-file docker-compose.yaml
Where:
--name
: VM name.--zone
: Availability zone.--ssh-key
: Contents of the public key file.--network-interface
: VM network settings.--service-account-name
: Service account name.--docker-compose-file
: YAML file with the container specification.
After being created, the VM will appear in the VM list under Compute Cloud in the management console.
-
Check the results.
-
View a list of running Docker containers:
sudo docker ps -a
Result:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c79b1cdc5a3a nginx "nginx -g 'daemon of…" 16 seconds ago Up 14 seconds 0.0.0.0:80->80/tcp nginx 3ac5a9844a5d redis "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 6379/tcp redis