Is it bad coding practice/design to make a class which will only be instantiated once?
No, even if only instantiated once, you need a class for it. But don't suppose you will always only need one instance, now and in the future.
Suppose you make a game, and you have a player class:
class Player {
...
}
You will instantiate one player class in your game, and use always the same object. Nothing wrong with it.
However, don't make a Singleton out of it! Today you design your game and think "Well, it will always be a one-player game. I will use a Singleton for my Player". But in version 2, you may want to implement multiplayer - and then you are getting into trouble. You will have to rewrite and adapt a lot of code, because your design does not support instantiating multiple players.
The same is with caches. Or loggers. Or network interfaces. Today, you think you will only need one, always, for sure. But in a future version you need to add a second. Be aware of this situation.