diff --git a/Dockerfile b/Dockerfile
index 91caabf9..975cca65 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,4 +4,4 @@ RUN apk --no-cache add make git gcc libtool musl-dev
 WORKDIR /
 COPY go.mod .
 COPY go.sum .
-RUN go mod download
+RUN go mod download && rm go.mod go.sum
diff --git a/runtime/kubernetes/client/kubernetes.go b/runtime/kubernetes/client/kubernetes.go
index 556237b8..ab8731b8 100644
--- a/runtime/kubernetes/client/kubernetes.go
+++ b/runtime/kubernetes/client/kubernetes.go
@@ -38,6 +38,8 @@ type Kubernetes interface {
 
 // DefaultService returns default micro kubernetes service definition
 func DefaultService(name, version string) *Service {
+	log.Debugf("kubernetes default service: name: %s, version: %s", name, version)
+
 	Labels := map[string]string{
 		"name":    name,
 		"version": version,
@@ -73,7 +75,9 @@ func DefaultService(name, version string) *Service {
 }
 
 // DefaultService returns default micro kubernetes deployment definition
-func DefaultDeployment(name, version string) *Deployment {
+func DefaultDeployment(name, version, source string) *Deployment {
+	log.Debugf("kubernetes default deployment: name: %s, version: %s, source: %s", name, version, source)
+
 	Labels := map[string]string{
 		"name":    name,
 		"version": version,
@@ -102,7 +106,12 @@ func DefaultDeployment(name, version string) *Deployment {
 		log.Debugf("Runtime could not parse build: %v", err)
 	}
 
-	// TODO: change the image name here
+	// enable go modules by default
+	env := EnvVar{
+		Name:  "GO111MODULE",
+		Value: "on",
+	}
+
 	Spec := &DeploymentSpec{
 		Replicas: 1,
 		Selector: &LabelSelector{
@@ -114,8 +123,8 @@ func DefaultDeployment(name, version string) *Deployment {
 				Containers: []Container{{
 					Name:    name,
 					Image:   DefaultImage,
-					Env:     []EnvVar{},
-					Command: []string{"go", "run", "main.go"},
+					Env:     []EnvVar{env},
+					Command: []string{"go", "run", source},
 					Ports: []ContainerPort{{
 						Name:          name + "-port",
 						ContainerPort: 8080,
diff --git a/runtime/kubernetes/client/templates.go b/runtime/kubernetes/client/templates.go
index 5292ac4f..48ae6efc 100644
--- a/runtime/kubernetes/client/templates.go
+++ b/runtime/kubernetes/client/templates.go
@@ -1,8 +1,8 @@
 package client
 
 var templates = map[string]string{
-	"deployments": deploymentTmpl,
-	"services":    serviceTmpl,
+	"deployment": deploymentTmpl,
+	"service":    serviceTmpl,
 }
 
 var deploymentTmpl = `
diff --git a/runtime/kubernetes/client/utils.go b/runtime/kubernetes/client/utils.go
index b70ca44f..6174c522 100644
--- a/runtime/kubernetes/client/utils.go
+++ b/runtime/kubernetes/client/utils.go
@@ -10,9 +10,9 @@ import (
 	"text/template"
 )
 
-// renderTemplateFile renders template file in path into writer w with supplied data
-func renderTemplate(text string, w io.Writer, data interface{}) error {
-	t := template.Must(template.New("kubernetes").Parse(text))
+// renderTemplateFile renders template for a given resource into writer w
+func renderTemplate(resource string, w io.Writer, data interface{}) error {
+	t := template.Must(template.New("kubernetes").Parse(templates[resource]))
 
 	if err := t.Execute(w, data); err != nil {
 		return err
diff --git a/runtime/kubernetes/client/utils_test.go b/runtime/kubernetes/client/utils_test.go
index 0e69c012..a364debc 100644
--- a/runtime/kubernetes/client/utils_test.go
+++ b/runtime/kubernetes/client/utils_test.go
@@ -7,19 +7,20 @@ import (
 
 func TestTemplates(t *testing.T) {
 	name := "foo"
-	version := "1.2.3"
+	version := "123"
+	source := "github.com/foo/bar"
 
 	// Render default service
 	s := DefaultService(name, version)
 	bs := new(bytes.Buffer)
-	if err := renderTemplate(serviceTmpl, bs, s); err != nil {
+	if err := renderTemplate(templates["service"], bs, s); err != nil {
 		t.Errorf("Failed to render kubernetes service: %v", err)
 	}
 
 	// Render default deployment
-	d := DefaultDeployment(name, version)
+	d := DefaultDeployment(name, version, source)
 	bd := new(bytes.Buffer)
-	if err := renderTemplate(deploymentTmpl, bd, d); err != nil {
+	if err := renderTemplate(templates["deployment"], bd, d); err != nil {
 		t.Errorf("Failed to render kubernetes deployment: %v", err)
 	}
 }
diff --git a/runtime/kubernetes/service.go b/runtime/kubernetes/service.go
index 0c02d1b9..7b7d2004 100644
--- a/runtime/kubernetes/service.go
+++ b/runtime/kubernetes/service.go
@@ -19,7 +19,7 @@ type service struct {
 
 func newService(s *runtime.Service, c runtime.CreateOptions) *service {
 	kservice := client.DefaultService(s.Name, s.Version)
-	kdeploy := client.DefaultDeployment(s.Name, s.Version)
+	kdeploy := client.DefaultDeployment(s.Name, s.Version, s.Source)
 
 	env := make([]client.EnvVar, 0, len(c.Env))
 	for _, evar := range c.Env {
@@ -27,15 +27,18 @@ func newService(s *runtime.Service, c runtime.CreateOptions) *service {
 		env = append(env, client.EnvVar{Name: evarPair[0], Value: evarPair[1]})
 	}
 
-	// TODO: should we append instead of overriding?
-	// if environment has been supplied update deployment
+	// if environment has been supplied update deployment default environment
 	if len(env) > 0 {
-		kdeploy.Spec.Template.PodSpec.Containers[0].Env = env
+		kdeploy.Spec.Template.PodSpec.Containers[0].Env = append(kdeploy.Spec.Template.PodSpec.Containers[0].Env, env...)
 	}
 
-	// if Command has been supplied override the default command
-	if len(c.Command) > 0 {
-		kdeploy.Spec.Template.PodSpec.Containers[0].Command = c.Command
+	// if Exec/Command has been supplied override the default command
+	if len(s.Exec) > 0 {
+		kdeploy.Spec.Template.PodSpec.Containers[0].Command = s.Exec
+	} else {
+		if len(c.Command) > 0 {
+			kdeploy.Spec.Template.PodSpec.Containers[0].Command = c.Command
+		}
 	}
 
 	return &service{