A 2-group is a "categorified" version of a group, in which the underlying set G has been replaced by a category and the multiplication map has been replaced by a functor. Various versions of this notion have already been explored; our goal here is to provide a detailed introduction to two, which we call "weak" and "coherent" 2-groups. A weak 2-group is a weak monoidal category in which every morphism has an inverse and every object x has a "weak inverse": an object y such that x tensor y and y tensor x are isomorphic to 1. A coherent 2-group is a weak 2-group in which every object x is equipped with a specified weak inverse x* and isomorphisms i_x: 1 -> x tensor x* and e_x: x* tensor x -> 1 forming an adjunction. We describe 2-categories of weak and coherent 2-groups and an "improvement" 2-functor that turns weak 2-groups into coherent ones, and prove that this 2-functor is a 2-equivalence of 2-categories. We internalize the concept of coherent 2-group, which gives a quick way to define Lie 2-groups. We give a tour of examples, including the "fundamental 2-group" of a space and various Lie 2-groups. We also explain how coherent 2-groups can be classified in terms of 3rd cohomology classes in group cohomology. Finally, using this classification, we construct for any connected and simply-connected compact simple Lie group G a family of 2-groups G_hbar (for integral values of hbar) having G as its group of objects and U(1) as the group of automorphisms of its identity object. These 2-groups are built using Chern-Simons theory, and are closely related to the Lie 2-algebras g_hbar (for real hbar) described in a companion paper.