Git is an open-source version control system. When developers develop something for example and app, they make continuous changes which they need to keep a track of. These changes might be anything, removing a bug, release new updates etc. Version Control Systems like git keeps a track of all these changes made to the code.
Jenkins is a Continuous Integration (CI) server. CI is a development practice that requires developers to integrate code into a shared repository several times a day. It is a process of running your tests on a non-developer (say testers) machine automatically when someone pushes new code into the source repository.
Docker is a tool that allows the developer to create, run and test applications using containers. Suppose you want to deploy an app, you’ll have to install all the dependencies, library files and what not. Containers makes this job easier. Containers allow a developer to pack up an application with all the dependencies, libraries and all that’s needed to deploy that app into a package and ships it. Now the only thing developer must do is pull the image from dockerhub and create the container on which the app will run. Its something like a virtual machine but not the same. To know more about the differences, watch this video https://www.youtube.com/watch?v=1WnDHitznGY
So now the developer first pushes a commit to GitHub, which in turn uses a webhook to notify Jenkins of the update. Jenkins can then pull the GitHub repository, build the Docker container which contains stack and then run the test. If the test passes, Jenkins will push the code to the master branch.
Few companies that uses these concepts are Amazon, Netflix, Target, Walmart, Facebook etc.