When you use a formula to apply conditional formatting, the formula is evaluated relative to the active cell in the selection at the time the rule is created. In this case, the rule is evaluated for each of the 10 cells in B2:B11, and B2 will change to the address of the cell being evaluated each time, since B2 is relative.
The formula itself uses the SEARCH function to find the position of "dog" in the text. If "dog" exists, SEARCH will return a number that represents the position. If "dog" doesn't exist, SEARCH will return a #VALUE error. By wrapping ISNUMBER around SEARCH, we trap the error, so that the formula will only return TRUE when SEARCH returns a number. We don't care about the actual position, we only care if there is a position.
Case sensitive option
SEARCH is not case-sensitive. If you need to check case as well, just replace SEARCH with FIND like so:
Looking for more than one thing?
If you want to highlight cells that contain one of many different strings, you can use the formula described here.