An IP address is a number assigned to servers connected to the internet, similar to a telephone number. A typical IP Version 4 address looks like this: 188.8.131.52.
Please note that in the Minecraft community, the term “IP Address” typically refers to any address used to connect to a Minecraft servers including hostnames or domain names, which are not IP addresses in the technical sense of the term. In this article, we the term "IP Address" in its technical sense only.
The Domain Name System is a system that converts a hostname or domain name into an IP address. For example, if your Minecraft client or web browser wants to connect to HostHorde.com, your client needs to know the IP address of the server at HostHorde.com.
A domain name is human readable address that can be used instead of an IP address. For example, HostHorde.com is more readable and easier to remember than 184.108.40.206.
Domain names can be purchased from a registrar like NameCheap or Gandi.
A CNAME record is an abbreviation for Canonical Name record. A CNAME record specifies that a domain name is an alias of another.
For example, assume that you own example.com and you have a HostHorde server at s1.hosthorde.com:25599. You can create a CNAME record at play.example.com to point to s1.hosthorde.com. In your Minecraft client, you can connect to play.example.com:25599 and the client will know to connect to s1.hosthorde.com:25599
CNAME records are primarily useful for creating custom addresses for plugins that provide web based interfaces, such as Dynmap. You can alias your dynmap at s1.hosthorde.com:8999 to map.example.com:8999.
A SRV record is an abbreviation for Service record. A SRV record specifies the location of a service, in this case, the location of a Minecraft server. Unlike a CNAME record, an SRV record allows you to specify a port allowing you to omit it from the address you share with your players.
For example, assume that you own example.com and you have a HostHorde server at s1.hosthorde.com:25599. You can create an SRV record at play.example.com to point to s1.hosthorde.com:25599. In your Minecraft client, you can connect to play.example.com and the client will know to connect to s1.hosthorde.com:25599.
SRV records are the best way to create a custom server address.