使用Docker打造Linux老系统的编译工具链

由于GLIBC及C++运行时库的问题,在新的Ubuntu下编译的软件,拿到老系统上,是往往会运行出错的,而老系统编译出来的软件,则通常能够被新系统兼容

因此准备弄一个老系统下的容器,专门用来编译一些软件,这里ubuntu使用16.04版本。

参考自网络上搜索得到的信息,
准备三个文件,分别是Dockerfile/run.sh/sources.list

其中sources.list是方便国内快速拉取得相应的软件包,内容如下:

Copy Highlighter-hljs
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

而run.sh只用来启动ssh服务器,方便容器运行时远程登陆进去操作,内容如下:

Copy Highlighter-hljs
#!/bin/bash
if [[ ! -e /data ]]; then
mkdir /data
fi
/usr/sbin/sshd -D

Dockerfile内容如下:

Copy Highlighter-hljs
# 以最新的Ubuntu镜像为模板
FROM ubuntu:16.04
# 将本目录下的sources.list作为容器的一个文件
ADD sources.list /root/sources.list
# 使用阿里Ubuntu源,更新快
RUN mv /etc/apt/sources.list /etc/apt/sources.list_bak
RUN cp /root/sources.list /etc/apt/sources.list
RUN apt-get update
# 安装ssh
RUN apt-get install -y openssh-server
# 安装编译器等相关套件
RUN apt-get install -y build-essential libgmp-dev libmpfr-dev libmpc-dev gawk flex bison pkg-config g++ autoconf automake
# 创建目录
RUN mkdir -p /var/run/sshd
# 创建/data目录
RUN mkdir -p /data
# 修改root密码,便于远程登录
RUN echo root:Test1234 | chpasswd
# 配置ssh可以使用root登陆
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 复制配置文件到相应位置,并赋予脚本可执行权限
ADD run.sh /run.sh
RUN chmod 755 /run.sh
# 开放22端口
EXPOSE 22
#设置自启动命令
CMD ["/run.sh"]

使用命令构造镜像,如下(由于机器的原因,构造镜像及运行容器时,域名解析会出错,这里直接add-host一下):

Copy Highlighter-hljs
docker build \
--add-host archive.ubuntu.com:185.125.190.81 \
--add-host mirrors.aliyun.com:101.226.27.113 \
--add-host archive.canonical.com:185.125.188.87 \
-t base_env:16.04 .

运行容器如下(将home目录及data目录映射进容器,同时容器外的12306端口映射进容器的22端口):

Copy Highlighter-hljs
docker run -d \
--add-host archive.ubuntu.com:185.125.190.81 \
--add-host mirrors.aliyun.com:101.226.27.113 \
--add-host archive.canonical.com:185.125.188.87 \
-v /home:/home:rw \
-v /data:/data:rw \
-p 12306:22 \
--name=bld_env_16.04 \
base_env:16.04
posted @   日月王  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示