One thing you might try is creating the /etc/apt/sources.list file once with all of the repositories; then running apt-get update once only; then running apt-get install once only.
Another really important thing you should do is break this up into multiple containers. Glancing through your Dockerfile it looks like you’re trying to embed nginx, PostgreSQL, and your application all into a single image; those really should be three (and I’d recommend using the standard postgres:9.4 image over building your own).
To a first approximation commands like service, initctl, and systemctl just don’t work in Docker and you should figure out how to accomplish your goals without using them. (This is a combination of every RUN line and every docker run command starting over with a clean filesystem and no processes running, and systemd trying to manage too much such that it can’t run inside Docker.)
Since the “activate” script sets some environment variables and that’s it, you could combine these as
Or, you can directly run /venv/bin/pip without running the activate script, and the right thing will happen.
Or, a Docker container is a lot like a virtual environment in that it’s an isolated filesystem space, and in this context there’s no real harm (and it’s IMHO simpler) to globally pip install things into /usr/local.