Docker-based fio benchmarking - Part Two
In this article, we will build a docker image which is based on python versioned alpine Linux. Alpine Linux is much smaller than most distribution base images (~5MB), and thus leads to much slimmer images in general.
In the python versioned alpine Linux image, we can add additional packages to support our python script “perfbench.py”. The following is the Dockerfile we will use to build the docker image.
cat Dockerfile
FROM python:3-alpine
RUN apk add --no-cache \
bash \
sudo \
lsblk \
util-linux \
procps \
fio==3.28-r1
COPY perfbench/perfbench.py /
Now that we have Dockerfile defined, we can build the docker image as below.
$ docker build -t perfbench .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
perfbench latest fb9441429ea1 21 minutes ago 61.2MB
python 3-alpine 08d07b62c1c9 2 days ago 48.6MB
Detached mode
To start a container in detached mode, we can use the -d option.
$ docker run -t -d --privileged --name myperfbench -v /data:/data perfbench
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3473aa8332cb perfbench "python3" 4 seconds ago Up 3 seconds myperfbench
$ docker exec -it myperfbench bash
bash-5.1# cat /etc/alpine-release
3.15.0
bash-5.1# python --version
Python 3.10.2
Notes:
1.
Adding the “-t” flag prevents the container from exiting when running in the background. It allocates a pseudo-tty. You would see the following issue if it’s not specified.
$ docker run -d --name myperfbench perfbench
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ed997c56e9e9 perfbench "python3" 6 seconds ago Exited (0) 4 seconds ago myperfbench
2.
Using “–privileged” flag to give extended privileges to the container. For example, we can drop cache inside the container with this privilege.
Foreground mode
For interactive processes (like a shell), you must use -i -t together in order to allocate a tty for the container process.
$ docker run -it --rm --privileged --name myperfbench -v /data:/data perfbench bash
$ docker run --rm --privileged --name myperfbench -v /data:/data perfbench bash -c "python perfbench.py --dir /data --logdir /data/result"
Note:
- By default a container’s file system persists even after the container exits. This makes debugging a lot easier (since you can inspect the final state) and you retain all your data by default. But if you are running short-term foreground processes, these container file systems can really pile up. If instead you’d like Docker to automatically clean up the container and remove the file system when the container exits, you can add the –rm flag.
Push docker image to docker repository
$ docker tag perfbench:latest noname/perfbench:latest
$ docker push noname/perfbench:latest