The approach is a bit different depending on your host operating system. You'll also find there are constraints when you introduce a virtualisation layer, like virtualbox or parallels on your desktop - GPUs can be mapped through, but it's painful(ish).
Nvidia make it pretty straight-forward now but we had to branch from that approach a bit for the CoreOS deployment.
https://github.com/NVIDIA/nvidia-docker (Nice pictures)
https://docs.docker.com/engine/reference/run/ (Docker documentation, search for 'privileged')
The approach is a bit different depending on your host operating system. You'll also find there are constraints when you introduce a virtualisation layer, like virtualbox or parallels on your desktop - GPUs can be mapped through, but it's painful(ish).