The Dragon-type is often considered an ancestral type as many Legendary Dragon-type Pokémon are revered as deities. Other Dragon-type Pokémon are frequently hard to catch and train. They also evolve late and are relatively rare. An interesting fact is that the stats of many Dragon-type Pokémon surpass the stats of other types of Pokémon.
Most Pokemon with the Dragon-type are usually reptilian in appearance, with a few exceptions being Charizard (who is Fire/Flying by default, but can become part Dragon-type if exposed to a Charizardite X Mega Stone). Other Dragon-type Pokemon lack draconic traits, such as Vibrava (who closely resembles an insect more than a dragon) and Alolan Exeggutor (with traits more close to a plant, more specifically a palm tree).
They're weak against themselves because only a dragon could withstand another dragon. It could also be that being a magical creature, they can only be defeated by another magical creature, hence the Dragon and Fairy weaknesses.
They're weak against the Ice type because dragons are reptilian creatures and reptiles are cold blooded (ectothermic), which causes them to become slow and lethargic when faced with cold temperatures.
The Steel type resists them because in legends, knights used armor of that material to defend themselves when facing a dragon.
They're weak against the Fairy type because in certain mythologies, fairies' magic could dominate oriental dragons. While dragons were often immune to magic in European legends, it is a common theme in fairy tales that knights slay the dragon and for dragons to be weak to magic.