/docker_api

Elixir docker API client

Primary LanguageElixir

DockerApi

A Docker Api client for Elixir

Docker API Version <= 1.29

  • currently only supports TCP

Usage

Add docker_api to your mix.exs

  defp deps do
    [
      {:docker_api, git: "https://github.com/bradleyd/docker_api.git"}
    ]   
  end

Make sure it gets started

  def application do
    [applications: [:logger, :docker_api]]
  end

You can start it by hand also

DockerApi.start #=> {:ok, []}

Container

all\1

{:ok, body, code } = DockerApi.all("127.0.0.1")

find\2

{:ok, body, code } = DockerApi.Container.get("127.0.0.1", "12345")

find\2

Find can also take a List of hosts to search through.

{:ok, body, code } = DockerApi.Container.get(["127.0.0.1", "10.100.13.21"], "12345")

top\2

{:ok, body, code } = DockerApi.Container.top("127.0.0.1", "12345")

create\2

{:ok, body, code } = DockerApi.Container.create("127.0.0.1", %{image: "foo"})

logs\2

{:ok, body, code } = DockerApi.Container.logs("127.0.0.1", "12345")

To run a command on a container, you must create a Exec first. exec returns a Id to query with

exec\3

payload = %{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Tty": false, "Cmd": ["date"] }
{:ok, body, code }  = DockerApi.Container.exec("127.0.0.1", "12345", payload)
#=> %{ "Id" => "1234556678890" }

With our Id in hand we can then get the results of the Exec

exec_start\3

payload = %{"Detach": false, "Tty": true}
{:ok, body }  = DockerApi.Container.exec_start("127.0.0.1", "1234556678890", payload)

#=> ["Sun Mar  8 00:25:18 UTC 2015\n"]

Images

all\1

{:ok, body, code } = DockerApi.Image.all("127.0.0.1")

find\2

{ :ok, body, code } = DockerApi.Image.find("127.0.0.1", "12345")

Find also takes a List of hosts. Find will search all hosts in the list for a match with that id

{ :ok, body, code } = DockerApi.Image.find(["127.0.0.1", "10.10.100.12"], "12345")

build\3

{:ok, result } = DockerApi.Image.build("127.0.0.1", %{t: "foo", q: 1}, "/tmp/docker_image.tar.gz")

TODO

  • Finish mapping all the API endpoints
  • Events do not stream forever; only show because of IO.inspect
  • Talk to docker hosts that use credentails/TLS
  • Finish docstrings
  • Mock all the HTTP calls