We are doing exactly what you are looking to do now. We are relying on GitLab to handle this for us. We are using githost.io to host our GitLab instance. We are using GitLab CI/CD to automatically handle our builds, testing, and deployment to private Docker registry also hosted in GitLab.
Here’s our flow:
Code pushed to master branch GitLab repo
GitLab builds image using dind
GitLab runs any unit tests using dind
GitLab runs all services using docker-compose using dind
GitLab runs all integration tests on complete environment running using docker-compose
GitLab pushes image into GitLab private registry
GitLab triggers redeploy in Docker Cloud (only for testing/staging environment, production is a manual redeploy)
I can help you out privately to match our environment closer if you’d like.