Docker is a software containerization platform. It is open source, https://github.com/docker/docker, and is capable of running any application as a lightweight container.
Docker containers are a standardized unit that wraps a piece of software into a complete filesystem. These containers has everything contained inside for the software to run. This includes software code, system tools, system libraries etc. Basically if it can be installed on a server it can be installed on a docker container. By containerizing apps your software becomes hardware-agnostic and platform-agnostic. This means you can run your software anywhere.
A common method to distribute and sandbox applications is via virtual machines (VM). This can also be done via Docker, in fact Docker is a better solution over VMs for the following reasons:
Some benefits that VMs have over Docker inculde:
Docker Hub is a cloud service that contains a library of image repositories. These image repositories also contains official repositories of software including products from Canonical, Oracle and Red Hat. There are plenty more features of Docker Hub, you can read more about them at https://docs.docker.com/docker-hub/
Docker Compose is a tool to define and run multiple container Docker applications. In order to build and run multiple containers a Compose file is required to configure the application's different services. Once your application is configured you can create, start, remove, build and many more from a single command from the terminal/command prompt.
A Dockerfile is a text document that contains all the commands a user could call from the command line/terminal to create an image. This file is used in order to automate the build process by executing several command-line instructions in succession.
To see an example of using Docker Compose to run multiple containers with Django please go to this tutorial: Docker Compose for Django