How GitLab and Docker work together

It would be very helpful having a section that explains in deep how docker runners works, for example it is not clear how I directly have access to my project files. In addition, if I create my custom docker image are there any limitations or constraints to obey?