Maven打包成Docker镜像上传至私库

本教程将一个标准的maven项目直接打包成docker镜像并上传至私有构件库

创建私有docker镜像库

在nexus操作界面上,选择创建资源库,选择docker资源库

  • docker(hosted):本地私有构件库
  • docker(proxy):可配置代理网站,本地没有的构建,可在代理网站中下载
  • docker(group):可将hosted和proxy同时配置在group中,使用时可以只使用group的地址

本教程只创建docker(hosted)一种资源库,按照截图内容填写即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLdPr7S7-1600760914267)(evernotecid://DC551418-3E65-468E-9860-646665A3E97C/appyinxiangcom/21626718/ENResource/p55)]
添加完毕后,点击创建按钮,即可创建对应资源库


maven配置

在maven的setting.xml文件中,添加nexus3的登录名

<servers>
    <server>
        <id>docker</id>
        <username>admin</username>
        <password>XXXXXXXXX</password>
    </server>
</servers>

Docker配置

开放Docker 2375控制端口
## 编辑配置文件
vi /usr/lib/systemd/system/docker.service

## 修改 [Service]的ExecStart,增加 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

## 刷新配置文件,重启docker
systemctl daemon-reload
systemctl restart docker

## 查看docker进程是否监听
netstat -ano | grep 2375

## 查看系统网络端口2375是否被docker所监听
netstat -tulp

## 添加防火墙2375/tcp ,并重载防火墙
firewall-cmd --zone=public --add-port=2375/tcp --permanent
firewall-cmd --reload
配置构件库访问IP授权
## 编辑配置文件
vi /etc/docker/daemon.json

## 添加参数
{
    "insecure-registries":["构件库IP:8082"]
}

## 保存配置重启Docker
systemctl daemon-reload
systemctl restart docker

项目配置

## 在pom.xml文件中添加打包相关配置

<build>
    <plugins>
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.2.2</version>
            <configuration>
                <dockerHost>http://构件库IP:2375</dockerHost>
                <serverId>docker</serverId>
                <imageName>构件库IP:8082/devops-center:latest</imageName>
                <baseImage>java</baseImage>
                <maintainer>quchao@bbrightway.com</maintainer>
                <cmd>["java", "-version"]</cmd>
                <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                <forceTags>true</forceTags>
                <imageTags>
                    <imageTag>latest</imageTag>
                </imageTags>
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>
    </plugins>
</build>

镜像打包

## 在项目根目录中执行以下命令
mvn clean package docker:build -DpushImage

执行完毕后,即可在nexus私库中找到对应项目


镜像使用

配置Docker私有库地址
## 编辑docker服务器配置文件
vi /etc/docker/daemon.json

## 添加以下参数
{
    "registry-mirrors": ["http://私有构件库IP:8081"]
}
下载Docker私有镜像
## 执行以下命令下载镜像
docker pull 私有构件库IP:8082/项目名:标签名
启动Docker

按照docker使用方式进行启动即可

### 将 Jenkins 构建的 Docker 镜像推送到 Docker 仓库 #### 准备工作 为了功将构建好的 Docker 镜像推送到 Docker 仓库,需确保已安装必要的工具和插件,并配置好相应的环境变量。 - 安装 DockerMaven 插件于 Jenkins 中。 - 获取目标 Harbor 或其他 Docker Registry 的访问凭证[^1]。 #### 创建 Jenkins Pipeline 脚本 编写 Groovy 脚本来定义 CI/CD 流程中的各个阶段。下面是一个简单的例子: ```groovy pipeline { agent any environment { DOCKER_REGISTRY = 'your.harbor.domain' IMAGE_NAME = "spring-boot-app" TAG = "${env.BUILD_NUMBER}" CREDENTIALS_ID = 'harbor-credentials-id' // 在 Jenkins 中预先设置好的凭据 ID } stages { stage('Checkout') { steps { git branch: 'main', url: 'https://gitlab.com/user/repo.git' } } stage('Build with Maven') { steps { sh 'mvn clean package -DskipTests=true' } } stage('Build Docker Image') { steps { script { docker.build("${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG}") } } } stage('Push to Docker Repository') { steps { script { docker.withRegistry("http://${DOCKER_REGISTRY}", "${CREDENTIALS_ID}") { docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG}").push() } } } } stage('Tag as latest and push again'){ when{ expression{ return env.TAG ==~ /[0-9]+$/ && !params.SKIP_LATEST_TAG} } steps{ script{ def img = docker.image("${DOCKER_REGISTRY}/${IMAGE_NAME}:${TAG}") img.push('latest') } } } } } ``` 此脚本涵盖了从源码检出、编译打包 Spring Boot 应用程序直到最终推送带有版本标签以及 `latest` 标签的 Docker 镜像到指定的私有库整个过程[^2]。 #### 启动容器并拉取镜像到本地运行 一旦镜像功推送到了远程仓库,在任何支持 Docker 的环境中都可以轻松地将其下载下来并启动服务实例: ```bash docker pull your.harbor.domain/spring-boot-app:<tag> docker run -d --name my-springboot-service -p 8080:8080 your.harbor.domain/spring-boot-app:<tag> ``` 上述命令会先获取最新版的应用镜像再以后台模式启动它,并映射主机端口 8080 到容器内的相同端口号以便外部可以正常访问应用提供的 HTTP API 接口[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值