当前位置: 代码网 > it编程>开发工具>Docker > dockerExecute 函数和docker.build的区别解析

dockerExecute 函数和docker.build的区别解析

2024年12月20日 Docker 我要评论
一、dockerexecute介绍dockerexecute 通常是一个自定义的函数或者由特定的 jenkins 库(如 piper-lib)提供,用于在 docker 容器中执行特定的命令。这类函数

一、dockerexecute介绍

dockerexecute 通常是一个自定义的函数或者由特定的 jenkins 库(如 piper-lib)提供,用于在 docker 容器中执行特定的命令。这类函数可以帮助在构建或测试阶段管理 docker 容器的生命周期,确保步骤在容器内运行。它的作用是启动一个 docker 容器,并在该容器中执行提供的命令.

1、使用场景:

  • 执行需要隔离环境的任务:当你需要在指定的 docker 容器中运行特定的命令,例如运行测试脚本、构建项目等。
  • 保证环境一致性:确保在一个隔离的、标准化的 docker 容器中运行任务,从而消除环境差异带来的问题。
  • 动态设置:允许对容器的配置进行更细粒度的控制,如动态设置环境变量、挂载卷等。

2、dockerexecute方法的使用介绍

因为我的测试背景正好是 公司内部的 docker 镜像存储库中的有一个现成的专用于测试的镜像;所以我直接在这个pipline脚本中去运用了这个方法,给大家看个例子顺便讲解一下:

stage('test') {
    node {
        dockerexecute(script: this,
        dockerimage: "your-docker-image",
        dockername: 'your-docker-name'{
// 在 docker 容器内部执行以下命令
                    sh '''
                        //例如安装依赖,设置环境变量,执行关键脚本等等
                        python main.py
                        '''
}

3、dockerexecute 接受的参数解释:

  • script: this:
    • this 传递给 script 参数。它通常用于在 dockerexecute 函数内部引用当前脚本或上下文。
  • dockerimage: "your-docker-image",
    • 指定 docker 镜像的名称。这个镜像往往包含了你所需要的环境(例如特定版本的 python 及相关工具和依赖)。
  • dockername: 'your-docker-name'
    • 设置 docker 容器的名称。这有助于在 jenkins 日志和其他地方识别运行的容器。

作用总结

  • 在指定的 docker 镜像基础上启动一个 docker 容器。
  • 参数 script: this 引用当前脚本上下文。
  • 参数 dockerimage 指定要使用的 docker 镜像。
  • 参数 dockername 为启动的容器命名。

二、docker.build介绍

docker.build 是 jenkins 的 docker 插件提供的一个方法,用于构建 docker 镜像。它会读取当前目录下的 dockerfile 并构建一个新的 docker 镜像,有助于将你的应用和所有的依赖封装到一个标准的镜像中。

1、使用场景:

  • 构建新的 docker 镜像:当你需要基于 dockerfile 构建一个新的 docker 镜像时使用。
  • 版本控制和部署:将应用打包成 docker 镜像,作为 ci/cd 流程的一部分提交到 docker registry 或用于部署。

2、结合使用

  • 典型的工作流可能涉及先用 docker.build 构建镜像,然后用该镜像运行某些任务,如测试套件。

3、定义场景

  • 假设你有一个 python 项目,你想要构建并在 docker 容器中运行测试。
  • 你需要在项目根目录下创建一个jenkinsfile和一个dockerfile

(1)dockerfile示例:

# 使用已有基础镜像
from your-docker-image
# 设置工作目录
workdir /web-test
# 安装系统依赖包括 chromedriver 和 google-chrome
run apt-get update && apt-get install -y \
    xvfb \
    x11-utils \
    libgl1-mesa-glx \
    wget \
    unzip \
    curl \
    gnupg \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
# 安装 chromedriver
run wget -o /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/113.0.5672.63/chromedriver_linux64.zip \
    && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \
    && rm /tmp/chromedriver.zip
# 下载并安装 google-chrome
run wget -o /tmp/google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
    && apt-get update && apt-get install -y --no-install-recommends /tmp/google-chrome.deb \
    && rm /tmp/google-chrome.deb
# 将 requirements.txt 复制到工作目录
copy requirements.txt .
# 安装 python 依赖
run pip install --no-cache-dir -r requirements.txt
# 将项目文件复制到工作目录
copy . .
# 设置环境变量
env display=:99
# 启动 xvfb 并运行应用
cmd xvfb :99 -screen 0 1920x1080x24 & python pana/generatereport.py

(2)jenkinsfile示例:

@library(["piper-lib", "piper-lib-os"]) _
pipeline {
    agent any
    stages {
        stage('checkout') {
            steps {
                checkout scm
            }
        }
        stage('build-image') {
            steps {
                script {
                    // 使用当前目录下的 dockerfile 构建新的 docker 镜像
                    docker.build('my-repo/my-python-app:latest', '-f dockerfile .')
                }
            }
        }
        stage('test') {
            steps {
                script {
                    dockerexecute(script: this,
                    dockerimage: "my-repo/my-python-app:latest",
                    dockername: 'python') {
                        sh '''
                            set -e
                            # 设置 display 环境变量
                            export display=:99
                            # 启动 xvfb 并在后台运行
                            xvfb :99 -screen 0 1920x1080x24 &
                            # 等待 xvfb 完全启动
                            sleep 5
                            # 打印 python 版本信息
                            python --version
                            # 升级 pip
                            python -m pip install --upgrade pip
                            # 切换到工作目录
                            cd $workspace
                            # 安装 python 依赖
                            python -m pip install -r requirements.txt
                            # 运行 python 脚本
                            python pana/generatereport.py
                            # 可选:确保完成后停止 xvfb
                            killall xvfb
                        '''
                    }
                }
            }
        }
    }
    post {
        always {
            echo 'cleaning up...'
            // 放置任何清理步骤
        }
        success {
            echo 'pipeline succeeded'
        }
        failure {
            echo 'pipeline failed'
        }
    }
}

三、关键区别

1、构建与运行

  • docker.build: 用于构建 docker 镜像,基于项目内的 dockerfile。
  • dockerexecute: 用于在构建好的 docker 镜像基础上运行命令。

2、具体用途

  • docker.build: 主要用于 ci 流程中的构建步骤,确保应用代码和依赖打包在一个镜像中。
  • dockerexecute: 用于在特定的 docker 镜像中执行任务,适合用于测试、执行脚本等需要隔离环境的步骤。

到此这篇关于dockerexecute 函数和docker.build的区别的文章就介绍到这了,更多相关dockerexecute 函数和docker.build内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • Nginx配置ssl支持https全过程(docker版)

    Nginx配置ssl支持https全过程(docker版)

    在docker中配置nginx以使用ssl(即https)主要涉及几个步骤:准备ssl证书和密钥、编写nginx配置文件以使用这些证书,以及通过docker容器... [阅读全文]
  • Ubuntu 24.04 LTS 怎么安装和卸载Docker?

    ubuntu 是一款稳定而出色的操作系统,再搭配 docker 这一强大的容器化工具,能够极大地简化应用程序的创建、部署和管理过程。接下来,本文将详细介绍如何在 ubuntu 24…

    2024年09月14日 开发工具
  • docker原理详解

    docker原理详解

    docker利用linux内核特性,提供高效、隔离的应用运行环境。其工作原理如下:1. 镜像作为只读模板,包含运行应用所需的一切;2. 联合文件系统(union... [阅读全文]
  • docker和虚拟机的区别 docker和虚拟机有什么区别

    docker和虚拟机的区别 docker和虚拟机有什么区别

    docker 和虚拟机:轻量级容器与重量级虚拟化的较量你可能在琢磨 docker 和虚拟机到底有啥区别,为啥一个火得不行,另一个也依然坚挺? 这篇文章就来扒一... [阅读全文]
  • docker可以实现什么功能

    docker可以实现什么功能

    docker:不止是容器,更是应用交付的革命docker能实现什么功能?这个问题的答案远比你想象的要丰富。它不仅仅是简单的“容器化”,而是彻底改变了软件开发、部... [阅读全文]
  • docker是个环境还是软件

    docker是个环境还是软件

    docker 是一种容器化平台,它将应用程序及其依赖项打包成一个独立且可移植的单元,称为镜像。镜像只读且包含所需的一切,包括操作系统的部分内容,容器是镜像的运行... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com