使用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下基本就是几条命令搞定,可以参考下面文章:

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镜像仓库地址,以及启用sclepel仓库。

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 .
posted @ 2022-08-16 15:26  乌合之众  阅读(2631)  评论(0编辑  收藏  举报
clear