Bernd Leno played 125 times for Arsenal after joining in 2018
Leno, 30, lost his place to England goalkeeper Aaron Ramsdale last season, playing only nine games.
In all, he kept 37 clean sheets in 125 appearances in all competitions for the Gunners after arriving from Bayer Leverkusen for £20m in 2018.
Leno becomes Fulham's fifth summer signing since the club earned promotion back to the Premier League.
Joao Palhinha, Andreas Pereira, Kevin Mbabu and Manor Solomon have all joined the Cottagers.
Leno said: "It feels amazing to finally be here. I can't wait to join the team, to train and play with the team.
"I'm relieved that everything is done. I'm just happy to be here. It took a little bit of time but in the end we made it, and that's the most important thing."
Fulham are reportedly paying £3m up front, with the further £5m in potential add-ons.
-- Courtesy of BBC Sport