Docker集成CI/CD的项目实践

2025-01-08 15:50
文章标签 实践 项目 docker 集成 ci cd

本文主要是介绍Docker集成CI/CD的项目实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学...

一、引言

1.1 什么是 CI/CD?

  • CI(Continuous Integration):持续集成,通过自动化工具频繁将代码集成到主分支,并执行自动化构建和测试。
  • CD(Continuous Deployment / Delivery):持续部署/交付,代码通过测试后自动部署到生产或测试环境。

1.2 Docker 在 CI/CD 中的作用

Docker 在 CI/CD 流程中扮演着关键角色,解决了传统开发流程中的环境不一致问题,具有以下优势:

  • 一致性:通过容器保证开发、测试和生产环境一致。
  • 快速部署:轻量化容器使应用部署速度大幅提升。
  • 灵活性:易于与 CI/CD 工具(如 Jenkins、GitLab CI)集成。
  • 隔离性:不同服务可以在独立的容器中运行,互不影响。

二、Docker 在 CI/CD 中的应用场景

2.1 开发与测试环境的标准化

  • 使用 Docker 容器快速创建一致的开发与测试环境,避免 “开发能跑,测试失败” 的问题。

2.2 自动化构建与测试

  • 利用 CI/CD 工具自动构建应用的 Docker 镜像,并执行单元测试、集成测试等。

2.3 自动化部署与发布

  • 将 Docker 镜像推送到镜像仓库(如 Docker Hub、Harbor),并自动部署到生产环境。

三、Docker 与 Jenkins 的集成

3.1 安装 Jenkins 并配置 Docker 环境

  • 安装 Docker 确保主机上已安装 Docker。

    sudo apt-get update
    sudo apt-get install -y docker.io
  • 安装 Jenkins

    • 安装 Jenkins 并启动服务。
    sudo apt-get install -y openjdk-11-jdk wget
    wget -q -O - https://pkg.jenkins.io/Debian/jenkins.io.key | sudo apt-key add -
    sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
    sudo apt-get update
    sudo apt-get install -y jenkins
    sudo systephpmctl start jenkins
  • 安装 Docker 插件

    • 在 Jenkins 管理页面中安装 Docker Pipeline 插件。
  • 配置 Jenkins 用户权限

    • 添加 Jenkins 用户到 Docker 组,确保 Jenkins 能够执行 Docker 命令:
    sudo usermod -aG docker jenkins
    sudo systemctl restart jenkins

3.2 编写 Jenkins Pipeline

使用 Jenkins Pipeline 构建和部署 Docker 镜像。

示例 Jenkinsfile

pipeline {
    agent any
    environment {
        DOCKER_IMAGE = 'myapp:latest'
        DOCKER_REGISTRY = 'dockerhub_username'
    }
    stages {
        stage('Checkout Code') {
            steps {
                echo "Checking out code..."
                checkout scm
            }
        }
        stage('Build Docker Image') {
            steps {
                echo "Building Docker image..."
                sh "docker build -t ${DOCKER_IMAGE} ."
            }
 http://www.chinasem.cn       }
        stage('Push to Docker Hub') {
            steps {
                echo "Pushing image to Docker Hub..."
                withCredentials([string(credentialsId: 'dockerhub-pass', variable: 'DOCKER_PASS')]) {
                    sh "echo ${DOCKER_PASS} | docker login -u ${DOCKER_REGISTRY} --password-stdin"
                    sh "docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}"
                }
            }
        }
        stage('Deploy to Server') {
            steps {
                echo "Deploying application..."
                sh "docker run -d --name myapp-container -p 8080:8080 ${DOCKER_IMAGE}"
            }
        }
    }
}

3.3 自动触发构建

  • 在 Jenkins 项目中配置 Webhooks,监听代码仓库的提交事件。
  • 每次代码提交时,自动触发 CI/CD 流程。

四、Docker 与 GitLab CI 的集成

4.1 GitLab CI/CD 基础概念

  • gitlab-ci.yml:GitLab CI 的配置文件,定义了流水线(Pipeline)中各阶段的任务。

4.2 安装 GitLab Runner

  • 安装 GitLab Runner:

    sudo apt-get install -y gitlab-runner
  • 注册 Runner 并绑定项目:

    sudo gitlab-runner register

4.3 编写 GitLab CI/CD Pipeline

使用 GitLab CI 自动化构建和发布 Docker 镜像。

示例 .gitlab-ci.yml

stages:
  - build
  - test
  - deploy

variables:
China编程  DOCKER_IMAGE: myapp:latest
  DOCKER_REGISTRY: dockerhub_username

before_script:
  - docker login -u $DOCKER_REGISTRY -p $DOCKER_PASSWORD

build:
  stage: build
  script:
android    - echo "Building Docker image..."
    - docker build -t $DOCKER_REGISTRY/$DOCKER_IMAGE .
    - docker push $DOCKER_REGISTRY/$DOCKER_IMAGE

test:
  stage: test
  script:
    - echo "Running tests..."
    - docker run --rm $DOCKER_REGISTRY/$DOCKER_IMAGE pytest

deploy:
  stage: deploy
  script:
    - echo "Deploying application..."
    - docker pull $DOCKER_REGISTRY/$DOCKER_IMAGE
    - docker run -d --name myapp-container -p 8080:8080 $DOCKER_REGISTRY/$DOCKER_IMAGE

五、Docker 镜像的自动构建与发布

  • 使用自动构建服务

    • 在 Docker Hub 中设置自动构建仓库,绑定代码仓库(如 github、GitLab)。
  • 触发条件

    • 每次提交代码时,自动触发构建、测试并发布镜像。

六、实践:CI/CD 集成与自动化

6.1 配置 Jenkins 与 Docker 集成

  • 安装 Jenkins 和 Docker。
  • 编写 Jenkinsfile,实现自动化构建、推送和部署。

6.2 配置 GitLab CI 与 Docker 集成

  • 安装 GitLab Runner 并绑定项目。
  • 编写 .gitlab-ci.yml 文件,实现 CI/CD 流水线。

6.3 自动化测试与部署

php
  • 在 CI/CD 流程中集成自动化测试工具,如 pytest、Jest 等。
  • 完成镜像推送后,自动部署到生产服务器

总结

通过将 Docker 与 CI/CD 工具(Jenkins、GitLab CI)集成,可以实现代码的自动构建、测试和部署,极大提升开发效率与部署速度。掌握这些技术并结合实际场景进行优化,是现代开发团队不可或缺的技能。

到此这篇关于Docker集成CI/CD的项目实践的文章就介绍到这了,更多相关Docker集成CI/CD内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于Docker集成CI/CD的项目实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1152980

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

springboot依靠security实现digest认证的实践

《springboot依靠security实现digest认证的实践》HTTP摘要认证通过加密参数(如nonce、response)验证身份,避免明文传输,但存在密码存储风险,相比基本认证更安全,却因... 目录概述参数Demopom.XML依赖Digest1Application.JavaMyPasswo

docker 重命名镜像的实现方法

《docker重命名镜像的实现方法》在Docker中无法直接重命名镜像,但可通过添加新标签、删除旧镜像后重新拉取/构建,或在DockerCompose中修改配置文件实现名称变更,感兴趣的可以了解一下... 目录使用标签(Tagging)删除旧的php镜像并重新拉取或构建使用docker Compose在Do

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺