Markram's innings of 125 was the mainstay of South Africa's 309 for nine declared before Morkel, bowling at high pace under lights in South Africa's first home floodlit Test, took the first three wickets to leave Zimbabwe reeling at 30 for four at the close.
Morkel trapped Hamilton Masakadza leg before wicket with the first ball of Zimbabwe's innings, dismissed Chamu Chibhabha for six with the help of a blinding catch by Temba Bavuma at fourth slip and had Brendan Taylor caught behind for the second duck of the innings.
Vernon Philander followed up by trapping Craig Ervine leg before for four.
New cap Ryan Burl showed resolve in batting through to the close on 15 not out while Morkel had figures of three for 20.
With South Africa losing five wickets for 58 runs after the dinner break, a total of nine wickets fell for 88 runs in a two-and-a-half hour floodlit session.
Opening batsman Markram, 23, who was caught behind off what proved to be the last ball before dinner, continued a dream start to his Test career.
Although he was run out for 97 in his first Test innings against Bangladesh in September, followed by 15 in the second innings, he made 143 in the first innings of his second Test against the same opponents.
Markram made a watchful start on Tuesday against some testing bowling from Zimbabwe new ball pair Kyle Jarvis and new cap Blessing Muzarabani.
He took 104 balls to reach fifty but accelerated to post his century off 175 balls with 13 fours and a six. He added another four and a six before falling to the 204th ball of his innings.
There will be tougher challenges for Markram than Bangladesh and Zimbabwe but Tuesday's innings took his total to 380 runs in his first four Test innings at an average of 95.00.
Markram shared stands of 72 with fellow opener Dean Elgar (31), 96 with stand-in captain AB de Villiers (53) and 78 with Temba Bavuma (35 not out).
South Africa were without regular captain Faf du Plessis, who had failed to recover fully from lower back and shoulder injuries, and fast bowler Dale Steyn, whose return from a broken shoulder is now likely to be in the first Test against India, starting in Cape Town on January 5.
De Villiers, making a comeback to Test cricket, made an aggressive 53 off 65 balls.
He was the captain in his most recent two Tests, against England in January 2016, but then suffered a long-term elbow injury before deciding to take a break from long-form cricket.
Wicketkeeper Quinton de Kock strained his right hamstring while running between wickets and De Villiers had to take the gloves at the start of the Zimbabwe innings.
aiden markramchamu chibhabhaHamilton Masakadzamorne morkelRyan BurlSouth Africasouth africa vs zimbabweVernon PhilanderZimbabwe
First Published: December 27, 2017, 8:19 AM IST