docker容器编译程序 的两种方案

2023-05-16

如果用docker 容器编译程序 有两种方案可供选择

  • 1,激活镜像作为slave编译

  • 采用Jenkins提供的jnlp-slave 或ssh-slave 标准镜像二次封装,或者初始镜像,然后通过label 选择镜像后进行编译;

    这种编译的原理是:Jenkins通过标签选择相关docker镜像,并激活成容器,把此容器当做slave(节点机)使用;

​ Jenkins提供的镜像地址:https://hub.docker.com/u/jenkinsci

​ jnlp-slave 和ssh-slave 镜像都能激活作为slave节点使用,区别是采用不同协议连接到容器内部:ssh和jnlp;

使用这种方式需要额外在Jenkins里面配置,插件里面安装docker插件,然后配置Docker Host URL,来找到可以使用的docker,如果Jenkins和docker在同一台服务器可以直接填写为:unix:///var/run/docker.sock ,如果不在同一台机器要填写docker所在的机器ip:tcp://ip:2375,并且要在docker所在机器的 /etc/docker/daemon.json 里面添加2375端口

    "hosts": [

​        "tcp://0.0.0.0:2375",

​        "unix:///var/run/docker.sock"

​    ]

具体怎么调用这里不作为重点,这里重点说明的方案的选择,可以参考

https://blog.csdn.net/qq_31977125/article/details/82999872 这位博主有详细的操作步骤

下面是重点说明编译方式

  • 2,直接docker run编译

把源码下载到宿主机,通过-v 挂载到容器中,然后指定入口命令编译此目录,编译完成后 销毁容器

docker run --rm -v `pwd`:/mypro -w /mypro nodeshift/centos7-s2i-nodejs:10.16.0 /bin/bash -c "npm install"

 docker run --rm -v `pwd`:/opt/mypro -w /opt/mypro goenv-centos:test7  /bin/bash -c "GOPROXY=https://goproxy.io /usr/local/go/bin/go  build"

上面两个是例子,goenv-centos:test7是自制作的镜像

注意:提前制作好镜像,镜像里面把各种编译依赖放进去,制作镜像有两种方式

​ 激活一个基础镜像,编译下载各种依赖库,能正式编译后,commit容器为镜像,这种方式不推荐

​ 建议把操作步骤整理起来 编写到dockerfile中

实战案例

基于centos7.6 镜像制作出可以编译go/rust程序的镜像(生产中最好一个镜像只编译一种语言程序,并且是基于此语言的镜像)

Dockerfile

FROM centos:7.6.1810
WORKDIR /opt
ADD https://github.com/facebook/zstd/releases/download/v1.4.0/zstd-1.4.0.tar.gz ./
ADD https://github.com/edenhill/librdkafka/archive/master.zip  ./
ADD https://studygolang.com/dl/golang/go1.12.5.linux-amd64.tar.gz  ./
COPY expect.sh ./
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.bak && \
    curl -s  http://mirrors.aliyun.com/repo/Centos-7.repo  -o  /etc/yum.repos.d/CentOS-Base.repo && \
    curl -s  http://mirrors.aliyun.com/repo/epel-7.repo -o  /etc/yum.repos.d/epel-7.repo && \
    yum repolist && \
    yum -y install wget make expect gcc gcc-c++ unzip openssl-devel  clang-devel libpcap-devel perl.x86_64 \
    which.x86_64 git && \
    curl  -sSf  https://sh.rustup.rs -o rustup.sh && chmod  a+x rustup.sh && \
    chmod  a+x expect.sh && /bin/bash ./expect.sh && \
    source $HOME/.cargo/env && \
    tar xzf zstd-1.4.0.tar.gz  && \
    tar xzf go1.12.5.linux-amd64.tar.gz -C /usr/local  && \
    unzip  master.zip  && \
    cd zstd-1.4.0 && CFLAGS="-O3 -fPIC" make install && \
    cd ../librdkafka-master && ./configure --prefix=/usr && make && make  install && \
    cp  -rf /usr/lib/librdkafka* /usr/lib/pkgconfig  /usr/lib64 && \
    chmod a+x -R /usr/local/go && \
    echo -e 'export GOPROXY=https://goproxy.io' >> /etc/profile && \
    echo -e 'export GOROOT=/usr/local/go' >> /etc/profile && \
    echo -e 'export GOPATH=/opt/mypro' >> /etc/profile && \
    echo -e 'export export PATH=$GOROOT/bin:/root/.cargo/bin:$PATH' >> /etc/profile && \
    echo -e 'export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib64/llvm' >> /etc/profile && \
    echo -e 'export LD_LIBRARY_PATH=/usr/local/lib/:${LD_LIBRARY_PATH}' >> /etc/profile && \
    source /etc/profile && \
    yum clean all && \
    rm -rf /opt/* && \
    mkdir -p /opt/mypro
COPY ustc-config /root/.cargo/config

ustc-config

[source.crates-io]
registry = "https://github.com/rust-lang/crates.io-index"
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

expect.sh

#!/usr/bash
expect<<-END
  spawn bash rustup.sh
  expect "1)&quot;Proceed&quot;with&quot;installation&quot;(default)"
  send "1\n"
set timeout -1
expect eof
exit
END

把Dockerfile,和expect.sh、ustc-config放在同一目录,然后在此目录执行build命令:

docker build  -t 172.16.35.31:1180/apm-images/centos7-goenv:1:1  .
  • go程序编译:
docker run --rm -v `pwd`:/opt/mypro -w /opt/mypro  172.16.35.31:1180/apm-images/centos7-goenv:1  /bin/bash -c "GOPROXY=https://goproxy.io /usr/local/go/bin/go  build"
  • rust程序编译
docker run --rm -v `pwd`:/opt/mypro -w /opt/mypro 172.16.35.31:1180/apm-images/centos7-goenv:1  /bin/bash -c "/root/.cargo/bin/cargo build --release"

这种方式编译最大优点,不管是开发、运维还是测试都无需搭建编译环境(有时候搭建一套编译环境是费时费力的事情,而且移植性差),直接从docker仓库拉取此镜像后就能编译;

个人博客主页:https://blog.zhenglin.work/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker容器编译程序 的两种方案 的相关文章

  • Visual Studio 未能正确加载包问题

    近期 xff0c 安装VS插件的时候 xff0c 出现了包未能正确加载的问题 见下图 针对这个问题 网上找了一些答案 可以有以下2种方法 1 重置VS用户数据 2 删除VS注册表后重装VS 针对第1种重置用户数据 只要找到VS exe文件路
  • Go get命令出现terminal prompts disabled解决

    Go get命令出现terminal prompts disabled解决 ubuntu 64 ubuntu go get u github com XXX OOOO cd git clone https github com XXX OO
  • java反编译工具jd-gui-osx for mac M1芯片无法使用

    目录 下载Java Decompiler JD Java Decompiler http java decompiler github io 提示jdk错误 记录一下遇到的问题 话不多说 直接上步骤 打开官网后点击JD GUI栏目的Down
  • Keil(MDK-ARM-STM32)介绍、下载、安装与注册

    写在前面 本文讲述的内容是Keil MDK ARM版的介绍 下载 安装与注册 xff0c 如果需要了解Keil C51版相关的文章 xff0c 可以到我博客 xff0c 或微信公众号查看并下载 Keil xff08 C51 xff09 介绍
  • 操作系统实验——进程管理与进程通信

    广州大学学生实验报告 实验一 进程管理与进程通信 一 实验目的 1 掌握进程的概念 xff0c 明确进程的含义 2 认识并了解进程并发执行的实质 xff0c 进程的阻塞与唤醒 xff0c 终止与退出的过程 3 熟悉进程的睡眠 同步 撤消等进
  • 关于FreeRTOS的vTaskDelayUntil()延时函数的理解

    关于任务操作的相关函数走读 函数vTaskDelayUntil if INCLUDE vTaskDelayUntil 61 61 1 参数pxPreviousWakeTime xff1a 上一次任务唤醒时间点 xff0c 任务中第一次调用该
  • 关于FreeRTOS的系统时钟节拍

    不管是什么系统 xff0c 运行都需要有个系统时钟节拍 xTickCount就是FreeRTOS的系统时钟节拍器 在每个滴答定时器中断中xTickCount 43 1 xff0c 比如stm32中 xff0c 具体是在delay c中的vo
  • python基础:for循环和while循环区别和相同点,range函数介绍

    循环语句可以让计算机重复和自动的执行代码 xff0c 减少人的工作量 文章目录 for循环while循环两种循环对比 for循环 格式 for in 循环语句 xff0c 简称for循环 xff1b 先看下它的格式吧 span class
  • 不忘初心•砥砺前行——江苏叁拾柒号仓智能科技有限公司2019年中总结会

    2019年7月20日上午 xff0c 江苏叁拾柒号仓智能科技有限公司 下称37号仓 2019年中总结会在集团1楼多媒体厅隆重举行 xff0c 37号仓执行董事魏标 xff0c 总经理卞石磊 xff0c 子雨集团党支部书记 工会主席徐伟 xf
  • python基础:布尔运算和四个语句

    布尔运算 计算机的逻辑判断 xff0c 只有True 判断为真 和alse 判断为假 两种结果 xff0c 计算真假的过程就叫做布尔运算 xff0c True和False就是布尔值 while和if中的布尔运算 相同点 xff1a 在whi
  • 解读编码和文件读写

    解读编码和文件读写 编码的本质就是让只认识0和1的计算机 xff0c 能够理解我们人类使用的语言符号 xff0c 并且将数据转换为二进制进行存储和传输 这种从人类语言到计算机语言转换的形式 xff0c 就叫做编码表 xff0c 它让人类语言
  • BeautifulSoup库的简单使用

    BeautifulSoup是什么 网页解析库BeautifulSoup xff0c 用来解析和提取网页中的数据 安装BeautifulSoup库 BeautifulSoup库目前已经进阶到第4版 xff08 Beautiful Soup 4
  • 运行地面站详细步骤

    第一步 xff1a 打开bin目录 xff0c 保留Backup DLL文件夹 xff0c 删除除Backup DLL文件夹之外的所有文件 xff1b 第二步 xff1a 打开Backup DLL文件夹 xff0c 复制里面所有的dll 粘
  • 关于qt和js的html一些修改

    1 调试打印js文件 maptype tms html 文件 xff0c 没有qdebug 和printf 可以用 xff0c 但可以用alert 来代替 xff0c 用alert 地图上会出现对应窗口显示 xff0c 来判断程序 逻辑 2
  • qt+directshow usb摄像头及音频设备录制视频

    最近来了个项目 xff0c 有一块功能是usb摄像头录制视频并且录音的实现 xff0c 网上的东西七七八八什么技术都有 xff0c 先用opencv打了半天环境不能录音频 xff0c 后来用ffmpeg xff0c 原谅我太菜 xff0c
  • VSCode中Git解决冲突的步骤

    VSCode中Git解决冲突的步骤 1 gt gt 合并分支后 如果存在冲突 右下角会出现一个提示框 提示 存在合并冲突 请在提交之前解决这些冲突 2 gt gt 左边导航第三个图标中 xff0c 找到产生冲突的文件 3 gt gt 打开文
  • VsCode一定要安装的几个插件

    1 Vetur VUE语法高亮 智能感知 Emmet等 xff0c 包含格式化功能 xff0c Alt 43 Shift 43 F xff08 格式化全文 xff09 xff0c Ctrl 43 K Ctrl 43 F xff08 格式化选
  • ccm-slam环境配置

    ccm slam 配置过程记录 介绍 xff1a 一种协同视觉slam方法 传统的slam是一个机器人完成定位与建图的任务 xff0c 但对于大范围的环境 xff0c 多机器人协同建图往往能提高效率 xff0c ccm slam就是基于这个
  • 从大到小排序,Comparator类型

    import java util Arrays import java util Comparator public class Main public static void main String args 注意 xff0c 要想改变默
  • 11种服务器编程语言对比(附游戏服务器框架) 2020.06

    各语言对比 语言版本TIOBE排名垃圾回收类型系统性能Web后端非Web后端特性Java142是中Python3 83是动态低C 43 43 174高不适合Node js147 是动态低PHP7 48是动态低不适合Go1 1412是中Rub

随机推荐

  • 【stm32定时器配置步骤和相关概念解析——LL库】

    系列文章目录 文章目录 系列文章目录前言一 cubeMX定时器介绍二 通用寄存器三 PWM模式四 LL库 PWM模式 xff08 定时器14为例 xff09 1 结构体说明2 LL库代码 前言 一 cubeMX定时器介绍 Slave Mod
  • 华为MateBook&暗影精灵游戏本恢复出厂设置

    总目录 文章目录 总目录前言一 华为MateBook恢复出厂设置1 接上电源2 重启 开机按F10 二 暗影精灵游戏本恢复出厂设置1 接上电源2 重启 开机按F11 前言 记一次个人华为笔记本和暗影精灵游戏本的恢复操作 xff0c 说不准下
  • C/C++类库大全(附github连接)

    C 43 43 资源大全中文版 浏览中发现一篇总结的很全的c c 43 43 类库 xff0c 在此做记录 xff0c 以备不时之需 github地址 xff08 内有各个库的源码连接 xff09 https github com jobb
  • VScode 中 Clangd 使用

    1 VScode 中 Clangd 使用 VScode 中 Clangd 优缺点 优点 占用系统资源确实比 C C 43 43 少了很多 xff0c 无论是 CPU 还是 内存的使用 xff08 最重要 xff09 缺点 操作相较于 C C
  • FreeRTOS 线程安全的printf输出(使用STM32F103)

    https blog csdn net baidu 23187363 article details 53811144 环境 STM32F103开发板 HAL库 xff08 标准库也没事换个串口输出函数就行 xff09 MDK5 28 ST
  • Windows下配置sphinx+reStructuredText详解

    Windows下配置sphinx 43 reStructuredText详解 最近有朋友想在windows下做个人笔记 xff0c 没有找到顺手的工具 xff0c 问我有什么好的工具推荐 正好前两天在网上看到一款做文档的利器sphinx 4
  • 进程的组成部分

    在UNIX系统中进程由以下三部分组成 xff1a 进程控制块PCB 数据段 正文段 进程控制块 PCB 是用来记录进程状态及其他相关信息的数据结构 PCB是进程存在的唯一标志 xff0c PCB存在则进程存在 系统创建进程时会产生一个PCB
  • 对一个程序的理解

    一 什么是程序 1 程序的结构 指令 数据 2 指令 操作CPU的一段指令集合 xff0c 更详细的说 xff0c 是对数据的加载 xff0c 移动 xff0c 以及需要进行的计算的集合 指令存储在 非易失存储器 xff08 一般指 xff
  • mv替换文件名前缀shell命令

    for name in prefix do mv name 96 echo e name sed s prefix g 96 done
  • VSCode Workspace使用,以及file.exclude、search.exclude的使用模板

    代码如下 xff1a 文件名 xff1a Project code workspace 文件描述 xff1a 此文件文件为VSCode工作区启动文件 文件内容 xff1a 代码路径 工作区设置 不包含的文件 包含路径 文件编码 针对的编译器
  • roslaunch turtlebot_gazebo turtlebot_world.launch 报错ResourceNotFound

    报错 xff1a ResourceNotFound gazebo ros 这里是引用 logging to home kwunphi ros log e14aa722 32b9 11ea 94f7 00d8613afe77 roslaunc
  • 基于MDK Keil将中断及中断服务函数定位到RAM中的.sct文件

    VectorTable ROM 0x08000000 0x00000200 VectorTable RAM 0x20000000 0x00000200 o RESET 43 First IntFunction ROM 0x08000200
  • Linux镜像各种文件名来源

    vmlinux或vmlinuz xff1a Linux直接编译得到 的elf文件 Image xff1a 上面的 elf 文件会比较大 xff0c 为了烧录方便 xff0c 会使用 objcopy工具制作成镜像文件 xff0c 叫 Imag
  • 字节序最本质的地方

    个人理解 xff1a 1 数据的传输路径是 内存 gt 总线 gt 内存 xff1b 2 内存有存放顺序 xff1b 3 总线有发送顺序 xff1b 4 不同的机器内存的存放顺序可能不同 xff1b 5 总线发送顺序也有不同 xff1b 所
  • gcc 关于目标平台相关选项的查询

    gcc target help 列出目标平台可以指定的选项 xff0c 包括gcc选项 汇编选项 链接选项 gcc help 61 target 列出目标平台可以指定的选项 xff0c 只有gcc选项 gcc march 61 armv7
  • 描述点云关键点提取ISS3D、Harris3D、NARF、SIFT3D算法原理

    ISS3D xff08 Intrinsic Shape Signatures 3D xff09 xff1a ISS3D算法是一种基于曲率变化的点云关键点提取算法 它通过计算每个点与其近邻点的曲率变化 xff0c 得到该点的稳定性和自适应尺度
  • 描述相机内部参数以及外部参数

    内部参数和外部参数是数字摄影测量中经常使用的两个概念 xff0c 它们分别用于描述相机内部性能和相机与物体之间的几何关系 内部参数 xff1a 内部参数是相机的内部性能参数 xff0c 包括焦距 主点位置 径向畸变等 这些参数决定了相机成像
  • 最优化建模、算法与理论(二)—— 典型优化问题

    参考书籍 最优化 xff1a 建模 算法与理论 文章目录 1 线性规划2 最小二乘问题3 复合优化问题4 随机优化问题5 半定规划6 矩阵优化7 整数优化附录 常用软件包 库或软件 1 线性规划 一般形式 min
  • 蒙特卡罗求积分(使用MATLAB实现,分层抽样,重点抽样,对偶变量,控制变量,Metropolis Hasting,Gibbs)

    蒙特卡罗求积分 64 author HCF 背景概述 为了解决某问题 xff0c 首先需要把它变成一个概率模型的求解问题 xff0c 然后产生符合模型的大量随机数 xff0c 最后对产生的随机数进行分析从而求解问题 xff0c 这种方法叫做
  • docker容器编译程序 的两种方案

    如果用docker 容器编译程序 有两种方案可供选择 1 xff0c 激活镜像作为slave编译 采用Jenkins提供的jnlp slave 或ssh slave 标准镜像二次封装 xff0c 或者初始镜像 xff0c 然后通过label