> Нужно ли для каждого компонента(php, nginx, DB) создавать отдельный образ?
нужно - так вам проще будет чем держать все в одном
Например, если у меня отдельный образ для БД, как я должен к ней подключаться?
Через линки например. Если прилинковали к контейнеру с php образ с базой как db - то он будет виден в контейнере php как db. И к БД mysqlк примеру обращаетесь просто как к db:3306