I'm currently running Proxmox and I'm trying to set up a few applications: Immich, Node-RED, and the ARR Suite. I've heard that using Docker would be the way to go, but I'm not sure whether I should run all of these apps in a single Docker instance or if they need separate instances. Since I'm still learning the ropes with Proxmox, adding Docker into the mix feels a bit overwhelming. Any advice?
6 Answers
You'll want to run one Docker instance, but each of your apps will run as separate containers within that instance. If you use Docker Compose, you can group related containers into one stack which makes communication between them easier, as they can talk to each other using their container names instead of IP addresses. Plus, there are other benefits to using stacks!
The standard and best practice is to have one virtual machine running multiple containers. This setup minimizes overhead while providing maximum isolation from Proxmox, which is pretty efficient!
Since you're using Proxmox, you'll run Docker within an LXC container or a Linux VM. Each of your applications will run in its own container. Be cautious with default configurations though; for instance, many skip updating the default storage paths which can cause issues. Also, make sure you're not trying to bind multiple containers to the same ports on your host, or you’ll run into conflicts.
Docker leverages features of the Linux kernel to create isolated environments called containers, which are more efficient than running multiple VMs. I’ve experimented with merging stacks (like sharing Redis between apps) but found it's best to keep them separate. If they need to communicate, you can set up networks to manage this communication easily without needing to merge them into a single application.
You can actually run the entire ARR stack using a single Docker Compose file. There's a great tutorial video that can guide you through the process: [YouTube Video](https://youtu.be/TJ28PETdlGE).

Just to clarify, Docker Compose isn’t necessary to create a stack; it’s simply a tool to make managing Docker commands easier.