
Porto were on top of City from an early stage but the Blues gradually worked their way into the game and had the better of the chances in the first half before an incident involving Marc Guehi saw tempers flare in the tunnel. Josko Gvardiol was quickly taken off after Haaland opened the scoring within two minutes of the restart - the Croatian had flirted with a second yellow card - and an impressive team performance saw City keep Porto at bay and then seal the points in added time when Haaland scored his second.
Victory makes it four wins from four for Enzo Maresca at the start of the season. Here are the player ratings from the Manchester Evening News.
Get all the best Man City news, updates and analysis straight to your Inbox courtesy of the MEN!
To get it, it's a simple one-two punch.
Donnarumma: Did not look comfortable for big chunks of the game when forced to pass out but did enough to get a clean sheet. 6
Nunes: A few jitters but largely good defensively and very good helping out in the attack and pressing up the pitch. 7
Guehi: Porto players were furious over his coming together in the first half but he was excellent throughout to keep City going. 8
Dias: Some wretched passing that didn't help City get through a battling first half but he was commanding when needed. 7
Gvardiol: Decent going forward but rode his luck in a battle with William Gomes and Porto wanted him sent off. 5
Bouaddi: Excellent from the off, keeping the ball and covering large amounts of ground with it to give City control, even if he tired. 8
Fernandez: Has settled in seamlessly and used the ball intelligently all night - including for the Haaland goal. 7
Cherki: Always buzzing about trying to make something happen, and his work rate was excellent as well. 7
Foden: Some really nice bits of play and the overall effort was more involved as he stayed active in the game. 7
Haaland: A really important goal - his heading has come on significantly - and led the line well. Added a late second. 7
Khusanov (for Gvardiol, 48) Asked to play at left-back and wasn't entirely convincing. 6
Anderson (for Cherki, 63) Gave City the fresh legs they needed at a vital stage of the game. 6
Ndiaye (for Semenyo, 63) Gave a committed performance and worked well on both flanks. 6
Ait-Nouri (for Foden, 75) Made some important contributions to keep Porto out. 6
Kovacic (for Bouaddi, 75) Same as Ait-Nouri. 6
Not used: Rulli, Bettinelli, Reis, Lewis, Allan, McAidoo