I'm trying to build Docker images without a privileged builder, therefore DinD
is not an option.
I found now two ways of achieving that with either kaniko or img.
Both of them work in my local Docker setup and achieve that goal:
docker run --rm -it --cap-drop=all --cap-add=setuid --cap-add=setgid \
--name img \
--volume "$(pwd):/home/user/src:ro" \
--workdir /home/user/src \
--security-opt seccomp=unconfined \
--security-opt apparmor=unconfined \
r.j3ss.co/img:v0.5.11 build -t user/myimage .
docker run --rm -it --cap-add=chown --cap-add=fowner --cap-add=setgid --cap-add=setuid --cap-add=dac_override \
--name kaniko \
-v "$(pwd):/workspace:ro" \
gcr.io/kaniko-project/executor:v1.7.0 \
--dockerfile /workspace/Dockerfile \
--context dir:///workspace/ \
--no-push
The img
image runs the builder process inside with a non-root user with uid 1000
but requires seccomp
and apparmor
settings, whereas the kaniko
container runs the builder process inside as root user
, but doesn't need seccomp
and apparmor
changes.
I wonder now which is considered more secure, running a container where the process inside is run by the root user or running a container with a normal user but running with seccomp=unconfined
and apparmor=unconfined
.
Would be really great if someone could help me out with that and give me some clues.
My gut is telling me kaniko
seems more secure because from what I understand, disabling the default seccomp
and apparmor
profiles has a bigger impact.
Thanks in advance.