吕光出身略阳(今甘肃庄浪县西南)的名门望族,青年时期即有着深厚修养,深沉,持重,喜怒不形于色。苻坚的谋士王猛感到吕光是个人才,能成大器,便把他推荐给苻坚。苻坚把吕光逐步提拔成为鹰扬将军。
吕光不负苻坚、王猛的厚望,出任鹰扬将军后,追随苻坚南征北战,在战争中大显身手,赢得了前秦大臣们的交口称赞,很快又升为骁骑将军。
苻坚的胃口很大,统一了北方的大部分地区后,又想占有西域,吕光就挑起了这副重担。建元十八年(公元383年)正月,吕光告别苻坚,离开长安西进。苻坚的儿子苻宏紧握吕光的双手,激动地说:“你的气度非同一般,将来一定会大有作为,好自为之吧!”吕光的西征军阵容很强,仅将军这一级的高级官员就有姜飞、彭晃、杜进、康盛等,另外,陇西、冯翊、武威、弘农等地有名望的人物董方、郭抱、贾虔、杨颖也作为吕光的助手参加了西征军。
西域焉耆王泥流见吕光大军来势凶猛,便主动联络了一些国王向吕光投降。龟兹国王帛纯却很顽固,重兵把守城门,抵抗吕光。吕光毫不示弱,在龟兹城南安营扎寨,准备打持久战。半年之后,帛纯先熬不住了,不惜重金向龟兹西部的狯胡求救。狯胡深知唇亡齿寒的利害,便联合了温宿、尉头等国的70多万人马营救龟兹。这些小国都是游牧民族,士兵个个都是骑马射箭的能手,而且战甲非常坚硬,箭头很难射进去。他们用皮绳结成套索,骑在马上套人几乎百套百中。吕光部下见了,个个心惊肉跳,向吕光建议各个军营自己结阵,按兵不动。吕光把敌军的战术仔细研究一番后,对众将说:“本来就敌众我寡,如果各军营再各自为战,势力会更加分散,这不是制敌取胜的好办法。”于是命令各个军营都集合到一起,在骑兵的掩护下,用长钩钩取敌军的绳套。这种方法很见效,轻易就把龟兹的联兵打垮。龟兹王帛纯逃跑,30多个小国投降。建元二十年(公元385年)三月,吕光用两万头骆驼驮着1000多种珍奇的西域货物,带着1万多匹骏马撤离西域。
离开西域究竟要到哪里去呢?吕光心里并没有底。他到宜禾时,高昌太守杨翰怕他会乘中原混乱之机夺取凉州,便劝凉州刺史梁熙堵住高桐、允吾两个关口,阻其东进。杨翰的话传到吕光耳朵里,吕光大吃一惊,不敢再前进一步。还是谋士杜进点子多,不紧不慢地对吕光说:“梁熙文雅有余,机灵不足,不会采纳杨翰的建议。我们应当趁他们的意见还没有统一,快速前进,夺取凉州。”此时苻坚已在淝水之战中失败,长安能否幸存下来,他认为自己即使回到关中也没有多大用武之地,现在夺取凉州不失为一条好的出路,于是下令向高昌挺进。
吕光东进玉门关时,一直对杨翰的劝告不以为然的梁熙才如梦初醒,匆忙发布檄文声讨吕光,并派儿子梁胤、振威将军姚皓、别驾卫翰带领五万人马到酒泉抗击吕光。吕光以牙还牙,也发布檄文声讨梁熙,又派彭晁、杜进、姜飞在安弥打败了梁胤。武威太守彭济见风使舵,把梁熙抓起来送给吕光,吕光进了姑臧(今甘肃武威),自称凉州刺史。
凉州地处边陲,消息十分闭塞。太初元年(公元386年)九月,苻坚被杀的噩耗才传到凉州。吕光听到噩耗后如丧考妣,悲痛欲绝,命令所有凉州人都为苻坚披麻戴孝。一个月之后,吕光便宣布改元太安,自称凉州牧、酒泉公。
但是,吕光的日子并不好过。就在他宣布改元的时候,前秦的长水校尉王穆也自称凉州牧,与吕光分庭抗礼;吕光手下的西平太守康宁自称匈奴王,反对吕光。最使吕光伤心和恼火的还是曾与吕光同甘共苦的彭晃与大将徐炅勾结起来造了反。吕光决心亲征彭晃,太安二年(公元387年)十二月,他率领3万大军攻取张掖,杀掉彭晃,接着攻取酒泉,消灭了王穆。次年二月,吕光即王位,改元麟嘉,设置百官,把妻子石氏立为王妃,儿子吕绍立为太子。
随着地位的日益巩固,吕光对王这一头衔已不满足,又于麟嘉八年(公元396年)六月改称天王,改元龙飞。次年正月,吕光因西秦乞伏乾归出尔反尔,想教训一下西秦。派太原公吕纂攻克金城(今甘肃兰州),天水公吕延攻克临洮、武始、河关,西秦大为震惊。但是,由于吕延麻痹轻敌,中了乞伏乾归的奸计,被乞伏乾归杀害,征秦失败,其他将领撤回枹罕(今甘肃临夏)。吕光只好灰溜溜地回到了姑臧。
年老多病的吕光为这次失败而恼怒。到龙飞四年(公元399年),他病情加重,见没有恢复健康的希望,便将太子吕绍立为天王,自称太上皇。吕光告诫吕绍说:“现在国家处于多难时期,南凉秃发乌孤、西秦乞伏乾归、北凉段业都伺机吞并我们。我死之后,你让吕纂统帅六军,吕弘管理朝政,你自己无为而治,这样也许会渡过难关。如果你们互相猜忌,祸起萧墙,你们都会很快完蛋。”吕光又对吕纂、吕弘说:“吕绍并不是块拨乱救世的材料,只是因为他是嫡长子才让他当天王。现在我们内外交困,你们弟兄们更应当和睦相处,如果你们自起干戈,大祸会马上降到你们头上。”吕纂、吕弘哭着说出了“不敢”二字。吕光又拉着吕纂的手说:“你性格粗暴,很让我担心。你要好好辅佐吕绍,不要听信任何谗言。”当天,吕光病死,时年63岁。葬高陵,谥“懿武皇帝”,庙号“太祖”。