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

本文介绍了在Docker容器中编译程序的两种方案:1) 激活镜像作为slave编译,利用Jenkins的jnlp-slave或ssh-slave镜像,将容器作为节点机;2) 直接docker run编译,通过挂载宿主机源码到容器内进行编译。建议在编译前预先制作包含必要依赖的镜像,以提高效率和移植性。这种方式避免了在不同环境中搭建编译环境的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果用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.youkuaiyun.com/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程序的镜像(生产中最好一个镜像只编译一种语言程序,并且是基于此语言的镜像)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值