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"
versionpkg "github.com/docker/docker/pkg/version"
apitypes "github.com/docker/engine-api/types"
containertypes "github.com/docker/engine-api/types/container"
dockerfilters "github.com/docker/engine-api/types/filters"
"github.com/docker/swarm/cluster"
"github.com/docker/swarm/experimental"
@ -1220,25 +1221,26 @@ func postBuild(c *context, w http.ResponseWriter, r *http.Request) {
return
}
buildImage := &dockerclient.BuildImage{
DockerfileName: r.Form.Get("dockerfile"),
RepoName: r.Form.Get("t"),
RemoteURL: r.Form.Get("remote"),
buildImage := &apitypes.ImageBuildOptions{
Dockerfile: r.Form.Get("dockerfile"),
Tags: r.Form["t"],
RemoteContext: r.Form.Get("remote"),
NoCache: boolValue(r, "nocache"),
Pull: boolValue(r, "pull"),
PullParent: boolValue(r, "pull"),
Remove: boolValue(r, "rm"),
ForceRemove: boolValue(r, "forcerm"),
SuppressOutput: boolValue(r, "q"),
Isolation: containertypes.Isolation(r.Form.Get("isolation")),
Memory: int64ValueOrZero(r, "memory"),
MemorySwap: int64ValueOrZero(r, "memswap"),
CpuShares: int64ValueOrZero(r, "cpushares"),
CpuPeriod: int64ValueOrZero(r, "cpuperiod"),
CpuQuota: int64ValueOrZero(r, "cpuquota"),
CpuSetCpus: r.Form.Get("cpusetcpus"),
CpuSetMems: r.Form.Get("cpusetmems"),
CPUShares: int64ValueOrZero(r, "cpushares"),
CPUPeriod: int64ValueOrZero(r, "cpuperiod"),
CPUQuota: int64ValueOrZero(r, "cpuquota"),
CPUSetCPUs: r.Form.Get("cpusetcpus"),
CPUSetMems: r.Form.Get("cpusetmems"),
CgroupParent: r.Form.Get("cgroupparent"),
ShmSize: int64ValueOrZero(r, "shmsize"),
Context: r.Body,
BuildArgs: make(map[string]string),
}
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)
}
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 != "" {
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 {
json.Unmarshal(buf, &buildImage.Config)
json.Unmarshal(buf, &buildImage.AuthConfigs)
}
}

View File

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

View File

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

View File

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

View File

@ -14,6 +14,7 @@ import (
log "github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/discovery"
"github.com/docker/docker/pkg/stringid"
"github.com/docker/engine-api/types"
"github.com/docker/go-units"
"github.com/docker/swarm/cluster"
"github.com/docker/swarm/scheduler"
@ -895,12 +896,12 @@ func (c *Cluster) RenameContainer(container *cluster.Container, newName string)
}
// 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()
// get an engine
config := cluster.BuildContainerConfig(dockerclient.ContainerConfig{
CpuShares: buildImage.CpuShares,
CpuShares: buildImage.CPUShares,
Memory: buildImage.Memory,
Env: convertMapToKVStrings(buildImage.BuildArgs),
})