[v6] build: add dockerfile for building docker image
Checks
Commit Message
Adding a Dockerfile with Ubuntu bionic base image to build dpdk as shared
library. This docker image could be used as base image to build and run
dpdk applications in containers.
Signed-off-by: Abdul Halim <abdul.halim@intel.com>
---
v2:
* renamed Dockerfile name from Dockerfile.ubuntu to Dockerfile.bionic
* added call to ldconfig to update cache of libraries to include newly
installed DPDK libs
---
v3:
* added example use-case of dpdk dockerfile in extras/README.md
---
v4:
* changed meson build to use tmp dir in docker build
* changed sample app dockerfile to add only helloworld source code
---
v5:
* fix whitespace error
---
v6:
* clean up temp build directory
---
extras/Dockerfile.bionic | 40 +++++++++++++++++++++++++++++++++++++
extras/README.md | 51 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 91 insertions(+)
create mode 100644 extras/Dockerfile.bionic
create mode 100644 extras/README.md
Comments
> -----Original Message-----
> From: Abdul Halim <abdul.halim@intel.com>
> Sent: Thursday, December 12, 2019 00:39
> To: dev@dpdk.org
> Cc: ray.kinsella@intel.com; yasufum.o@gmail.com; Ruifeng Wang (Arm
> Technology China) <Ruifeng.Wang@arm.com>; Abdul Halim
> <abdul.halim@intel.com>
> Subject: [PATCH v6] build: add dockerfile for building docker image
>
> Adding a Dockerfile with Ubuntu bionic base image to build dpdk as shared
> library. This docker image could be used as base image to build and run dpdk
> applications in containers.
>
> Signed-off-by: Abdul Halim <abdul.halim@intel.com>
>
> ---
>
> v2:
> * renamed Dockerfile name from Dockerfile.ubuntu to Dockerfile.bionic
> * added call to ldconfig to update cache of libraries to include newly
> installed DPDK libs
>
> ---
>
> v3:
> * added example use-case of dpdk dockerfile in extras/README.md
>
> ---
> v4:
> * changed meson build to use tmp dir in docker build
> * changed sample app dockerfile to add only helloworld source code
>
> ---
> v5:
> * fix whitespace error
>
> ---
> v6:
> * clean up temp build directory
> ---
> extras/Dockerfile.bionic | 40
> +++++++++++++++++++++++++++++++++++++
> extras/README.md | 51
> ++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 91 insertions(+)
> create mode 100644 extras/Dockerfile.bionic create mode 100644
> extras/README.md
>
Tested-by: Ruifeng Wang <ruifeng.wang@arm.com>
new file mode 100644
@@ -0,0 +1,40 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2019 Intel Corporation
+FROM ubuntu:bionic
+
+# install requirements for getting and building DPDK
+# including dependencies for DPDK features
+RUN apt-get update && apt-get install -y \
+ build-essential \
+ pkg-config \
+ python3 \
+ python3-pip \
+ ninja-build \
+ libjansson-dev \
+ libbsd-dev \
+ libnuma-dev \
+ libssl-dev \
+ zlib1g-dev \
+ libpcap-dev \
+ libibverbs-dev \
+ && pip3 install meson \
+ && apt-get clean && rm -rf /var/lib/apt/lists/*
+
+ADD . /tmp/dpdk
+
+WORKDIR /tmp/dpdk
+
+RUN meson /tmp/dpdk-build \
+ -Ddefault_library=shared \
+ -Dmachine=default \
+ -Dper_library_versions=false \
+ && ninja -C /tmp/dpdk-build install \
+ && ldconfig \
+ && cd /; rm -rf /tmp/dpdk /tmp/dpdk-build
+
+WORKDIR /
+
+# Installed DPDK Shared library location:
+# lib dir : /usr/local/lib/
+# include : /usr/local/include/
+# pkgconfig file: /usr/local/lib/x86_64-linux-gnu/pkgconfig/libdpdk.pc
new file mode 100644
@@ -0,0 +1,51 @@
+# Build DPDK Docker image
+
+To build a docker image run the following command from dpdk root directory.
+
+```
+DOCKER_TAG="dpdk"
+docker build -t ${DOCKER_TAG} -f extras/Dockerfile.bionic .
+```
+
+# Example of how to use this dpdk library image
+
+The following steps shows how to use the dpdk shared library container to build
+and run a dpdk application without having to build dpdk library for each
+application.
+
+## Create a dpdk sample app docker file with 'dpdk' as the base image
+
+Create a docker file to build the helloworld application from example/helloworld
+source files in dpdk root directory.
+
+```
+cat << EOF > Dockerfile.dpdkSampleApp
+FROM dpdk
+
+ADD examples/helloworld /opt/examples/helloworld
+
+WORKDIR /opt/examples/helloworld
+RUN make && cp build/helloworld-shared /usr/local/bin/helloworld
+EOF
+```
+
+## Build sample app docker image
+
+```
+DOCKERAPP_TAG="dpdk-helloworld"
+docker build -t ${DOCKERAPP_TAG} -f Dockerfile.dpdkSampleApp .
+```
+
+This sample app now can be run like any other applicaiton in a docker container.
+
+```
+$ docker run --rm --privileged -it -v /dev/hugepages:/dev/hugepages dpdk-helloworld
+```
+
+## Running the sample app
+Once inside the container run helloword binary
+
+```
+$ root@11233ed2e69c # helloworld
+```
+