Well, if you read the tutorial thoroughly, you will get all your answers. I will try to summarise all the benefits again here.
Docker itself is a big topic, I cannot explain everything about it here. The problem which docker solves in case of appium or other selenium based test is parallelisation. As you may have also noticed while working with appium, that mobile testing is too slow compare to browser testing. The only way, you can make it fast is by parallelisation, that is why selenium community developed selenium grid.
Without docker, if you try to run your test parallel, you will need to start n number of appium server on different ports, you will also have to set different bootstrap ports, chromedriver ports etc etc. And then start appium driver on corresponding server ports. In case, if you want to scale your run environment i.e, machines running appium test then you will have to provision all those machine with appium dependencies i.e, android-sdks, nodejs etc etc. This is just pain. Nobody wants to work like this and this is one of the main reason for developers getting demotivated easily and ending up not writing tests at all.
If you dockerize your tests, you don’t need to think about run environment. You don’t need to think about what nodejs version, android sdk version is installed. Actually, you don’t need to install them at all. All you need to do is install docker which is so easy.
You can maintain all your test dependencies and run environment in a single file i.e, Dockerfile. Rest, everything will be taken care by docker. You can run as many containers in single machine i.e, as many parallel tests in single host machine without any special requirement.
This is why you should consider dockerizing your tests.
About Xcode and stuff, I will say, currently you cannot run iOS test in docker container as OS X does not support docker natively. You can only run android tests in docker container till Apple starts supporting docker which I am not sure gonna happen soon.
About exposing USB devices to docker container, it is explained in the tutorial, let me know if you still find difficulties in setup.
About running emulator in docker container, well theoretically it is possible. I have not tried it yet, and I am not very much motivated to this now. If you do so, it will be cool and useful.
Reason why I am not interested in emulator is because I have my own android device farm setup. I setup my device farm using this tool https://github.com/openstf/stf.
In my own personal setup, I use Jenkins for CI. Docker for run envrironment and Openstf for managing real devices.