Hampered by the absences of John Stones and Aymeric Laporte due to injury, City boss Pep Guardiola named Fernandinho alongside Nicolas Otamendi at the heart of his defence and was able to celebrate a clean sheet despite the odd shaky moment.
Riyad Mahrez scored his first goal of the season to settle City's nerves after 24 minutes and his interplay with Ilkay Gundogan produced the visitors' best moments at Metalist Stadium.
Gundogan, ably assisted by Rodri and Kevin De Bruyne, ran the show from midfield and surged forward at every opportunity, getting himself on the scoresheet thanks to Mahrez's assist seven minutes before half-time.
Guardiola warned of the danger Shakhtar posed on the counter-attack in his pre-match comments and Luis Castro's men did manage to set Moraes free on a number of occasions, but the Brazil-born striker failed to carry his impressive domestic form onto Europe's biggest stage.
City rounded off a highly satisfying Group C opener when Gabriel Jesus rolled a third goal home 14 minutes from time to secure a repeat result of last season's clash between these teams on this ground.
City pressed Shakhtar from the outset and Rodri should have done better when De Bruyne's cross hit the back of his head.
Marlos sent a thundering drive flashing past Ederson's net as Shakhtar countered, but City's pressure paid off when Gundogan curled a shot onto the post and it bounced into the path of Mahrez, who guided it into the empty net from close range.
Moraes had a gilt-edged chance to equalise from the corner of the six-yard box but his shot hit Ederson in the chest and City punished his wastefulness.
Rodri's cross-field ball found Mahrez and the Algeria international played in Gundogan, who fired a first-time shot just inside the post with deadly accuracy.
Moraes made a poor attempt to chip Ederson when the City keeper got caught outside his box early in the second half but Raheem Sterling missed an even better chance at the other end, hitting the outside of the post after Sergey Krivtsov gifted him possession 12 yards out.
Jesus made no such mistake when De Bruyne capitalised on sloppy Shakhtar passing and released the Brazilian, who rolled a shot into the bottom-right corner of the net and made certain of his side's winning start in the Champions League.