container is described as perhaps the most common template type: it schedules a Container. The other three are real template types doing other jobs — script is a convenience wrapper around container that adds a source field, resource operates on Kubernetes objects through the API rather than running your image, and suspend runs nothing at all, it just holds the workflow.
Official docs