本文整理汇总了Golang中github.com/fsouza/go-dockerclient.Client.BuildImage方法的典型用法代码示例。如果您正苦于以下问题:Golang Client.BuildImage方法的具体用法?Golang Client.BuildImage怎么用?Golang Client.BuildImage使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/fsouza/go-dockerclient.Client
的用法示例。
在下文中一共展示了Client.BuildImage方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: build
// build takes a Dockerfile and builds an image.
func build(c cookoo.Context, path, tag string, client *docli.Client) error {
dfile := filepath.Join(path, "Dockerfile")
// Stat the file
info, err := os.Stat(dfile)
if err != nil {
return fmt.Errorf("Dockerfile stat: %s", err)
}
file, err := os.Open(dfile)
if err != nil {
return fmt.Errorf("Dockerfile open: %s", err)
}
defer file.Close()
var buf bytes.Buffer
tw := tar.NewWriter(&buf)
tw.WriteHeader(&tar.Header{
Name: "Dockerfile",
Size: info.Size(),
ModTime: info.ModTime(),
})
io.Copy(tw, file)
if err := tw.Close(); err != nil {
return fmt.Errorf("Dockerfile tar: %s", err)
}
options := docli.BuildImageOptions{
Name: tag,
InputStream: &buf,
OutputStream: os.Stdout,
}
return client.BuildImage(options)
}
示例2: buildImage
func buildImage(client *docker.Client, name string, archive []byte) error {
if err := client.BuildImage(docker.BuildImageOptions{
Name: name,
OutputStream: os.Stderr,
InputStream: bytes.NewBuffer(archive),
}); err != nil {
fmt.Println("Could not build image \n", err)
return err
}
return nil
}
示例3: BuildAndPushImageOfSizeWithDocker
// BuildAndPushImageOfSizeWithDocker tries to build an image of wanted size and number of layers. It instructs
// Docker daemon directly. Built image is stored as an image stream tag <name>:<tag>. If shouldSucceed is
// false, a push is expected to fail with a denied error. Note the size is only approximate. Resulting image
// size will be different depending on used compression algorithm and metadata overhead.
func BuildAndPushImageOfSizeWithDocker(
oc *exutil.CLI,
dClient *dockerclient.Client,
name, tag string,
size uint64,
numberOfLayers int,
outSink io.Writer,
shouldSucceed bool,
) (imageDigest string, err error) {
registryURL, err := GetDockerRegistryURL(oc)
if err != nil {
return "", err
}
tempDir, err := ioutil.TempDir("", "name-build")
if err != nil {
return "", err
}
dataSize := calculateRoughDataSize(oc.Stdout(), size, numberOfLayers)
lines := make([]string, numberOfLayers+1)
lines[0] = "FROM scratch"
for i := 1; i <= numberOfLayers; i++ {
blobName := fmt.Sprintf("data%d", i)
if err := createRandomBlob(path.Join(tempDir, blobName), dataSize); err != nil {
return "", err
}
lines[i] = fmt.Sprintf("COPY %s /%s", blobName, blobName)
}
if err := ioutil.WriteFile(path.Join(tempDir, "Dockerfile"), []byte(strings.Join(lines, "\n")+"\n"), 0644); err != nil {
return "", err
}
imageName := fmt.Sprintf("%s/%s/%s", registryURL, oc.Namespace(), name)
taggedName := fmt.Sprintf("%s:%s", imageName, tag)
err = dClient.BuildImage(dockerclient.BuildImageOptions{
Name: taggedName,
RmTmpContainer: true,
ForceRmTmpContainer: true,
ContextDir: tempDir,
OutputStream: outSink,
})
if err != nil {
return "", fmt.Errorf("failed to build %q image: %v", taggedName, err)
}
image, err := dClient.InspectImage(taggedName)
if err != nil {
return "", err
}
defer dClient.RemoveImageExtended(image.ID, dockerclient.RemoveImageOptions{Force: true})
digest := ""
if len(image.RepoDigests) == 1 {
digest = image.RepoDigests[0]
}
out, err := oc.Run("whoami").Args("-t").Output()
if err != nil {
return "", err
}
token := strings.TrimSpace(out)
var buf bytes.Buffer
err = dClient.PushImage(dockerclient.PushImageOptions{
Name: imageName,
Tag: tag,
Registry: registryURL,
OutputStream: &buf,
}, dockerclient.AuthConfiguration{
Username: "test",
Password: token,
Email: "[email protected]",
ServerAddress: registryURL,
})
out = buf.String()
outSink.Write([]byte(out))
if shouldSucceed {
if err != nil {
return "", fmt.Errorf("Got unexpected push error: %v", err)
}
if len(digest) == 0 {
outSink.Write([]byte("matching digest string\n"))
match := rePushedImageDigest.FindStringSubmatch(out)
if len(match) < 2 {
return "", fmt.Errorf("Failed to parse digest")
}
digest = match[1]
}
return digest, nil
}
if err == nil {
return "", fmt.Errorf("Push unexpectedly succeeded")
//.........这里部分代码省略.........
示例4: conformanceTester
//.........这里部分代码省略.........
ignoreSmallFileChange := func(a, b *tar.Header) bool {
if a == nil || b == nil {
return false
}
diff := a.Size - b.Size
if differOnlyByFileSize(a, b, 10) {
t.Logf("WARNING: %s differs only in size by %d bytes, probably a timestamp value change", a.Name, diff)
return true
}
return false
}
if deep {
// execute each step on both Docker build and the direct builder, comparing as we
// go
fail := false
for j := range steps {
testFile := dockerfileWithFrom(lastImage, steps[j:j+1])
nameDirect := fmt.Sprintf(nameFormat, i, "direct", j)
nameDocker := fmt.Sprintf(nameFormat, i, "docker", j)
// run docker build
if err := ioutil.WriteFile(dockerfilePath, []byte(testFile), 0600); err != nil {
t.Errorf("%d: unable to update Dockerfile %q: %v", i, dockerfilePath, err)
break
}
in, err := archive.TarWithOptions(dir, &archive.TarOptions{IncludeFiles: []string{"."}})
if err != nil {
t.Errorf("%d: unable to generate build context %q: %v", i, dockerfilePath, err)
break
}
out := &bytes.Buffer{}
if err := c.BuildImage(docker.BuildImageOptions{
Name: nameDocker,
Dockerfile: dockerfile,
RmTmpContainer: true,
ForceRmTmpContainer: true,
InputStream: in,
OutputStream: out,
}); err != nil {
in.Close()
t.Errorf("%d: unable to build Docker image %q: %v\n%s", i, test.Git, err, out)
break
}
toDelete = append(toDelete, nameDocker)
// run direct build
e := NewClientExecutor(c)
out = &bytes.Buffer{}
e.Out, e.ErrOut = out, out
e.Directory = contextDir
e.Tag = nameDirect
if err := e.Build(bytes.NewBufferString(testFile), nil); err != nil {
t.Errorf("%d: failed to build step %d in dockerfile %q: %s\n%s", i, j, dockerfilePath, steps[j].Original, out)
break
}
toDelete = append(toDelete, nameDirect)
// only compare filesystem on layers that change the filesystem
mutation := steps[j].Value == command.Add || steps[j].Value == command.Copy || steps[j].Value == command.Run
// metadata must be strictly equal
if !equivalentImages(
t, c, nameDocker, nameDirect, mutation,
metadataEqual,
append(ignoreFuncs{ignoreSmallFileChange}, test.Ignore...)...,