Manuel Pellegrini's men were 5-0 up and cruising after just 35 minutes as David Silva, Aleksandar Kolarov, Micah Richards and Edin Dzeko (2) punished a lacklustre start from the Italians.
But Milan rallied and scored three goals in six minutes through an Stephan El Shaarawy brace and one from Andrea Petagna.
But there was to be no repeat of the goal blitz in the second half with both teams tiring as the game wore on and the Premier League side easily held on.
The first half of the game had been breathless and Silva slotted home City's opener after just three minutes when he pounced on a lay-off from Dzeko.
And it wasn't long before City stamped their authority on the game as two goals in four minutes from Richards and Kolarov had them 3-0 up midway through the half.
Richards' strike came after new-boy Fernandinho played a delicious through ball to the full-back, who finished at the second attempt.
Kolarov, being allowed the freedom of the left side by Milan's reluctance to attack, got his strike after collecting a pass after a powerful run from Stevan Jovetic.
City, fielding a stronger side than Milan and further on in their pre-season preparations, added a fourth in the 32nd minute when Dzeko got the first of his brace, tapping home a Jesus Navas cross.
But his second was to be the goal of the game. Just four minutes after his first strike, the Bosnian forward showed tremendous skill to control the ball on his chest with his back to goal, before turning in one movement to volley home.
City were in exhibition mode but just when they thought it was all too easy, Milan then scored three in six minutes. El Shaaraway broke clear of a poor offside trap to get his team's first in the 37th minute and then stayed alert to score a second two minutes later.
City stopped, believing there was about to be a whistle for offside, but when play continued the youngster simply slotted home unchallenged.
Petagna suggested a comeback was on when he made it 5-3 in the 42nd minute, but that would prove to be the final score.