Как в docker работать с несколькими проектами?
все на php7.3, mysql 5.7, nginx
Раз у всех проектов одна среда, достаточно запустить по одному инстансу php-fpm, mysql, nginx и пользоваться ими из всех разрабатываемых проектов.
«Проект», получается, это папка с файлами, отдельная бд или таблицы на общем сервере MySQL, и прописанный в конфигах nginx location /project-42 { root /projects/project-42; ... }

### или целый блок

server {
  listen 80;
  server_name  project42.dev;
  ... 
}
Пожалуй, лучше работать через docker-compose: весь конфиг в одном файле, общая сеть, сервисы друг друга видят, но при этом не светят лишними портами наружу.
Поднимите сначала один из проектов. Потом разберитесь, как добавить файлы остальных через volumes:nginx:
  volumes:
    - "/freelance/projects/Project-0/:/var/www/project0"
    - "/freelance/projects/Project-42/:/var/www/project42"
    # ...
php-fpm:
  volumes:
    # то же самое сюда 2) Как проектам дать не localhost:8080, а нормальный урл типа project.dev? 
В конфиге сервиса nginx в docker-compose.yml пропишите вместо 8080:80 — 80:80, а в локальном файле hosts допишите  127.0.0.1  project.dev  project42.dev
1. Если проекты разные, то придется разрулить внешними портами 8081:80, 8082:80, если проект один из нескольких сервисов, можно сделать 1 прокси с 80 портом и редиректить на контейнеры с php-fpm
2. В /etc/hosts добавьте ваши домены на ip 127.0.0.1. Используйте local вместо dev