In practice you almost never create a bare Pod yourself. A bare Pod has no self-healing: if its node dies, the Pod is gone for good. Instead you create a Deployment, StatefulSet, or DaemonSet, and the controller creates and recreates Pods for you to match a desired count.
The big trade-off is that Pods are cattle, not pets. You cannot rely on a Pod's IP or name staying the same, so you put a Service in front of a set of Pods to get a stable address. You do not write important data to the Pod's local disk because it vanishes on restart, so you mount a PersistentVolume for anything that must survive.
Keep Pods small and single-purpose. Stuffing three unrelated apps into one Pod means they scale together, fail together, and get redeployed together, which is rarely what you want. Use multiple containers in one Pod only when they are tightly coupled and genuinely need to share localhost or a volume.