What are the best practices for Deployment using GitLab?

I’m trying to get my head around how to implement deployment using GitLab.
Let me describe the setup:

My organisation has a custom GitLab installed. We are also using OpenStack for provisioning instances.
I’ve created 3 OpenStack instances to support our CI/CD pipeline.
On the first instance (GitLab Runner 01) I installed a runner with a Docker executer.
I was able to successfully link this runner with GitLab.
I’m currently running our unit tests on that runner (using a tag in the gitlab-ci.yml).

So this stage is working fine.
The next stage in my CI/CD pipeline is Deploying to Staging, and this is where I got stuck.
My plan is to have our code deployed to another Open Stack instance as a Docker container.

What I’m not sure is, do I want to use an SSH executer or a Docker executer, or something else?
With the Docker executer, would it deploy docker inside docker? And would the container disappear after the pipeline completes?
Obviously for deployment I want the container to remain and be accessible from the outside.

Hope that explains the situation. Are there any best practices for deployment for our scenario?

Here’s a good place to read about the differences among all of the offered executors.