'How to spawn a docker container in a remote machine

Is it possible, using the docker SDK for Python, to launch a container in a remote machine?

import docker
client = docker.from_env()

client.containers.run("bfirsh/reticulate-splines", detach=True)
# I'd like to run this container ^^^ in a machine that I have ssh access to.

Going through the documentation it seems like this type of management is out of scope for said SDK, so searching online I got hints that the kubernetes client for Python could be of help, but don't know where to begin.



Solution 1:[1]

It's possible, simply do this:

client = docker.DockerClient(base_url=your_remote_docker_url)

Here's the document I found related to this:

https://docker-py.readthedocs.io/en/stable/client.html#client-reference


If you only have SSH access to it, there is an use_ssh_client option

Solution 2:[2]

It's not clearly documented by Docker SDK for Python, but you can use SSH to connect to Docker daemon by specifying host with ssh://[user]@[host] format, for example:

import docker

# Create a client connecting to Docker daemon via SSH
client = docker.DockerClient(base_url="ssh://username@your_host")

It's also possible to set environment variable DOCKER_HOST=ssh://username@your_host and use the example your provided which use current environment to create client, for example:

import docker
import os

os.environ["DOCKER_HOST"] = "ssh://username@your_host"
# Or use `export DOCKER_HOST=ssh://username@your_host` before running Python

client = docker.from_env()

Note: as specified in the question, this is considering you have SSH access to target host. You can test with

ssh username@your_host

Solution 3:[3]

If you have a k8s cluster, you do not need the Python sdk. You only need the cmd line tool kubectl.

Once you have it installed, you can create a deployment that will deploy your image.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Lorah Attkins
Solution 2
Solution 3 Alexandru Placinta