Den portugisiska sidan gick framåt tidigt genom en Ricardo Quaresma straff, efter Manuel Neuer snubblade strejkern Jackson Martinez i lådan.
Winger Quaresma sedan dispossessed Dante innan du kör igenom på mål och lugnt slotting en sekund i nätet.
Thiago drog ett mål tillbaka för Bayern, men Martinez tog en lysande tredje. Återlämningsbenet äger rum den 21 april.
Porto har en betydande fördel i oavgjort eftersom de syftar till att nå sin första semifinal sedan vinna tävlingen 2004 under Jose Mourinho.
Deras prestation var byggd på hårt arbete och tryck, innan de flyttade bollen snabbt till fronten, men de fick hjälp av skenheligt försvar från Bayern.
Tyskarna - som skröt med en 11-match oslagbar körning i Portugal - lyckades hävda ett bort mål, men missade nyckelspelare inklusive yttern Franck Ribery och Arjen Robben, samt mittfälter Bastian Schweinsteiger.
Porto boss Julen Lopetegui och Bayerns Pep Guardiola spelade tillsammans i Barcelona på 1990-talet, och 48-åriga Lopetegui taktik var plats på Estadio do Dragao.
Den ex-Real Madrid Castilla mannen utplacerade en hög intensitet pressande spel, vilket ger hans tidigare lag-kamrat sida liten tid på bollen.
Och det fungerade omedelbart som Bayern gick efter efter tre minuter. Midfielder Xabi Alonso fångades i besittning av den återvändande Martinez - spela efter sex veckor ut med en ljumskeskada - som försökte runda målvakt Neuer men togs ner.
Tyskarna fick bara ett gult kort, eftersom den colombianska frontmannen hade flytt från målet, och Quaresma skickade ut straffet.
Några minuter senare, tidigare Barcelona och Inter Milano man Quaresma fördubblade ledningen efter att ha snott bollen från Dante, innan han höll sitt lugn att slå hem.
Besökarna minskade underskottet genom Thiago, som sopade hem Jerome Boatengs kors, men Martinez vackra tog tredje med omedelbar kontroll och cool finish - efter bollen seglade över Boatengs huvud - lämnar fem-tiden vinnare med mycket att göra i det andra benet.
Porto manager Julen Lopetegui: "Det var grundläggande att vi gjorde vårt bästa för att tvinga oss på Bayern och inte ge dem en chans att göra upp.
"Vi står inför ett av de starkaste Bayern lag i historien. Den svåraste delen kommer att vara i München.
"Vi kommer att behöva producera en perfekt prestanda i Tyskland nästa vecka för att utvecklas."
Bayern München manager Pep Guardiola: "Det finns ännu ett ben. Vi är lite upprörda, men vi har sex dagar på oss att analysera det.
"Vi har spelare som var ute länge med skador - deras ben håller inte så länge,"
"Det är ett svårt resultat att ta in i det andra benet, men vi ska göra ett försök."
Porto chockade Bayern München att ta en första-ben ledning i en underhållande Champions League kvartsfinal slips.