在 CI 中构建与推送镜像
将 Docker 镜像构建与推送集成到 CI/CD 流程中,可以实现持续集成与自动部署,提升开发效率和发布可靠性。
1. 基本流程
- 拉取代码:CI 工具拉取仓库代码
- 构建镜像:使用
docker build创建镜像 - 标记镜像:使用版本号或 Git commit 作为标签
- 登录镜像仓库:Docker Hub 或私有 Registry
- 推送镜像:将镜像推送到远程仓库
2. 使用 GitHub Actions 示例
name: Docker Build & Push
on:
push:
branches:
- main
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: myusername/myapp:latest
`
3. 使用 GitLab CI 示例
stages:
- build
build_and_push:
stage: build
image: docker:20.10.16
services:
- docker:dind
script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:latest .
- docker push $CI_REGISTRY_IMAGE:latest
4. Jenkins Pipeline 示例
pipeline {
agent any
environment {
DOCKER_CREDENTIALS = 'docker-hub-cred'
IMAGE_NAME = 'myusername/myapp'
}
stages {
stage('Build') {
steps {
checkout scm
script {
docker.build("${IMAGE_NAME}:latest")
}
}
}
stage('Push') {
steps {
script {
docker.withRegistry('', DOCKER_CREDENTIALS) {
docker.image("${IMAGE_NAME}:latest").push()
}
}
}
}
}
}
5. 最佳实践
- 使用 CI 工具的 Secret 管理镜像仓库凭证
- 给镜像打上版本号或 Git commit 标签,避免覆盖历史镜像
- 构建阶段尽量缓存依赖,提升构建速度
- 在多阶段构建中,仅将运行环境拷贝到最终镜像,减小体积
通过将 Docker 镜像构建与推送集成到 CI/CD 流程,实现镜像自动化管理,提高应用交付效率与可靠性。
相关内容
- 构建自定义 Registry 本章节介绍如何搭建和管理 Docker 私有 Registry,包括部署自定义 Registry、配置存储与访问权限、镜像推送与拉取流程,以及安全与备份策略,满...
- 与 Kubernetes 的比较与协作 本章节对比 Docker 与 Kubernetes 的异同点,并讲解两者的协作方式,包括容器管理、编排、服务发现、部署流程和最佳实践,帮助理解容器生态系统中的应...
- Rootless Docker 与安全边界 本章节介绍 Rootless Docker 的使用方法及安全边界管理,包括非 root 容器运行原理、配置步骤、权限限制和网络隔离策略,提升容器安全性并降低宿主...
- 常用命令速查表 本章节提供 Docker 常用命令速查表,包括镜像管理、容器操作、网络配置、卷管理、日志查看及调试命令,帮助开发者快速查找和使用 Docker 命令,提高容器管...
- 参考文档与学习资源 本章节整理 Docker 官方文档、社区资源、教程和示例项目,帮助开发者系统学习 Docker 技术,掌握容器化应用的构建、运行、管理和优化方法。
- 示例项目与练习 本章节提供 Docker 示例项目和练习,包括容器化应用部署、Docker Compose 多服务编排、镜像优化、网络配置和存储管理,帮助开发者通过实战加深对...