India were bowled out for 223 but hit back when Jasprit Bumrah claimed the wicket of South African captain Dean Elgar shorly before the close. South Africa finished the day on 17 for one.
The Indian batsmen struggled after Kohli won the toss and decided to bat under an overcast sky on a well-grassed pitch which offered seam movement for the South African fast bowlers.
Kagiso Rabada, playing in his 50th Test, took four for 73 and eventually won an enthralling duel with Kohli when the Indian captain was ninth man out.
Left-arm fast bowling discovery Marco Jansen took three for 55.
Kohli defied the bowlers for more than four hours in facing 201 balls. He was involved in the only significant partnerships of the innings, 62 for the third wicket with Cheteshwar Pujara (43) and 51 for the fifth wicket with Risabh Pant (27).
Without a century in his previous 14 Tests, Kohli was clearly determined to make a major contribution on a day when most of his teammates struggled.
Refusing to be tempted into playing any rash shots, Kohli was content to leave the majority of the balls he faced early in his innings. It took him 15 balls to score his first runs, a sweetly-timed cover drive for four off Marco Jansen.
Kohli contributed only 14 runs off 80 balls to the partnership with Pujara and needed 158 balls to reach his half-century.
When he was reduced to batting with the tail, Kohli became more adventurous and he fell to Rabada when he was caught behind playing a ball well outside his off stump.
Kohli hit 12 fours as well as a hooked six off Rabada.
His battle with Rabada provided the most compelling cricket of the day with the South African fast bowler beating him outside the off stump on several occasions and inducing an edge which fell just short of Aiden Markram at second slip.
Jansen, who took 12 wickets in the first Test, again made an impact, breaking the blossoming third wicket partnership, forcing Pujara to push at a ball which moved away after earlier producing a delivery which nipped back at the batsman.
Jansen also ended the stand between Kohli and Pant, having the wicketkeeper caught by Keegan Petersen at gully.
The teams are locked at 1-1 in the three-match series after South Africa won the second Test in Johannesburg by seven wickets.
The Indian bowlers had eight overs before the close to get at the South African openers.
Bumrah responded in superb style bowling four maidens and picking up the crucial wicket of Elgar.
The South African captain, who guided his team to victory in Johannesburg last week with a defiant 96 not out, made only three before he was forced onto the back foot and edged Bumrah to Pujara at first slip.
… thank you for making Scroll.in the digital-only news organisation with the widest reach in India.We request you to support our award-winning journalism by making a financial contribution towards the Scroll Ground Reporting Fund. The fund will ensure we can continue to ask the questions that need to be asked, investigate what needs to be uncovered, document what must not go unrecorded.