I've married docker from desktop to deployment, so that is the thread here...
If you host privately then bitbucket offers their CI called pipeline. [1]
Gitlab has their own CI. [2]
Then there is always travis-ci. [3]
Jenkins [4] is great, but I thought it was a little much for my pet projects.
In the end I decided to make one of my side projects a mini-CI/CD, appropriately called minici [5]. Since then I have rolled most of the side projects over to this.
All of these play well with docker (to a degree). Mini-ci (my baby) was built with docker in mind.
Things to watch out for: Each of the CI systems have a flavor of runner file or DSL to run in their CI. This is sometime a YAML file or in Jenkins case a groovy script. In my mini-ci project I opted for a standard Makefile with a specific target name to kick things off.
None of them have a steep learning curve, but I find that the complexity creeps in when you want a full SDLC pipeline with multiple stages, reporting, and alerting. Lots of moving parts.
I'm glad that I put time into learning modern CI/CD systems. It has made me more comfortable to put down a side projects for months at a time and only ship tiny changes without worry of remembering how to do deployments or run tests.
[1] - https://bitbucket.org/product/features/pipelines
[2] - https://about.gitlab.com/features/gitlab-ci-cd/
[3] - https://travis-ci.org
[4] - https://jenkins.io
[5] - https://github.com/undernewmanagement/mini-ci