Hi,

These are just my 2 cents to your Question:

We use Docker as it makes managing the Software and Upgrading far more comfortable and easy/fast.

The way we do it:

- using Docker
- putting Docker into swarm Mode (with docker swarm init --advertise-addr 127.0.0.1)
- installing Portainer (docker stack deploy --compose-file portainer.yml portainer)

Then for "our" Software we deploy a so called stack, wich means it's a yml file where all you need to install is defined.
This "all" is at least FreeSWITCH and Postgres (never run Freeswitch with the builtin-db in production!!!!).
For us it's another 20 docker images including nginx and our Controller that communicates with FreeSWITCH and several other pieces of our Software.

The big advantage is we can practically upgrade with one click to the latest software version for everything.
In our build tool all software is uploaded to a custom docker registry. (u just can ran your own docker registry with: https://hub.docker.com/_/registry)

!important! You will need to run Freeswitch in the Host Network Stack, this is done in the yml with:
    networks:
      - outside

!important! You must run the db with bindmounts (we use mindmounts for everything)

As bindmounts are used you got to create the directories in a batch prior to install the yml.

A big advantage: all config files are in one directory (we choose /var/lib/yourcompany/..)

See attached example files: portainer.yml install_docker_debian.sh 

Portainer has Web-Interface. First time you login you must select "local" and choose a user/password
You can then add the registry in portianer.
And then just add the Stack by copy-paste the yml.
