If it doesn't have high CP, it won't be in gyms. It's as simple as that. The moveset, weaknesses, and overall combat of Pokémon have negligible effect when it comes to placing.
This has been a big flaw of the game since day one. Many Pokémon will simply never be on defense. Blissey, Snorlax, Rhydon, Dragonite, Gyarados, and Tyranitar will continue to rule the game.
Or more precisely put: functionally every single player can obtain a high-level Vaporeon with relatively little effort. Having at least as much CP as Vaporeon becomes the baseline to get into gyms. Seven Pokemon fill that criteria: Vaporeon, Rhydon, Dragonite, Blissey, Snorlax, Tyranitar, Gyarados.
Everything else is entirely irrelevant as a defender in any reasonably competitive area. It's just not going to get a space in a gym; it will always be at the bottom then gets pushed out really easily when it hits the bottom spot of a lv10 gym.
That then shapes all of the other positions. The best prestigers are Machamp for Blissey, Snorlax, and Tyranitar, Piloswine for Dragonite, Lanturn against Gyarados, Meganium against Rhydon and Vaporeon. Ursaring, Magneton, and Victreebel are cheap replacements for Machamp, Lantern, and Meganium respectively because they're much easier to get more or less regardless of where you live, and so you can have them at a range of CPs to best get juice out of prestiging.
Attacking is pretty irrelevant, to be honest - any reasonably strong Pokemon with high CP will do what you want. If you're concerned with time, then you just want Machamp for Blissey, Snorlax, and Tyranitar, Jolteon for Gyarados, Exeggutor for Vaporeon, Vaporeon for Rhydon, and your slightly stronger Dragonite against their Dragonite. Ursaring and Victreebel are the easiest replacements for Machamp and Exeggutor, the others are pretty common.
If you are concerned about potion supply, then you want Cloyster for their Dragonite, Blissey, and Snorlax, Dragonite for their Vaporeon, Feraligatr for their Rhydon, Jolteon for their Gyarados, and Steelix for their Tyranitar. Vaporeon is the best common Feraligatr and Steelix replacement.
It can be useful to have Umbreon as an all-purpose prestiger, and Alakazam and Gengar as all-purpose fast attackers. There's a few Pokemon like Omastar that is better than Vaporeon as a potion-efficient attacker but not as good as the best such as Feraligatr which are worth it if you have them; but by the time you have most of them you'll normally have the best one so I've left them out. But really, the pool of usable Pokemon is vanishingly small.