diff --git a/api/models/container.go b/api/models/container.go
new file mode 100644
index 0000000..175eaab
--- /dev/null
+++ b/api/models/container.go
@@ -0,0 +1,49 @@
+package models
+
+import (
+	"context"
+	"errors"
+	"io"
+
+	"github.com/docker/docker/api/types"
+)
+
+type Container struct {
+}
+
+func GetId(containername string) (string, error) {
+	containers, err := DockerApi().ContainerList(context.Background(), types.ContainerListOptions{All: true})
+	if err != nil {
+		return "", err
+	}
+
+	for _, container := range containers {
+
+		for _, name := range container.Names {
+			if "/"+containername == name {
+				return container.ID, nil
+			}
+		}
+	}
+	return "", errors.New("Container not found")
+}
+
+func ContainerStart(id string) error {
+	return DockerApi().ContainerStart(context.Background(), id, types.ContainerStartOptions{})
+}
+
+func ContainerStop(id string) error {
+	return DockerApi().ContainerStop(context.Background(), id, nil)
+}
+
+func ContainerLogs(id string, follow bool) (io.ReadCloser, error) {
+	out, err := DockerApi().ContainerLogs(context.Background(), id, types.ContainerLogsOptions{
+		ShowStdout: true,
+		ShowStderr: true,
+		Follow:     follow,
+	})
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
diff --git a/api/test/models/container_test.go b/api/test/models/container_test.go
new file mode 100644
index 0000000..33ae9be
--- /dev/null
+++ b/api/test/models/container_test.go
@@ -0,0 +1,72 @@
+package models_test
+
+import (
+	"bytes"
+	"context"
+	"magmise/models"
+	"testing"
+
+	"github.com/docker/docker/api/types"
+	"github.com/docker/docker/api/types/container"
+)
+
+func TestGetId(t *testing.T) {
+	cleanup, container := ContainerSetup(t)
+	defer cleanup()
+	id, err := models.GetId("magmise_test")
+	if id != container.ID {
+		t.Fatal(err, "Result ", id, "Expected  ", container.ID)
+	}
+
+}
+
+func TestContainer(t *testing.T) {
+	cleanup, c := ContainerSetup(t)
+	defer cleanup()
+	err := models.ContainerStart(c.ID)
+	if err != nil {
+		t.Fatal(err)
+	}
+	statusCh, errCh := models.DockerApi().ContainerWait(context.Background(), c.ID, container.WaitConditionNotRunning)
+	select {
+	case err := <-errCh:
+		if err != nil {
+			panic(err)
+		}
+	case <-statusCh:
+	}
+
+	logs, err := models.ContainerLogs(c.ID, false)
+	if err != nil {
+		t.Fatal(err)
+	}
+	buf := new(bytes.Buffer)
+	buf.ReadFrom(logs)
+	t.Log(buf.String())
+	// var l []byte
+	// logs.Read(l)
+	// t.Log(l)
+	if err := models.ContainerStop(c.ID); err != nil {
+		t.Fatal(err)
+	}
+}
+
+func ContainerSetup(t *testing.T) (func(), container.ContainerCreateCreatedBody) {
+	_, err := models.DockerApi().ImagePull(context.Background(), "docker.io/library/alpine", types.ImagePullOptions{})
+	if err != nil {
+		t.Fatal(err)
+	}
+	// get rid of old container
+	id, _ := models.GetId("magmise_test")
+	models.DockerApi().ContainerRemove(context.Background(), id, types.ContainerRemoveOptions{})
+	container, err := models.DockerApi().ContainerCreate(context.Background(), &container.Config{
+		Image: "docker.io/library/alpine", Cmd: []string{"echo", "hello world"}},
+		nil, nil, nil, "magmise_test")
+	if err != nil {
+		t.Log(err)
+	}
+	// cleanup
+	return func() {
+		models.DockerApi().ContainerRemove(context.Background(), container.ID, types.ContainerRemoveOptions{})
+	}, container
+}