Fog is an emergent architecture for computing, storage, control and networking that distributes these services closer to end users along the Cloud-to-Things continuum. It covers both mobile and wireline scenarios, traverses across hardware and software, resides on network edge but also through access networks and among end users, includes both data plane special cases like cloudlets and control plane special cases such as crowd-sensing. As an architecture, it supports a growing variety of applications, including those in the Internet of Things (IoT), Fifth-Generation (5G) wireless systems, and embedded artificial intelligence (AI). This survey article summarizes the opportunities and challenges of Fog, focusing primarily on the networking context of IoT.