`Docker run`, `exec` e `attach` sono comandi utilizzati per controllare i contenitori Docker. Tuttavia, hanno scopi diversi.
1. `Docker run`: Questo comando è utilizzato per creare un nuovo contenitore e farlo partire. Per esempio, `docker run ubuntu` creerà e avvierà un nuovo contenitore con l’immagine Ubuntu.
1. `Docker exec`: Il comando exec permette di eseguire un comando specifico in un contenitore Docker esistente. Per esempio, `docker exec -it my_container bash` aprirebbe un prompt di bash nel contenitore denominato `my_container`.
1. `Docker attach`: Questo comando viene utilizzato per collegarsi all’input/output/error di un contenitore Docker in esecuzione. Può essere utile se si desidera vedere l’output in tempo reale di un processo in esecuzione nel contenitore o fornire input a tale processo.
La differenza principale sta nel fatto che `run` e `exec` avviano nuovi processi nel contenitore, mentre `attach` si collega a un processo esistente. Inoltre, `run` create un nuovo contenitore, mentre `exec` e `attach` operano su contenitori esistenti.