From 7df6bacee59cf2f11bceee646e385d6c5a0d0b36 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 9 Oct 2016 19:49:34 +0100 Subject: [PATCH] Allow dind image to be overriden. - improve readme - mention pre-pulling dind image. - read env variable once in init() method --- README.md | 6 +++++- services/docker.go | 8 +------- services/instance.go | 26 ++++++++++++++++++++++---- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 3c0aea5..59ab094 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,8 @@ A live version is available at: http://play-with-docker.com/ ## Installation +Start the Docker daemon on your machine and run `docker pull docker:1.12.2-rc2-dind`. + 1) Install go 1.7.1 with `brew` on Mac or through a package manager. 2) `go get` @@ -21,5 +23,7 @@ A live version is available at: http://play-with-docker.com/ Notes: -There is a hard-coded limit to 5 Docker playgrounds per session. After 1 hour sessions are deleted. +* There is a hard-coded limit to 5 Docker playgrounds per session. After 1 hour sessions are deleted. +* If you want to override the DIND version or image then set the environmental variable i.e. + `DIND_IMAGE=docker:dind` diff --git a/services/docker.go b/services/docker.go index 21ea4f8..49306d9 100644 --- a/services/docker.go +++ b/services/docker.go @@ -2,7 +2,6 @@ package services import ( "log" - "os" "strings" ptypes "github.com/franela/play-with-docker/types" @@ -75,18 +74,13 @@ func AttachExecConnection(execId string, ctx context.Context) (*types.HijackedRe return &conn, nil } -func CreateInstance(net string) (*ptypes.Instance, error) { +func CreateInstance(net string, dindImage string) (*ptypes.Instance, error) { var maximumPidLimit int64 maximumPidLimit = 150 // Set a ulimit value to prevent misuse h := &container.HostConfig{NetworkMode: container.NetworkMode(net), Privileged: true} h.Resources.PidsLimit = maximumPidLimit - dindImage := os.Getenv("DIND_IMAGE") - if len(dindImage) == 0 { - dindImage = "docker:1.12.2-rc2-dind" - } - conf := &container.Config{Image: dindImage} container, err := c.ContainerCreate(context.Background(), conf, h, nil, "") diff --git a/services/instance.go b/services/instance.go index 949f27d..e95b8e2 100644 --- a/services/instance.go +++ b/services/instance.go @@ -1,19 +1,37 @@ package services -import "github.com/franela/play-with-docker/types" +import ( + "log" + "os" + + "github.com/franela/play-with-docker/types" +) var instances map[string]map[string]*types.Instance +var dindImage string +var defaultDindImageName string + func init() { instances = make(map[string]map[string]*types.Instance) + dindImage = getDindImageName() +} + +func getDindImageName() string { + dindImage := os.Getenv("DIND_IMAGE") + defaultDindImageName = "docker:1.12.2-rc2-dind" + if len(dindImage) == 0 { + dindImage = defaultDindImageName + } + return dindImage } func NewInstance(session *types.Session) (*types.Instance, error) { - //TODO: Validate that a session can only have 10 instances + //TODO: Validate that a session can only have 5 instances //TODO: Create in redis - - instance, err := CreateInstance(session.Id) + log.Printf("NewInstance - using image: [%s]\n", dindImage) + instance, err := CreateInstance(session.Id, dindImage) if err != nil { return nil, err