A container (the runtime instance of the image) is not a vm. The intention of a container is to encapsulate a service (~=an application) and its depencies. It is not the docker way to put all your services in a single image.
Your Dockerfile needs to cover how the application and its depencies are installed and configured. Also you need to take care of poviding an entrypoint script that deals with pre-application-start tasks during the container start.
An entrypoint script typicaly takes care of fixing permissions (if you use a supervisor like supervisord, s6-overlay, tiny or any other), modifiying configuration files based on passed environment variables or wait for services outside the container (e.g. databases in other containers or as a standalone service) to become accessible.
There is no need to install anything else than the docker engine. Though, getting aquainted with the documentation on how to write a Dockerfile helps a lot It is neither complicated, nor does it takes a long time to read it.
Docker is a good fit for services that do not require a Desktop UI. If i see your list of pre-reqs i am affraid that you actualy are trying to dockerize Desktop applications… I am not saying that it is impossible to dockerize those, but they are pretty restricted on where and how they can be operated. I dockerized some Linux Applications that required a X-Server myself… trust me, it is not the easiest take on learning how to dockerize applications .
If your application is a headless service or a webapplication then things should be quite straigt forward.