注:springBoot项目上传镜像到Harbor

1.pom文件

        <!--java操作docker -->
        <dependency>
            <groupId>com.github.docker-java</groupId>
            <artifactId>docker-java</artifactId>
            <version>3.1.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>

2.yml文件

#docker访问路径
docker:
  url: tcp://ip:2375
#私服仓库配置
harbor:
  login_address: Harbor登录地址
  username: xx
  password: xxx

3.工具类

import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.Image;
import com.github.dockerjava.api.model.PushResponseItem;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.command.PushImageResultCallback;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.List;

/**
 * docker工具类
 */
@Component
public class DockerUtils {

    //docker服务器
    @Value("${docker.url}")
    private  String DOCKER_URL ;

    //Harbor登录用户名
    @Value("${harbor.username}")
    private   String HARBOR_USERNAME  ;

    //Harbor登录密码
    @Value("${harbor.password}")
    private   String HARBOR_PASSWORD  ;

    //Harbor的登录地址
    @Value("${harbor.login_address}")
    private   String HARBOR_LOGIN_ADDRESS ;


    /**
     * 获取docker链接
     *
     * @return
     */
    public  DockerClient getDockerClient() {
        DockerClient dockerClient = DockerClientBuilder.getInstance(DOCKER_URL).build();
        return dockerClient;
    }


    /**
     * 参考之前文章《docker---镜像的加载》,镜像如何保存到本地
     * 上传镜像
     * @param file  镜像文件
     * @param imageName
     * @throws Exception
     */
    public  void uploadImage(File file, String imageName) throws Exception {
        DockerClient dockerClient = getDockerClient();
        InputStream inputStream = new FileInputStream(file);
        //Harbor登录信息
        AuthConfig autoConfig = new AuthConfig().withRegistryAddress(HARBOR_LOGIN_ADDRESS).withUsername(HARBOR_USERNAME).withPassword(HARBOR_PASSWORD);
        //加载镜像
        dockerClient.loadImageCmd(inputStream).exec();
        //获取加载镜像的名称
        String uploadImageName = "";
        String imageFile = file.getName().substring(0, file.getName().lastIndexOf("."));
        String imageId = imageFile.substring(imageFile.lastIndexOf("_") + 1);
        List<Image> list = dockerClient.listImagesCmd().exec();
        for(Image image : list){
            if(image.getId().contains(imageId)){
                uploadImageName= image.getRepoTags()[0] ;
            }
        }
        //镜像打tag
        dockerClient.tagImageCmd(uploadImageName, imageName, imageName.split(":")[1]).exec();
        //push至镜像仓库
        PushImageResultCallback pushImageResultCallback = new PushImageResultCallback() {
            @Override
            public void onNext(PushResponseItem item) {
                super.onNext(item);
            }
            @Override
            public void onComplete() {
                super.onComplete();
            }
        };
        dockerClient.pushImageCmd(imageName).withAuthConfig(autoConfig).exec(pushImageResultCallback).awaitSuccess();
        //push成功后,删除本地加载的镜像
        dockerClient.removeImageCmd(imageName).exec();
        dockerClient.removeImageCmd(uploadImageName).exec();
        //关闭文件流
        if (inputStream != null) {
            inputStream.close();
        }
    }
}

4.controller

@RestController
public class HarborController {

    @Autowired
    private DockerUtils dockerUtils;
    
    @PostMapping("/uploadImages")
    public ResultObject uploadImages(String projectName, String imageName, String tag, String filePath) throws Exception {
        String imageNames = HOST_HOST + "/" + projectName + "/" + imageName + ":" + tag;
        dockerUtils.uploadImage(new File(filePath), imageNames);
        return ResultObject.ok();
    }
}
GitHub 加速计划 / ha / harbor
23.24 K
4.67 K
下载
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
最近提交(Master分支:1 个月前 )
c5d26723 chore(deps): bump github.com/go-openapi/runtime in /src Bumps [github.com/go-openapi/runtime](https://github.com/go-openapi/runtime) from 0.26.2 to 0.28.0. - [Release notes](https://github.com/go-openapi/runtime/releases) - [Commits](https://github.com/go-openapi/runtime/compare/v0.26.2...v0.28.0) --- updated-dependencies: - dependency-name: github.com/go-openapi/runtime dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: miner <yminer@vmware.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Shengwen YU <yshengwen@vmware.com> Co-authored-by: miner <yminer@vmware.com> 14 天前
76624373 chore(deps): bump github.com/coreos/go-oidc/v3 in /src Bumps [github.com/coreos/go-oidc/v3](https://github.com/coreos/go-oidc) from 3.10.0 to 3.11.0. - [Release notes](https://github.com/coreos/go-oidc/releases) - [Commits](https://github.com/coreos/go-oidc/compare/v3.10.0...v3.11.0) --- updated-dependencies: - dependency-name: github.com/coreos/go-oidc/v3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Shengwen YU <yshengwen@vmware.com> Co-authored-by: miner <yminer@vmware.com> 14 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐