使用Docker搭建CentOS 7编译开发环境
开发的软件要支持多个版本的Linux
平台,最低需要支持到CentOS 7
,以及一些 CentOS 7 的衍生版本。
因为我日常并不使用 CentOS 7,如果在我本机编译的话,会有glibc
版本问题,如果全部依赖都使用静态链接glib
的方式也很麻烦,关于这个问题可以查看 glibc 版本(version 'GLIBC_2.14' not found)问题 。因此我一般都是再 CentOS 7 下进行编译打包发布,这样的话问题会少很多。Golang 的项目在 CentOS 7 下编译也不会出现 FATAL: kernel too old. Kernel
的问题。
如果使用虚拟机的话,就比较重量级了,所以我一般都使用docker
环境来进行项目的编译。放这里做一个环境配置过程的记录和备份。
这个我已经推送到hub.docker.com
上面了,可以直接拉取使用 docker pull liu2g/compilenv:v3
。如果速度太慢,可以使用下面命令进行docker pull dockerproxy.com/liu2g/compilenv:latest && docker tag dockerproxy.com/liu2g/compilenv:latest liu2g/compilenv:latest && docker rmi dockerproxy.com/liu2g/compilenv:latest
。
1、安装 docker 环境#
这里就不详细说了,在Linux下基本就是几条命令搞定,可以参考下面文章:
- 【全面详细】Windows10 Docker安装详细教程
- ArchLinux Wiki Docker (简体中文)
- 如何在 Ubuntu 上安装和使用 Docker
- 如何在debian11上安装docker
- centos7安装Docker详细步骤(无坑版教程)
2、创建 centos 7 容器#
使用下面命令拉取 centos 7 镜像到本地
docker pull centos:7
使用下面命令创建 centos 7
系统容器
docker run -v /mnt/work:/mnt/work -v /home:/home --name=centos7go --hostname=centos7go --tty centos:7 /bin/bash
我这里绑定了两个目录,这是我需要用的,可以不使用。这里使用--tty
参数,是为了让容器可以一直运行,避免退出exec
就停止了容器运行。
如果需要,可以安装中文语言环境,参考 Docker中centos7的中文支持
# 安装语言包 yum install kde-l10n-Chinese -y yum install glibc-common -y # 安装本地化语言运行时需要使用的语言环境对象代码 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 # 写入环境变量到配置 echo "export LC_ALL=zh_CN.utf8" >> ~/.zshrc
3、配置编译环境#
配置软件源#
先配置yum
镜像仓库地址,以及启用scl
和epel
仓库。
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak #下载阿里云镜像的repo文件 curl /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo # 刷新一下 yum 缓存 yum clean all && yum makecache # 安装 epel 源 yum install -y epel-release # 安装 scl 源(devtoolset工具) yum install -y centos-release-scl # 安装完成,再次刷新一下缓存 yum clean all && yum makecache
参考:
安装开发环境#
安装git
软件,因为默认仓库的git
版本比较低,所以安装rh-git227
。
yum install rh-git227 # 启用,也可以把这个文件软链接到 /etc/profile.d 目录下去 source /opt/rh/rh-git227/enable # ln -s /opt/rh/rh-git227/enable /etc/profile.d/git.sh
安装 devtoolset
软件包,也可以根据需要安装llvm-toolset
。
# 可以先搜索,根据需要安装对应版本的 devtoolset yum install -y devtoolset-11 # 使用 scl 命令来启用工具集(也可以之间 source /opt/rh/devtoolset-9/enable) scl enable devtoolset-11 bash # ln -s /opt/rh/devtoolset-11/enable /etc/profile.d/devtoolset-11.sh
其他常用的开发工具安装
yum install upx cmake3 ln -s /usr/bin/cmake3 /usr/bin/cmake yum install golang go env -w GOPROXY="https://proxy.golang.com.cn,direct" go env -w GOPATH="/mnt/work/go" go env -w GOCACHE="/mnt/work/go/cache"
参考:
Dockerfile#
将上面全部操作做成了一个Dockerfile文件(多了安装配置 zsh 的过程),内容如下:
FROM centos:7 VOLUME /mnt/work # 下面依次执行 # 切换yum源,启用 epel 和 scl 软件仓库 # 安装 git2.27 # 安装 devtoolset 11/python3.8/upx/cmake等 # 安装 golang ,并设置环境变量 # 安装中文语言包,并将配置写入环境变量 # 安装 zsh # 安装 oh-my-zsh,使用 gitee 镜像 RUN cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak \ && curl https://mirrors.aliyun.com/repo/Centos-7.repo > /etc/yum.repos.d/CentOS-Base.repo \ && yum clean all && yum makecache \ && yum install -y epel-release centos-release-scl \ && yum clean all && yum makecache \ && yum install -y rh-git227 \ && ln -s /opt/rh/rh-git227/enable /etc/profile.d/git.sh \ && yum install -y devtoolset-11 \ && ln -s /opt/rh/devtoolset-11/enable /etc/profile.d/devtoolset-11.sh \ && yum install -y rh-python38 \ && ln -s /opt/rh/rh-python38/enable /etc/profile.d/python38.sh \ && yum install -y upx cmake3 wget perl-IPC-Cmd \ && ln -s /usr/bin/cmake3 /usr/bin/cmake \ && yum install -y autoconf autoconf-archive automake bison libtool binutils \ && yum install -y golang \ && go env -w GOPROXY="https://proxy.golang.com.cn,direct" \ && go env -w GOPATH="/mnt/work/go" \ && go env -w GOCACHE="/mnt/work/go/cache" \ && yum install -y kde-l10n-Chinese \ && yum install -y glibc-common \ && yum install -y zsh \ && source /opt/rh/rh-git227/enable \ && yum clean all \ && wget https://ghproxy.com/https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh \ && export REMOTE=https://gitee.com/mirrors/ohmyzsh.git \ && chmod a+x install.sh \ && ./install.sh \ && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 \ && echo "export LANG=zh_CN.utf8" >> ~/.zshrc \ && echo "export LC_ALL=zh_CN.utf8" >> ~/.zshrc
构建命令
docker build -t compilenv:v3 .
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2016-08-16 FreeImage编译及遇到问题解决
2016-08-16 Qt StyleSheet皮肤css源码
2016-08-16 linux下编译安装vim7.4并安装clang_complete插件