selkies-project / selkies-gstreamer

Open-Source Low-Latency Accelerated Linux WebRTC HTML5 Remote Desktop Streaming Platform for Self-Hosting, Containers, Kubernetes, or Cloud/HPC
Mozilla Public License 2.0
342 stars 48 forks source link

Divide Dockerfile to various containers in selkies-vdi #161

Open maxpain opened 1 month ago

maxpain commented 1 month ago

Hello.

https://github.com/selkies-project/selkies-gstreamer/blob/main/addons/example/Dockerfile

At the moment, we have a very complex Dockerfile with every service in one container and have to use supervisor:

It would be better to decompose it into separate tiny images and provide unified and modular docker-compose and Kubernetes manifests with individual containers for each component. This would be easier to use, so we wouldn't need to build our own docker images; we can just use official images instead.

In my case, I use Xorg instead of Xvfb and run it in a different DaemonSet, and every service which depends on it looks like that:

# Wait for X11 to start
echo "Waiting for X display to be ready..."
while ! xdpyinfo > /dev/null 2>&1; do sleep 1; done
echo "X display is ready"

# Now start the needed component

It'll give us the flexibility to choose the desktop environment, X server (Xorg vs Xvfb) Also, you can get rid of docker-nvidia-egl-desktop and docker-nvidia-glx-desktop and the need to copy-paste many configurations in Dockerfiles.

One more advantage: it would be easy to see which container is failing and its logs.

In theory, we can make a fully configurable helm chart.

ehfd commented 1 month ago

@dimm0 I think this is similar to what we have discussed a few days ago.

ehfd commented 1 month ago

Note that this should be a separate approach, preferably in selkies-vdi, which did a very similar thing to earlier Selkies-GStreamer releases.

The existing containers are not to be replaced with this approach because of interoperability in arbitrary Kubernetes environments and Apptainer.

ehfd commented 1 month ago

This itself should not be the most complex thing to do, because I've already tried my best to expose all sorts of sockets in /tmp and thus should work by sharing with tmpfs. It's just labor and testing.

ehfd commented 1 month ago

Note that the reason I don't want this to be default is because this way is harder to accommodate various environments plus the fact that many people want a simple docker run command. selkies-vdi is meant to decompose multiple services, so should be done there.