While the terms are somewhat synonymous as they both refer to weak players, I think of each as being discriptive of a different style of weak player.
donk = too stubborn (like a donkey) to lay down their hand when they should know they are behind
fish = a player (usually inexperienced) that will consistently make questionable and ill-advised plays
I think of the fish as being the player that's going to be extremely active but very passive, trying to limp in and then calling raises with mediocre cards. Their post flop play consists mainly of check/call (not trapping) and check/fold. They will win a pot here or there, but generally tend to spew chips at a somewhat steady rate, until they realize they are far below the average stack. Then they will tighten up and wait for big hands to play. But if they consider hands we fold without a second thought to be playable, then the hands we consider playable, they consider to be monsters. Which means calling 3-bets OOP with Q-10 and the like.
When I think of a donk, I think of the players you see 4-betting all-in pre with K-J suited. I think of them chasing draws or even shoving all-in with them. These players will call off all their chips, as long as they know there is a card in the deck that they can hit without regard to how slim the
odds are of that card coming. Because they occasionally will hit their 3 and 4 outers on you, you will never be able to convince them that they are not making smart plays regardless of the amount of statistical data you provide. When they miss their draws, it's because you were lucky. When they hit them, it's because they are good and knew their card was coming. They are too stubborn to be convinced of anything else, which is what makes them donkeys.