Exec vs Shell

So far I have been showing CMD and ENTRYPOINT with a json array ie: CMD [“executable”, “arg1”, “arg2”] This is called the ‘exec’ form and is the Docker prefered form. And if you are using CMD with ENTRYPOINT you must use the ‘exec’ form.

‘shell’ is the alternate form to provide commands and would like: CMD executable arg1 arg2

What are the main differences.