support private images, labels and other new flags in docker build

Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
Victor Vieux 2016-03-24 16:36:53 -07:00
parent 5e8bad38f6
commit e98cf00409
5 changed files with 41 additions and 22 deletions

View File

@ -18,6 +18,7 @@ import (
"github.com/docker/docker/pkg/parsers/kernel" "github.com/docker/docker/pkg/parsers/kernel"
versionpkg "github.com/docker/docker/pkg/version" versionpkg "github.com/docker/docker/pkg/version"
apitypes "github.com/docker/engine-api/types" apitypes "github.com/docker/engine-api/types"
containertypes "github.com/docker/engine-api/types/container"
dockerfilters "github.com/docker/engine-api/types/filters" dockerfilters "github.com/docker/engine-api/types/filters"
"github.com/docker/swarm/cluster" "github.com/docker/swarm/cluster"
"github.com/docker/swarm/experimental" "github.com/docker/swarm/experimental"
@ -1220,25 +1221,26 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) {
return return
} }
buildImage := &dockerclient.BuildImage{ buildImage := &apitypes.ImageBuildOptions{
DockerfileName: r.Form.Get("dockerfile"), Dockerfile: r.Form.Get("dockerfile"),
RepoName: r.Form.Get("t"), Tags: r.Form["t"],
RemoteURL: r.Form.Get("remote"), RemoteContext: r.Form.Get("remote"),
NoCache: boolValue(r, "nocache"), NoCache: boolValue(r, "nocache"),
Pull: boolValue(r, "pull"), PullParent: boolValue(r, "pull"),
Remove: boolValue(r, "rm"), Remove: boolValue(r, "rm"),
ForceRemove: boolValue(r, "forcerm"), ForceRemove: boolValue(r, "forcerm"),
SuppressOutput: boolValue(r, "q"), SuppressOutput: boolValue(r, "q"),
Isolation: containertypes.Isolation(r.Form.Get("isolation")),
Memory: int64ValueOrZero(r, "memory"), Memory: int64ValueOrZero(r, "memory"),
MemorySwap: int64ValueOrZero(r, "memswap"), MemorySwap: int64ValueOrZero(r, "memswap"),
CpuShares: int64ValueOrZero(r, "cpushares"), CPUShares: int64ValueOrZero(r, "cpushares"),
CpuPeriod: int64ValueOrZero(r, "cpuperiod"), CPUPeriod: int64ValueOrZero(r, "cpuperiod"),
CpuQuota: int64ValueOrZero(r, "cpuquota"), CPUQuota: int64ValueOrZero(r, "cpuquota"),
CpuSetCpus: r.Form.Get("cpusetcpus"), CPUSetCPUs: r.Form.Get("cpusetcpus"),
CpuSetMems: r.Form.Get("cpusetmems"), CPUSetMems: r.Form.Get("cpusetmems"),
CgroupParent: r.Form.Get("cgroupparent"), CgroupParent: r.Form.Get("cgroupparent"),
ShmSize: int64ValueOrZero(r, "shmsize"),
Context: r.Body, Context: r.Body,
BuildArgs: make(map[string]string),
} }
buildArgsJSON := r.Form.Get("buildargs") buildArgsJSON := r.Form.Get("buildargs")
@ -1246,11 +1248,21 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) {
json.Unmarshal([]byte(buildArgsJSON), &buildImage.BuildArgs) json.Unmarshal([]byte(buildArgsJSON), &buildImage.BuildArgs)
} }
authEncoded := r.Header.Get("X-Registry-Auth") ulimitsJSON := r.Form.Get("ulimits")
if ulimitsJSON != "" {
json.Unmarshal([]byte(ulimitsJSON), &buildImage.Ulimits)
}
labelsJSON := r.Form.Get("labels")
if labelsJSON != "" {
json.Unmarshal([]byte(labelsJSON), &buildImage.Labels)
}
authEncoded := r.Header.Get("X-Registry-Config")
if authEncoded != "" { if authEncoded != "" {
buf, err := base64.URLEncoding.DecodeString(r.Header.Get("X-Registry-Auth")) buf, err := base64.URLEncoding.DecodeString(r.Header.Get("X-Registry-Config"))
if err == nil { if err == nil {
json.Unmarshal(buf, &buildImage.Config) json.Unmarshal(buf, &buildImage.AuthConfigs)
} }
} }

View File

@ -3,6 +3,7 @@ package cluster
import ( import (
"io" "io"
"github.com/docker/engine-api/types"
"github.com/samalba/dockerclient" "github.com/samalba/dockerclient"
) )
@ -94,7 +95,7 @@ type Cluster interface {
RenameContainer(container *Container, newName string) error RenameContainer(container *Container, newName string) error
// BuildImage build an image // BuildImage build an image
BuildImage(*dockerclient.BuildImage, io.Writer) error BuildImage(*types.ImageBuildOptions, io.Writer) error
// TagImage tag an image // TagImage tag an image
TagImage(IDOrName string, repo string, tag string, force bool) error TagImage(IDOrName string, repo string, tag string, force bool) error

View File

@ -18,6 +18,7 @@ import (
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/version" "github.com/docker/docker/pkg/version"
engineapi "github.com/docker/engine-api/client" engineapi "github.com/docker/engine-api/client"
"github.com/docker/engine-api/types"
engineapinop "github.com/docker/swarm/api/nopclient" engineapinop "github.com/docker/swarm/api/nopclient"
"github.com/samalba/dockerclient" "github.com/samalba/dockerclient"
"github.com/samalba/dockerclient/nopclient" "github.com/samalba/dockerclient/nopclient"
@ -1128,10 +1129,13 @@ func (e *Engine) RenameContainer(container *Container, newName string) error {
} }
// BuildImage builds an image // BuildImage builds an image
func (e *Engine) BuildImage(buildImage *dockerclient.BuildImage) (io.ReadCloser, error) { func (e *Engine) BuildImage(buildImage *types.ImageBuildOptions) (io.ReadCloser, error) {
reader, err := e.client.BuildImage(buildImage) resp, err := e.apiClient.ImageBuild(context.TODO(), *buildImage)
e.CheckConnectionErr(err) e.CheckConnectionErr(err)
return reader, err if err != nil {
return nil, err
}
return resp.Body, nil
} }
// TagImage tags an image // TagImage tags an image

View File

@ -14,6 +14,7 @@ import (
"time" "time"
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/engine-api/types"
"github.com/docker/swarm/cluster" "github.com/docker/swarm/cluster"
"github.com/docker/swarm/cluster/mesos/task" "github.com/docker/swarm/cluster/mesos/task"
"github.com/docker/swarm/scheduler" "github.com/docker/swarm/scheduler"
@ -639,12 +640,12 @@ func (c *Cluster) RANDOMENGINE() (*cluster.Engine, error) {
} }
// BuildImage builds an image // BuildImage builds an image
func (c *Cluster) BuildImage(buildImage *dockerclient.BuildImage, out io.Writer) error { func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer) error {
c.scheduler.Lock() c.scheduler.Lock()
// get an engine // get an engine
config := &cluster.ContainerConfig{dockerclient.ContainerConfig{ config := &cluster.ContainerConfig{dockerclient.ContainerConfig{
CpuShares: buildImage.CpuShares, CpuShares: buildImage.CPUShares,
Memory: buildImage.Memory, Memory: buildImage.Memory,
}} }}
nodes, err := c.scheduler.SelectNodesForContainer(c.listNodes(), config) nodes, err := c.scheduler.SelectNodesForContainer(c.listNodes(), config)

View File

@ -14,6 +14,7 @@ import (
log "github.com/Sirupsen/logrus" log "github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/discovery" "github.com/docker/docker/pkg/discovery"
"github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/stringid"
"github.com/docker/engine-api/types"
"github.com/docker/go-units" "github.com/docker/go-units"
"github.com/docker/swarm/cluster" "github.com/docker/swarm/cluster"
"github.com/docker/swarm/scheduler" "github.com/docker/swarm/scheduler"
@ -895,12 +896,12 @@ func (c *Cluster) RenameContainer(container *cluster.Container, newName string)
} }
// BuildImage build an image // BuildImage build an image
func (c *Cluster) BuildImage(buildImage *dockerclient.BuildImage, out io.Writer) error { func (c *Cluster) BuildImage(buildImage *types.ImageBuildOptions, out io.Writer) error {
c.scheduler.Lock() c.scheduler.Lock()
// get an engine // get an engine
config := cluster.BuildContainerConfig(dockerclient.ContainerConfig{ config := cluster.BuildContainerConfig(dockerclient.ContainerConfig{
CpuShares: buildImage.CpuShares, CpuShares: buildImage.CPUShares,
Memory: buildImage.Memory, Memory: buildImage.Memory,
Env: convertMapToKVStrings(buildImage.BuildArgs), Env: convertMapToKVStrings(buildImage.BuildArgs),
}) })