docker---java上传镜像到Harbor仓库
harbor
Harbor 是一个开源的容器镜像仓库,用于存储和管理 Docker 镜像和其他容器镜像。 * 容器镜像仓库、存储和管理 Docker 镜像和其他容器镜像 * 有什么特点:支持多种镜像格式、易于使用、安全性和访问控制
项目地址:https://gitcode.com/gh_mirrors/ha/harbor
免费下载资源
·
注: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 天前
更多推荐
已为社区贡献2条内容
所有评论(0)