docker容器中配置dpdk运行环境
安装docker
确定机器上没有docker,有的话直接跳过这一步
apt-get update
apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
换docker仓库
// 如果/etc/docker/目录下存在daemon.json文件 则直接覆盖
// 若不存在则创建并将以下内容写入
{
"registry-mirrors" : [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://cr.console.aliyun.com",
"https://mirror.ccs.tencentyun.com"
]
}
安装Docker Engine-Community
apt update
apt install docker-ce docker-ce-cli containerd.io
拉取一个ubuntu镜像,并配置dpdk运行环境
Dockerfile方式
编写一个Dockerfile
FROM ubuntu:20.04
COPY dpdk.tar /
COPY sources.list /
RUN cd / \
&& cat sources.list > /etc/apt/sources.list \
&& apt update \
&& apt install build-essential -y \
&& apt install python3 -y \
&& apt install python3-pip -y \
&& pip3 install meson ninja pyelftools \
&& apt install libnuma-dev -y \
&& apt install net-tools -y \
&& apt install pciutils -y \
&& apt install inetutils-ping -y \
&& apt install iproute2 -y \
&& apt install linux-headers-5.13.0-51-generic -y \
&& cd / \
&& tar -xvf dpdk.tar \
&& rm dpdk.tar \
&& mv dpdk-stable-21.11.1 dpdk \
&& cd dpdk/ \
&& meson -Denable_kmods=true build \
dpdk.tar是dpdk的压缩包 可以去官网下载
sources.list是本地的apt源,我将上述两个文件都拷贝到镜像中了
sources.list内容如下(用的清华源)详情请参考Ubuntu镜像使用帮助
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
把 /etc/apt/sources.list 文件中的内容用上述文件覆盖即可
Dockerfile中安装了一些不可避免的依赖 其中 pkg-config 和 cmake 安装的时候需要设置系统时区,会卡死,因此先不安装
#通过Dockerfile构建 在Dockerfile文件的当前目录下
#构建的时候好像会把当前目录下的文件拷贝,导致daemon或生成镜像很大
#建议出来Dockerfile和需要拷贝的文件不要放置其他文件
docker build -t dpdk:v1.0.0 .
然后运行这个镜像,继续安装依赖
docker run -itd --name test dpdk:v1.0.0 bash
docker exec -it {container-id} bash
#继续手动安装依赖
apt install cmake
apt install pkg-config
#安装完成后 退出容器
#在宿主机上停止容器
docker stop {container-id}
docker commit {container-id} dpdk:v1.0.1
镜像制作完成
Commit方式
拉取ubuntu镜像,运行,安装依赖,commit,完成
docker pull ubuntu:20.04
docker run -itd ubuntu:20.04 bash
docker exec -it {container-id} bash
#请自己换apt源
apt update
apt install build-essential -y
apt install python3 -y
apt install python3-pip -y
pip3 install meson ninja pyelftools
apt install libnuma-dev -y
apt install net-tools -y
apt install pciutils -y
apt install inetutils-ping -y
apt install iproute2 -y
apt install linux-headers-5.13.0-51-generic -y
apt install cmake -y
apt install pkg-config -y
#解压dpdk.tar 请自己准备
tar -xvf dpdk.tar
rm dpdk.tar
cd dpdk/
meson -Denable_kmods=true build
#编译完成后 不要着急安装 此时提交镜像
#退出容器
docker stop {container-id}
docker commit {container-id} dpdk:v1.0.1
运行镜像 准备环境
docker run -itd --privileged --name dpdk-test \
-v /sys/bus/pci/devices:/sys/bus/pci/devices \
-v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages \
-v /sys/devices/system/node:/sys/devices/system/node \
-v /dev:/dev \
-v /app:/app dpdk:v1.0.1
docker exec -itd {container-id} bash
cd /dpdk/build
ninja install
#如果在提交镜像之前执行此次编译 会导致镜像大小过大 大概有5、6G的样子
#如果很不幸你还编译了样例 基本上就是16G以上了
#所以建议只执行预编译 不真正编译
编译完成后就可以运行以下helloworld看看环境成功没有
可以准备一个shell脚本 启动容器之后 让执行shell脚本 进行安装 并检查安装成功没有或者是否已经安装
cd /dpdk/build/
#文件存在说明编译过了并且成功了
if [ ! -e /dpdk/build/.finished ]
then
ninja install
if [ "$?" != 0 ]
then
echo "ninja install error!!!";
exit 1;
fi
touch .finished
fi
ldconfig
if [ "$?" != 0 ]
then
echo "ldconfig error!!!";
exit 1;
fi
#调用app目录下的app可执行文件 参数可以在调用start.sh的时候跟上
echo $*
/app/app $*
本文来自博客园,作者:correct,转载请注明原文链接:https://www.cnblogs.com/correct/p/16548377.html