Basicamente, Giovani, ARG, são argumentos que serão usados em tempo de build da imagem docker.
Após feito o build, você não poderá mexer nessa variável da imagem já gerada.
É interessante se perguntar se a porta de uma imagem deve ser sempre a mesma.
Se a resposta for sim, use ARG, pois após build feito e imagem gerada, essa imagem terá a mesma porta de agora em diante.
Se a resposta for não, use ENV, pois após build feito e imagem gerada, você poderá passar a porta que desejar, na hora de levantar o container baseado nessa imagem.
O pessoal, as vezes, usam os dois, assim é possível alterar a porta (que o caso de exemplo) tanto na hora de fazer o build da imagem quanto na hora de fazer o run da imagem.
Não sei se ajudei, mas segue um link do stack que fala sobre isso.
https://stackoverflow.com/questions/41916386/arg-or-env-which-one-to-use-in-this-case