Mkhitaryan, 24, had been a key summer target for Liverpool but has opted to sign for the beaten Champions League finalists.
The Armenia international joins Dortmund as a replacement for Mario Goetze, who signed for rivals Bayern Munich in a German record 37m euro (£32m) transfer this summer.
"We are delighted that we got a fantastic new signing for the attacking midfield role in Henrikh Mkhitaryan," BVB sporting director Michael Zorc told Dortmund's website.
Mkhitaryan performs in a central role off the striker but last season scored a remarkable 25 league goals in 28 games as Shakhtar secured a fourth successive Ukrainian league title.
The playmaker joined Shakhtar from Metalurg Donetsk in 2010 and departs having scored a total of 44 goals in 106 games for the club.