Milan were second best for much of Sunday's match at Stadio Olimpico, but their 19-year-old goalkeeper made vital saves in both halves to help secure a valuable point which keeps them above their opponents in the table.
Krzysztof Piatek scored twice against Napoli in the Coppa Italia on Tuesday in his maiden Milan start, and marked the first time he has been named in Gennaro Gattuso's league XI by netting a first-half opener.
Nicolo Zaniolo equalised for Roma just 22 seconds into the second half, but Donnarumma ensured the hosts could not get the morale-boosting result they needed after the 7-1 cup humiliation at the hands of Fiorentina on Wednesday.
Edin Dzeko cut inside and forced an early save from Donnarumma, but it was Milan who struck first in the 26th minute.
Lucas Paqueta forced the opening by winning possession from Lorenzo Pellegrini down Milan's left and working well to get a cross into the box, with Piatek on hand to convert from six yards.
Donnarumma made an excellent one-handed stop to deny Zaniolo, and soon after produced more heroics to keep out both Patrik Schick's header and also Dzeko's attempt to convert the rebound just before half-time.
Roma did find an equaliser with their first attack after the restart, however. Zaniolo volleyed in from two yards after Donnarumma had kept out what would have been an own goal from Mateo Musacchio, Rick Karsdorp's cross having caused defensive chaos.
At the other end, Suso had a penalty claim denied when he was bundled over by Aleksandar Kolarov but Roma were looking the most likely, with Donnarumma to the fore again to block a Dzeko header.
The last big opportunity saw Pellegrini send a looping header against the post after Kolarov's cross, before the Roma midfielder was fortunate to avoid a second yellow card for fouling Suso.
Pressure stays on Di Francesco
The Curva Sud section of Roma's support staged a walkout at half-time to protest against recent poor Roma performances, and the team's failure to win here will keep the pressure on head coach Di Francesco, despite an improved display. They have now gone three games without a win in all competitions and remain a point behind fourth-placed Milan.
Both sides missed the chance to take full advantage of Inter's shock loss to Bologna earlier on Sunday, but Gattuso will leave the happier man, with his side proving hard to beat having now suffered just one loss in their last 10 Serie A games.
Donnarumma delightful
Milan's goalkeeper made seven saves in the match, the pick of the bunch being his tremendous double-stop to thwart Schick and Dzeko before the break. Even Roma's goal only came after he had made a superb block to stop Musacchio from finding his own net.
Dzeko does not deliver
Dzeko has not scored in two consecutive league games since October 2017, but that streak should have come to an end. He had four attempts on goal but failed to find a way past Donnarumma, the chance from the rebound just before half-time being one he should have taken, despite the keeper's impressive speed to block him. This was not the display the striker needed after being sent off in the midweek Coppa Italia humiliation, either.