How bitcoin core bootstraps [in source code]
The following source line shows how a set of seed domains are used to bootstrap the network:
https://github.com/bitcoin/bitcoin/blob/06d573f053c63eb6521c62d210c5924418ae2b83/src/chainparams.cpp#L121

These are called seed nodes. Once the bitcoin core is connected to one live node successfully, it can receive more peer information from that node and continue to expand the network. It can then save that information on disk and if the system is restarted, it can reload from disk. If that fails it can go back to seed domains again.
The above list is accessed here:
https://github.com/bitcoin/bitcoin/blob/320e518b9062ea5510abd7876d22dc5bd3352535/src/net.cpp#L1591

And then it is looped through here:
https://github.com/bitcoin/bitcoin/blob/320e518b9062ea5510abd7876d22dc5bd3352535/src/net.cpp#L1620