Java源码示例:com.github.dockerjava.api.model.BuildResponseItem

示例1
public static void main(String[] args)
{
    final var dockerClient = DockerClientBuilder.getInstance().build();

    BuildImageResultCallback callback = new BuildImageResultCallback()
    {
        @Override
        public void onNext(BuildResponseItem item)
        {
            System.out.print(item.getStream());
            super.onNext(item);
        }
    };

    dockerClient
            .listImagesCmd()
            .exec().stream()
                .filter(s->s!=null)
                .forEach(it -> System.out.println(it.getId() + " " +
                               String.join(",", Objects.requireNonNullElse(it.getRepoTags(), new String[0]))));
}
 
示例2
/**
 * Build.
 *
 * @param imageName      the image name
 * @param dockerfilePath the dockerfile path
 * @param args           the args
 * @param labels         the labels
 * @return image id
 */
public String build(String imageName, String dockerfilePath, Map<String, String> args, Map<String, String> labels) {
    BuildImageCmd buildImageCmd = docker.buildImageCmd(new File(dockerfilePath));
    if (args != null && !args.isEmpty()) {
        args.forEach(buildImageCmd::withBuildArg);
    }
    if (labels != null && !labels.isEmpty()) {
        buildImageCmd.withLabels(labels);
    }
    buildImageCmd.withTags(new HashSet<>() {
        {
            add(imageName);
        }
    });
    return buildImageCmd.exec(new BuildImageResultCallback() {
        @Override
        public void onNext(BuildResponseItem item) {
            super.onNext(item);
            log.debug(item.toString());
        }
    }).awaitImageId();
}
 
示例3
/**
 * 创建Docker镜像
 *
 * @param dockerFilePath dockerFile文件路径
 * @param tag 镜像的标签
 * @return
 */
public static String buildImage(String dockerFilePath, String tag) {
  DockerClient dockerClient = getDockerClient();

  BuildImageResultCallback callback =
      new BuildImageResultCallback() {
        @Override
        public void onNext(BuildResponseItem item) {
          logger.info(item.toString());
          super.onNext(item);
        }
      };

  String imageId =
      dockerClient
          .buildImageCmd()
          .withDockerfile(new File(dockerFilePath))
          .withTags(Sets.newHashSet(tag))
          .exec(callback)
          .awaitImageId();

  closeDockerClient(dockerClient);

  logger.info("build image success, imageId:" + imageId);

  return imageId;
}
 
示例4
@Override
public void onNext(BuildResponseItem item) {
    // handling error
    if (item.isErrorIndicated()) {
        StringBuilder errString = new StringBuilder("[build][error]: ");
        ResponseItem.ErrorDetail errDetail = item.getErrorDetail();
        if (null != errDetail && null != errDetail.getCode()) {
            errString.append("(").append(errDetail.getCode()).append(") ");
        }

        if (null != errDetail && null != errDetail.getMessage()) {
            errString.append(errDetail.getMessage());
        }

        String errorMessage = errString.toString();
        printDebug(errorMessage);
        dockerBuildError.setErrorMsg("unable to build docker image: " + errorMessage);
    }

    String streamLog = item.getStream();
    if (null != streamLog && !"".equals(streamLog.replaceAll("\n", ""))) {
        printDebug("[build][stream] " + streamLog.replaceAll("\n", ""));
    }

    String statusLog = item.getStatus();
    if (null != statusLog && !"".equals(statusLog.replaceAll("\n", ""))) {
        printDebug("[build][status] " + statusLog.replaceAll("\n", ""));
    }

    String imageIdLog = item.getImageId();
    if (null != imageIdLog) {
        printDebug("[build][image-id]: " + imageIdLog);
    }

    super.onNext(item);
}
 
示例5
@Override
public void onNext(BuildResponseItem item) {
    if (item.isBuildSuccessIndicated()) {
        this.imageId = item.getImageId();
    } else if (item.isErrorIndicated()) {
        this.error = item.getError();
    }
    LOGGER.debug(item.toString());
}
 
示例6
@Override
public void onNext(BuildResponseItem item) {
    if (item.isBuildSuccessIndicated()) {
        this.imageId = item.getImageId();
    } else if (item.isErrorIndicated()) {
        this.error = item.getError();
    }
    LOGGER.debug(item.toString());
}
 
示例7
@Nonnull
private String buildImage() throws IOException, InterruptedException {
    final AuthConfigurations auths = new AuthConfigurations();
    final DockerRegistryEndpoint pullRegistry = getFromRegistry();
    if (pullRegistry != null && pullRegistry.getCredentialsId() != null) {
        auths.addConfig(DockerCloud.getAuthConfig(pullRegistry, run.getParent().getParent()));
    }
    log("Docker Build: building image at path " + fpChild.getRemote());
    final InputStream tar = fpChild.act(new DockerBuildCallable());
    BuildImageResultCallback resultCallback = new BuildImageResultCallback() {
        @Override
        public void onNext(BuildResponseItem item) {
            String text = item.getStream();
            if (text != null) {
                listener.getLogger().println(text);
            }
            super.onNext(item);
        }
    };
    final String imageId;
    try(final DockerClient client = getClientWithNoTimeout()) {
        imageId = client.buildImageCmd(tar)
                .withNoCache(noCache)
                .withPull(pull)
                .withBuildAuthConfigs(auths)
                .exec(resultCallback)
                .awaitImageId();
        if (imageId == null) {
            throw new AbortException("Built image id is null. Some error occured");
        }
        // tag built image with tags
        for (String thisTag : tagsToUse) {
            final NameParser.ReposTag reposTag = NameParser.parseRepositoryTag(thisTag);
            final String commitTag = isEmpty(reposTag.tag) ? "latest" : reposTag.tag;
            log("Tagging built image with " + reposTag.repos + ":" + commitTag);
            client.tagImageCmd(imageId, reposTag.repos, commitTag).withForce().exec();
        }
    }
    return imageId;
}
 
示例8
@Override
public void execute() throws DockerException {
	if (dockerFolder == null) {
		logger.error( "dockerFolder is not configured");
		throw new IllegalArgumentException("dockerFolder is not configured");
	}
	if (imageName == null) {
		logger.error( "imageName is not configured");
		throw new IllegalArgumentException("imageName is not configured");
	}
	if (imageTag == null) {
		logger.error( "imageName is not configured");
		throw new IllegalArgumentException("imageTag is not configured");
	}
	if (!dockerFolder.exists()) {
		logger.error( "configured dockerFolder '" + dockerFolder + "' does not exist.");
		throw new IllegalArgumentException("configured dockerFolder '" + dockerFolder + "' does not exist.");
	}
	final Map<String, String> buildArgsMap = new HashMap<String, String>();
	if ((buildArgs != null) && (!buildArgs.trim().isEmpty())) {
		logger.debug("Parsing buildArgs: " + buildArgs);
		String[] split = buildArgs.split(",|;");
		for (String arg : split) {
			String[] pair = arg.split("=");
			if (pair.length == 2) {
				buildArgsMap.put(pair[0].trim(), pair[1].trim());
			} else {
				logger.error("Invalid format for " + arg + ". Buildargs should be formatted as key=value");
			}
		}
	}
	String dockerFile = this.dockerFile == null ? "Dockerfile" : this.dockerFile;
	File docker = new File(dockerFolder, dockerFile);
	if (!docker.exists()) {
		logger.error( "Configured Docker file '%s' does not exist. {}", dockerFile);
		throw new IllegalArgumentException(String.format("Configured Docker file '%s' does not exist.", dockerFile));
	}
	DockerClient client = getClient();
	try {
		BuildImageResultCallback callback = new BuildImageResultCallback() {
			@Override
			public void onNext(BuildResponseItem item) {
				super.onNext(item);
			}
		};

		BuildImageCmd buildImageCmd = client.buildImageCmd(docker)
				.withTags(new HashSet<>(Arrays.asList(imageName + ":" + imageTag))).withNoCache(noCache)
				.withRemove(rm); // .withTag(imageName + ":" + imageTag)
		if (!buildArgsMap.isEmpty()) {
			for (final Map.Entry<String, String> entry : buildArgsMap.entrySet()) {
				buildImageCmd = buildImageCmd.withBuildArg(entry.getKey(), entry.getValue());
			}
		}
		BuildImageResultCallback result = buildImageCmd.exec(callback);
		this.imageId = result.awaitImageId();

	} catch (Exception e) {
		logger.error( "Error {}", e.getMessage());
		throw new RuntimeException(e);
	}
}
 
示例9
@Override
protected final String resolve() {
    Logger logger = DockerLoggerFactory.getLogger(dockerImageName);

    DockerClient dockerClient = DockerClientFactory.instance().client();

    try {
        if (deleteOnExit) {
            ResourceReaper.instance().registerImageForCleanup(dockerImageName);
        }

        BuildImageResultCallback resultCallback = new BuildImageResultCallback() {
            @Override
            public void onNext(BuildResponseItem item) {
                super.onNext(item);

                if (item.isErrorIndicated()) {
                    logger.error(item.getErrorDetail().getMessage());
                } else {
                    logger.debug(StringUtils.chomp(item.getStream(), "\n"));
                }
            }
        };

        // We have to use pipes to avoid high memory consumption since users might want to build really big images
        @Cleanup PipedInputStream in = new PipedInputStream();
        @Cleanup PipedOutputStream out = new PipedOutputStream(in);

        BuildImageCmd buildImageCmd = dockerClient.buildImageCmd(in);
        configure(buildImageCmd);
        Map<String, String> labels = new HashMap<>();
        if (buildImageCmd.getLabels() != null) {
            labels.putAll(buildImageCmd.getLabels());
        }
        labels.putAll(DockerClientFactory.DEFAULT_LABELS);
        buildImageCmd.withLabels(labels);

        prePullDependencyImages(dependencyImageNames);

        BuildImageResultCallback exec = buildImageCmd.exec(resultCallback);

        long bytesToDockerDaemon = 0;

        // To build an image, we have to send the context to Docker in TAR archive format
        try (TarArchiveOutputStream tarArchive = new TarArchiveOutputStream(new GZIPOutputStream(out))) {
            tarArchive.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);

            for (Map.Entry<String, Transferable> entry : transferables.entrySet()) {
                Transferable transferable = entry.getValue();
                final String destination = entry.getKey();
                transferable.transferTo(tarArchive, destination);
                bytesToDockerDaemon += transferable.getSize();
            }
            tarArchive.finish();
        }

        log.info("Transferred {} to Docker daemon", FileUtils.byteCountToDisplaySize(bytesToDockerDaemon));
        if (bytesToDockerDaemon > FileUtils.ONE_MB * 50) // warn if >50MB sent to docker daemon
            log.warn("A large amount of data was sent to the Docker daemon ({}). Consider using a .dockerignore file for better performance.",
                    FileUtils.byteCountToDisplaySize(bytesToDockerDaemon));

        exec.awaitImageId();

        return dockerImageName;
    } catch(IOException e) {
        throw new RuntimeException("Can't close DockerClient", e);
    }
}
 
示例10
@Override
protected Void execute0(BuildImageCmd command, ResultCallback<BuildResponseItem> resultCallback) {

    WebTarget webTarget = getBaseResource().path("/build");
    String dockerFilePath = command.getPathToDockerfile();

    if (dockerFilePath != null && command.getRemote() == null && !"Dockerfile".equals(dockerFilePath)) {
        webTarget = webTarget.queryParam("dockerfile", dockerFilePath);
    }

    if (command.getTags() != null && !command.getTags().isEmpty()) {
        webTarget = webTarget.queryParamsSet("t", command.getTags());
    } else if (isNotBlank(command.getTag())) {
        webTarget = webTarget.queryParam("t", command.getTag());
    }

    if (command.getCacheFrom() != null && !command.getCacheFrom().isEmpty()) {
        webTarget = webTarget.queryParam("cachefrom", jsonEncode(command.getCacheFrom()));
    }

    if (command.getRemote() != null) {
        webTarget = webTarget.queryParam("remote", command.getRemote().toString());
    }

    webTarget = booleanQueryParam(webTarget, "q", command.isQuiet());
    webTarget = booleanQueryParam(webTarget, "nocache", command.hasNoCacheEnabled());
    webTarget = booleanQueryParam(webTarget, "pull", command.hasPullEnabled());
    webTarget = booleanQueryParam(webTarget, "rm", command.hasRemoveEnabled());
    webTarget = booleanQueryParam(webTarget, "forcerm", command.isForcerm());

    // this has to be handled differently as it should switch to 'false'
    if (command.hasRemoveEnabled() == null || !command.hasRemoveEnabled()) {
        webTarget = webTarget.queryParam("rm", "false");
    }

    if (command.getMemory() != null) {
        webTarget = webTarget.queryParam("memory", command.getMemory());
    }
    if (command.getMemswap() != null) {
        webTarget = webTarget.queryParam("memswap", command.getMemswap());
    }
    if (command.getCpushares() != null) {
        webTarget = webTarget.queryParam("cpushares", command.getCpushares());
    }
    if (command.getCpusetcpus() != null) {
        webTarget = webTarget.queryParam("cpusetcpus", command.getCpusetcpus());
    }

    if (command.getBuildArgs() != null) {
        webTarget = webTarget.queryParamsJsonMap("buildargs", command.getBuildArgs());
    }

    if (command.getShmsize() != null) {
        webTarget = webTarget.queryParam("shmsize", command.getShmsize());
    }

    if (command.getLabels() != null) {
        webTarget = webTarget.queryParamsJsonMap("labels", command.getLabels());
    }

    if (command.getNetworkMode() != null) {
        webTarget = webTarget.queryParam("networkmode", command.getNetworkMode());
    }

    if (command.getPlatform() != null) {
        webTarget = webTarget.queryParam("platform", command.getPlatform());
    }

    if (command.getTarget() != null) {
        webTarget = webTarget.queryParam("target", command.getTarget());
    }

    if (command.getExtraHosts() != null) {
        webTarget = webTarget.queryParamsSet("extrahosts", command.getExtraHosts());
    }

    LOGGER.trace("POST: {}", webTarget);

    InvocationBuilder builder = resourceWithOptionalAuthConfig(command, webTarget.request())
            .accept(MediaType.APPLICATION_JSON)
            .header("Content-Type", "application/tar")
            .header("encoding", "gzip");

    builder.post(new TypeReference<BuildResponseItem>() {
    }, resultCallback, command.getTarInputStream());

    return null;
}