docker容器中配置dpdk运行环境

安装docker

请参考Ubuntu 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 $*

参考
Ubuntu Docker安装
Ubuntu镜像使用帮助

posted @ 2022-08-03 19:07  correct  阅读(680)  评论(0编辑  收藏  举报