You can think of DSL as overly complex arguments for functions written in a more general programming language. The real programming language parses the DSL code and does something with it, typically, the DSL code only focuses on the what you want to do, and the larger system figures out the how.
Examples of DSL include all query languages (SQL, XPath, ...), all template languages (Django, Smarty, ...), shell scripts, specially including stuff like twill, a command driven web browser (mostly used for automated test), data storage and exchange languages (XML, YAML, ...), and document languages like LaTex, HTML or CSS.
Some languages with very flexible syntax like TCL and Lisp build their DSL directly into the language... when possible. The majority or languages use strings, usually loaded from external files.
Are there any particular advantages of using it? Using them for their indented purposes is very advantageous to the point you will turn to them without knowing, just like you have been using (I pressume) SQL or HTML without thinking of them as a DSL.
I'll dare saying there are enough DSL out there for any sort of application you may need, you almost certainly don't need to learn how to write your own one.