mirror of https://github.com/docker/docs.git
support private images, labels and other new flags in docker build
Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
parent
5e8bad38f6
commit
e98cf00409
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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),
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue