Docker Rest API to Perform Docker Operations Remotely - docker

I want to connect to a Windows Server Where Docker is Running (Windows Server 2016) and do all the docker operations programmatically using Rest Calls. Can Anyone provide me the Docker Rest API to connect to Windows Server and perform those operations like Docker Container Creation?

Check docker engine api. It gives you some REST endpoints like, GET /containers/json to list all containers.
If you are looking for programmatically doing REST API calls in C#, you can look into Docker.DotNet.
You can use Git Bash for Windows to query something like
curl http://localhost:2375/containers/<your_conatiner_name>/stats
Or, if you want to remotely request docker demon then follow this post

Related

Remote HTTP Endpoint to Docker Application

I have a demo application running perfectly on my local environment. However, I would like to run the same application remotely by giving it a HTTP endpoint. My goal is to test the performance of the application.
How to give a HTTP endpoint to any multi container docker application?
The following is the Github repository link for the demo application
https://github.com/LonareAman/BankCQRS.git
Use docker-compose and handle containers based on what you need
One of your containers should be web server like nginx. And then bind your machine port to your nginx like 80:80
Then handle your containers in nginx and make a proxy to them
You can find some samples in https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/

Docker API, remote API, Client API

I would like to know when to use and the difference between Docker API, Docker remote API, Client API and Compose API. TIA.
There is only Docker Engine API, which allows you to manage Docker calling it.
Docker API = Docker Engine API
Docker remote API = I think this means to configure Docker CLI to connect to a remote API to manage container on other hosts.
Client API = Docker CLI. A CLI to use Docker Engine API.
Compose API = This doesn't exist, Compose is only a tool to use Docker Engine API.
For further information, check Docker Engine API docs: https://docs.docker.com/engine/api/
Basically all the categories that you are referring to are Docker Engine APIs
As per the Docker Docs:
The Engine API is the API served by Docker Engine. It allows you to
control every aspect of Docker from within your own applications,
build tools to manage and monitor applications running on Docker, and
even use it to build apps on Docker itself.
It is the API the Docker client uses to communicate with the Engine,
so everything the Docker client can do can be done with the API. For
example:
Running and managing containers Managing Swarm nodes and services
Reading logs and metrics Creating and managing Swarms Pulling and
managing images Managing networks and volumes
These APIs are used to control Docker on the remote servers.
Docker Compose is a tool for defining and running multi-container Docker applications.
These APIs are used to control Docker on the remote servers.
Docker Compose is a tool for defining and running multi-container Docker applications.
Thanks, I was trying to understand the difference between the Docker APIs while working on this Scalable Docker Deployment in the Bluemix platform.

What is the Docker Engine?

When people talk about the 'Docker Engine' do they mean both the Client and the Daemon? Or is it something else entirely?
As I see it there is a Docker Client, a Docker Daemon. The Client runs locally and connects to the Daemon which does the actual running of the containers. The Client can connect to a remote Daemon. Are these both together the Engine? thanks
The Docker Engine is the Docker Daemon running on a single host, installed with the Docker Client CLI. Here are the docs that answer this specific question.
On top of that, you can have a Swarm running that joins multiple hosts to horizontally scale and provide fault tolerance. And there are numerous other projects from Docker, like their Registry, Docker Cloud, and Universal Control Plane, that are each separate from the engine.
Docker engine is a client-server application which comprises of 3 components.
1. Client: Docker CLI or the command line window that helps us to interact.
2. REST API: Client communicate with the server with REST API, the commands issued by the client is sent to the server in the form of REST API, it is this reason our server can either be in the local or remote machine.
3. Server: Server here is either the local or remote machine or host machine which has a daemon process running in it which receives the commands and creates, manages and destroys the docker objects like images, containers, volumes etc.

Start docker container from another application in another docker container

We have an existing java application which exposes a REST API. When it receives a http request, it starts another java process using the Runtime.getRuntime().exec.
We are in the process of migrating this application to docker and we would like to separate these services, the REST application in 1 container and the other component in another container.
Is there any way, that the REST application can start the other application in another docker container?
Yes you can programmatically spawn a docker container.
Docker Remote API will allow you to do that. You can either use http client library to invoke the remote APIs or you can use java docker client libraries to do the same.
Here is the relevant docker documentation:
Remote API:
https://docs.docker.com/engine/reference/api/docker_remote_api/
Libraries: https://docs.docker.com/engine/reference/api/remote_api_client_libraries/

Use real server instead of docker-machine for OSX

I have a linux on cloud with a installed docker service on it. How can I use my VS on cloud instead of docker-machine on my OSX? it means instead of install VirtualBox and create a VM on it by docker-machine, I use my server on cloud as docker server.
To access a remote Docker daemon simply pass the -H flag to your docker commands:
docker -H=tcp://192.168.0.100:2375 images
You need to ensure that the remote Docker daemon is listening on the appropriate network interface. Be aware though that doing this on an external server is highly insecure, anyone that can reach the port has effectively root access on the server. At the very least read this article on securing the Docker daemon.
Personally I would only recommend using a port binding via ssh tunnel to access the remote Docker daemon.
You might get a solution from docker-machine's generic driver. Just start the virtual server in cloud, set up proper SSH keys and get started :) It should work just the same as with a VM within VirtualBox.
I'm not sure how to get VS auto-started if it is shut down though. Via a could-vendor specific command line program?
Edit: I should have read the docs better, the first cloud example actually shows the usage of digital ocean driver. If it is already running then just use the generic driver.

Resources