numam-spdk/doc/containers.md
Karol Latecki 3d8a0b19b0 doc: Fix Markdown MD032 linter warnings
"MD032 Lists should be surrounded by blank lines"
Fix this markdown linter error by inserting newlines or
adjusting text to list points using spaces.

Signed-off-by: Karol Latecki <karol.latecki@intel.com>
Change-Id: I09e1f021b8e95e0c6c58c393d7ecc11ce61c3132
Signed-off-by: Karol Latecki <karol.latecki@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/434
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Maciej Wawryk <maciejx.wawryk@intel.com>
2020-02-06 09:46:06 +00:00

2.6 KiB

SPDK and Containers

This is a living document as there are many ways to use containers with SPDK. As new usages are identified and tested, they will be documented here.

In this document

  • @ref spdk_in_docker

Containerizing an SPDK Application for Docker

There are no SPDK specific changes needed to run an SPDK based application in a docker container, however this quick start guide should help you as you containerize your SPDK based application.

  1. Make sure you have all of your app dependencies identified and included in your Dockerfile
  2. Make sure you have compiled your application for the target arch
  3. Make sure your host has hugepages enabled
  4. Make sure your host has bound your nvme device to your userspace driver
  5. Write your Dockerfile. The following is a simple Dockerfile to containerize the nvme hello_world example:
# start with the latest Fedora
FROM fedora

# if you are behind a proxy, set that up now
ADD dnf.conf /etc/dnf/dnf.conf

# these are the min dependencies for the hello_world app
RUN dnf install libaio-devel -y
RUN dnf install numactl-devel -y

# set our working dir
WORKDIR /app

# add the hello_world binary
ADD hello_world hello_world

# run the app
CMD ./hello_world
  1. Create your image

sudo docker image build -t hello:1.0 .

  1. You docker command line will need to include at least the following:
  • the --privileged flag to enable sharing of hugepages
  • use of the -v switch to map hugepages

sudo docker run --privileged -v /dev/hugepages:/dev/hugepages hello:1.0

or depending on the needs of your app you may need one or more of the following parameters:

  • If you are using the SPDK app framework: -v /dev/shm:/dev/shm
  • If you need to use RPCs from outside of the container: -v /var/tmp:/var/tmp
  • If you need to use the host network (i.e. NVMF target application): --network host

Your output should look something like this:

$ sudo docker run --privileged -v //dev//hugepages://dev//hugepages hello:1.0
Starting SPDK v20.01-pre git sha1 80da95481 // DPDK 19.11.0 initialization...
[ DPDK EAL parameters: hello_world -c 0x1 --log-level=lib.eal:6 --log-level=lib.cryptodev:5 --log-level=user1:6 --iova-mode=pa --base-virtaddr=0x200000000000 --match-allocations --file-prefix=spdk0 --proc-type=auto ]
EAL: No available hugepages reported in hugepages-1048576kB
Initializing NVMe Controllers
Attaching to 0000:06:00.0
Attached to 0000:06:00.0
Using controller INTEL SSDPEDMD400G4  (CVFT7203005M400LGN  ) with 1 namespaces.
  Namespace ID: 1 size: 400GB
Initialization complete.
INFO: using host memory buffer for IO
Hello world!