コード例 #1
0
ファイル: main.go プロジェクト: rsampaio/docker-heroku
func RunDockerContainer(cmd string) {
	herokuClient := HttpClient()
	request := MakeRequest(appName, "config-vars", "")
	resp, err := herokuClient.Do(request)
	if err != nil {
		panic("do request")
	}

	herokuEnv, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		panic("read response")
	}
	fmt.Println("Heroku Env:", string(herokuEnv))

	cwd, _ := os.Getwd()

	dClient, err := dockerClient.NewClient("unix:///var/run/docker.sock")
	if err != nil {
		panic("new client")
	}

	var config docker.Config
	exposedPorts := make(map[docker.Port]struct{})
	exposedPorts["80"] = struct{}{}

	volumes := make(map[string]struct{})
	volumes["/app"] = struct{}{}

	config.Volumes = volumes
	config.ExposedPorts = exposedPorts
	config.Cmd = []string{"/bin/bash", "-c", cmd}

	config.Env = []string{"PORT=80"}

	config.Image = "heroku-runtime"
	config.WorkingDir = "/app"

	container, err := dClient.CreateContainer(dockerClient.CreateContainerOptions{}, &config)
	if err != nil {
		panic("create container")
	}

	err = dClient.StartContainer(container.ID, &docker.HostConfig{Binds: []string{cwd + "/app:/app"}})
	if err != nil {
		panic("start container")
	}
	fmt.Fprintf(os.Stdout, "%s\n", container.ID)
}