The man burst into the Druzba restaurant in the eastern town of Uhersky Brod and started "shooting indiscriminately", mayor Patrik Kuncar said.
Police described it as the worst mass shooting incident on record.
Czech Interior Minister Milan Chovanec said it was not a terrorist attack.
Some 20 people were thought to have been in the restaurant at the time.
A waitress who was shot in the chest by the gunman is in a serious condition in hospital.
Czech Prime Minister Bohuslav Sobotka said he was shocked by the attack and offered his condolences to relatives of the victims.
The suspect has been described as a local man in his 60s.
The town's mayor said he assumed the shooting "was an isolated incident".
"We have various anti-terrorist measures but we can see that, here, probably a lone shooter struck with no warning," he added.
"I'm rattled by this event. I never would have imagined something like this happening here, in a restaurant that I know well."
The restaurant's owner, Pavel Karlik, said the attacker had walked in to the property and started firing a handgun.
"I immediately ran out through the back door, along with other guests who then called an ambulance and police," he said.
The gunman had called a national television station before he started the attack.
Pavel Lebduska, head of regional broadcasting at the Prima channel, said the man had claimed "he was being bullied, no public institutions would help him, and that he had a gun and hostages and that he would deal with it his own way".
Mr Lebduska said the caller had given his name but the station would not reveal it for the time being. The station alerted the police immediately.
Mr Chovanec said on Twitter: "According to the available information, this was not a terrorist attack, but one carried out by an unbalanced individual."
Uhersky Brod is a town of 17,000 in the Moravia region, near the border with Slovakia.
Such shootings are rare in the country, says the BBC's Rob Cameron in Prague, but with hunting a popular hobby many people in rural areas own weapons.
A gunman has opened fire at a restaurant in the Czech Republic, killing eight people before shooting himself dead, officials say.