寻找或创建可运行spring-boot:build-image的GitLab CI Docker镜像
GitLab CI Spring Boot镜像构建镜像解决方案
一、直接选用现成镜像
- 优先考虑官方镜像组合:
- 基于官方Maven镜像(比如
maven:3.8-openjdk-17),在CI脚本里临时安装Docker CLI就行——因为dind服务已经提供了Docker daemon,只需要客户端配合使用。 - 也可以找社区维护的集成了Docker、Java、Maven的镜像,但要留意镜像的更新频率和安全性,别用无人维护的版本。
- 基于官方Maven镜像(比如
二、自己构建定制镜像(推荐,确保可重复性)
1. 编写Dockerfile
以官方镜像为基础,逐步添加所需组件,示例如下:
# 选择带Java的Maven官方镜像作为基础 FROM maven:3.8-openjdk-17 # 安装Docker CLI(版本和dind服务匹配,这里以Docker 24.0为例) RUN apt-get update && \ apt-get install -y --no-install-recommends \ docker-ce-cli=5:24.0.6-1~debian.11~bullseye && \ rm -rf /var/lib/apt/lists/* # 验证组件安装成功 RUN mvn -v && java -version && docker --version
2. 构建并推送到镜像仓库
- 本地构建:
docker build -t 你的镜像仓库地址/ci-mvn-docker:3.8-jdk17 . - 推送到GitLab容器注册表(最方便,和CI环境无缝集成):
先登录GitLab容器注册表,再执行docker push 你的镜像仓库地址/ci-mvn-docker:3.8-jdk17
3. 在GitLab CI中配置使用
示例.gitlab-ci.yml配置:
stages: - build build-spring-boot-image: stage: build image: 你的镜像仓库地址/ci-mvn-docker:3.8-jdk17 services: - name: docker:dind alias: docker variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" DOCKER_TLS_VERIFY: 1 DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client" script: - mvn package -Dspring-boot.build-image.imageName=你的应用镜像名:latest
三、关于开发容器快照的问题
用开发容器快照确实不是靠谱方案,开发容器里冗余依赖多、体积大,而且没有明确的构建步骤,没法保证每次构建的一致性,后续排查问题也麻烦,还是用Dockerfile构建的方式更稳妥。
内容的提问来源于stack exchange,提问作者iamsimonsmale
相关产品推荐
相关产品推荐

