在Gitlab中使用Docker Buildx进行多重构建镜像并上传至私有Harbor与Dockerhub需要经过以下步骤:
- 预备条件
为了完成本教程,您需要以下条件:
- 三台虚拟机:一台用于运行Gitlab CI/CD,一台用于运行私有Harbor仓库,另一台用于运行Docker守护进程。确保这些虚拟机上已经安装了Docker和Docker Compose。
- 私有Harbor仓库:用于存储构建的镜像。确保您已经配置好了私有Harbor仓库,并能够通过HTTP或HTTPS进行访问。
- Docker Hub账户:用于将镜像推送到公共仓库中。确保您已经注册了一个Docker Hub账户。
- 配置Gitlab CI/CD
在Gitlab中,您需要配置一个包含Docker Buildx的.gitlab-ci.yml文件。在该文件中,您可以定义构建过程和镜像构建选项。以下是一个示例配置:
```yaml
image: docker:latest
docker:
- builder: docker.io/docker/docker:latest
runtime: linux-amd64
version: “19.03” - builder: docker.io/docker/docker:dind
runtime: linux-arm64
version: “19.03” - builder: docker.io/docker/docker:latest
name: docker-custom
runtime: linux-s390x
version: “19.03”
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: “$CI_PROJECT_DIR/certs”
docker-compose:
script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker-compose pull
- docker-compose build —force-recreate —no-cache
- docker-compose push
echo “Pushing image to Docker Hub”
script: - echo “Pushing image to Docker Hub”
- docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PASSWORD docker.io
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME $DOCKER_HUB_IMAGE:$CI_COMMIT_REF_NAME
- docker push $DOCKER_HUB_IMAGE:$CI_COMMIT_REF_NAME
echo “Pushing image to Harbor”
script: - echo “Pushing image to Harbor”
- docker login -u $HARBOR_USER -p $HARBOR_PASSWORD $HARBOR_REGISTRY
- docker tag $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME $HARBOR_IMAGE:$CI_COMMIT_REF_NAME
- docker push $HARBOR_IMAGE:$CI_COMMIT_REF_NAME
```
上述配置中,我们定义了多个Docker构建器和运行时,以支持不同的架构。我们使用了docker、docker:dind和docker:latest作为构建器,分别对应不同的运行时。我们还定义了一个名为docker-custom的自定义构建器。在构建过程中,我们执行了docker login命令来登录私有Harbor仓库和Docker Hub,然后使用docker-compose pull、docker-compose build和docker-compose push命令来构建和推送镜像。我们还使用echo命令输出了一些日志信息,以便了解构建过程的状态。最后,我们将构建的镜像推送到Docker Hub和Harbor仓库中。
请注意,上述示例配置仅供参考,您可能需要根据您的实际需求进行修改。确保将配置中的变量替换为您自己的实际值。
- 上传镜像至私有Harbor仓库与Docker Hub
在Gitlab CI/CD中,我们已经将镜像推送到私有Harbor仓库和Docker Hub中。如果您需要手动上传镜像,可以使用以下命令:
docker tag :<