What is important to know is that it is really a way to deal with Monads. IO Actions are Monads, and that is why "do notation" is so useful there. However, "do notation" can be used in situations entirely apart from IO.
Some people criticize the existance of do notation, and for interesting reasons. The usual criticism is along the lines that it is a shortcut and as such both lures the novice into bad habits. Even worse it tends to breed a variety of misunderstandings. I don't have a dog in this fight. I think it is worth understanding this point of view, and in particular not to fall into the pitfalls that they point out.
Best of all, take a look at this classic essay:
Tom's software pages / tom@mmto.org