The win was a first in the pool for Porto and moved them into second place after two rounds of matches, three points behind leaders Manchester City, who have a full haul of six following their 3-0 victory at Olympique Marseille.
The open contest swung in the home side’s favour when they went ahead on 11 minutes after Olympiakos captain Andreas Bouchalakis misplaced a pass and Porto were able to swarm into the box, with 20-year-old Vieira providing the finishing touch for his first Champions League goal.
Olympiakos had their moments -- winger Lazar Randjelovic forced a good save from Agustin Marchesin, before wasting a golden chance when he shot tamely at the keeper with the goal at his mercy.
Sergio Oliveira made the points safe with a second goal for Porto five minutes from time as he converted Moussa Marega’s cross.