[proofplan]
We prove both implications. If $F$ has a quasi-inverse $G$, the natural isomorphism $FG\cong \operatorname{id}_{\mathcal D}$ gives essential surjectivity, while the natural isomorphism $\operatorname{id}_{\mathcal C}\cong GF$ lets us recover a morphism $f:X\to Y$ from $F(f)$, giving faithfulness and fullness. Conversely, if $F$ is full, faithful, and essentially surjective, choose for each object $D\in\mathcal D$ an object $G D\in\mathcal C$ and an isomorphism $\varepsilon_D:F G D\to D$; then define $G$ on morphisms by transporting morphisms in $\mathcal D$ through these isomorphisms and using the bijections on hom-sets. Faithfulness gives functoriality, and the chosen isomorphisms together with fullness produce the two required natural isomorphisms.
[/proofplan]
[step:Use a quasi-inverse to prove essential surjectivity]
Assume first that $F$ is an equivalence of categories. Thus there exists a functor $G:\mathcal D\to\mathcal C$ and natural isomorphisms
\begin{align*}
\eta:\operatorname{id}_{\mathcal C}&\Rightarrow G F,\\
\varepsilon:F G&\Rightarrow \operatorname{id}_{\mathcal D}.
\end{align*}
For each object $D\in\mathcal D$, the component
\begin{align*}
\varepsilon_D:F G D\to D
\end{align*}
is an isomorphism in $\mathcal D$. Since $G D$ is an object of $\mathcal C$, this proves that every object $D\in\mathcal D$ is isomorphic to an object in the image of $F$. Therefore $F$ is essentially surjective.
[/step]
[step:Recover morphisms from their images under an equivalence]
We prove that $F$ is faithful and full. For objects $X,Y\in\mathcal C$, define a function
\begin{align*}
\Psi_{X,Y}:\operatorname{Hom}_{\mathcal D}(F X,F Y)&\to \operatorname{Hom}_{\mathcal C}(X,Y)\\
u&\mapsto \eta_Y^{-1}\circ G(u)\circ \eta_X.
\end{align*}
For every morphism $f:X\to Y$ in $\mathcal C$, naturality of $\eta$ gives
\begin{align*}
G F(f)\circ \eta_X=\eta_Y\circ f.
\end{align*}
Composing on the left with $\eta_Y^{-1}$ yields
\begin{align*}
\Psi_{X,Y}(F(f))=\eta_Y^{-1}\circ G F(f)\circ \eta_X=f.
\end{align*}
Thus $F_{X,Y}$ is injective.
It remains to prove surjectivity. The same argument applied to the equivalence data for $G$ shows that $G$ is faithful: if $a,b:D\to E$ are morphisms in $\mathcal D$ and $G(a)=G(b)$, then naturality of $\varepsilon$ gives
\begin{align*}
a\circ \varepsilon_D&=\varepsilon_E\circ F G(a),\\
b\circ \varepsilon_D&=\varepsilon_E\circ F G(b),
\end{align*}
and since $G(a)=G(b)$, the right-hand sides are equal. Because $\varepsilon_D$ is an isomorphism, $a=b$.
Now let $u:F X\to F Y$ be a morphism in $\mathcal D$, and set
\begin{align*}
f:=\Psi_{X,Y}(u)=\eta_Y^{-1}\circ G(u)\circ \eta_X.
\end{align*}
By naturality of $\eta$ applied to $f:X\to Y$,
\begin{align*}
G F(f)\circ \eta_X=\eta_Y\circ f.
\end{align*}
Substituting the definition of $f$ gives
\begin{align*}
G F(f)\circ \eta_X
&=\eta_Y\circ \eta_Y^{-1}\circ G(u)\circ \eta_X\\
&=G(u)\circ \eta_X.
\end{align*}
Since $\eta_X$ is an isomorphism, $G F(f)=G(u)$. Faithfulness of $G$ then gives $F(f)=u$. Hence $F_{X,Y}$ is surjective. Therefore $F$ is full and faithful.
[guided]
Fix objects $X,Y\in\mathcal C$. To prove that $F$ is full and faithful, we must prove that the function
\begin{align*}
F_{X,Y}:\operatorname{Hom}_{\mathcal C}(X,Y)&\to \operatorname{Hom}_{\mathcal D}(F X,F Y)\\
f&\mapsto F(f)
\end{align*}
is bijective.
The natural isomorphism $\eta:\operatorname{id}_{\mathcal C}\Rightarrow GF$ gives, for each object $X\in\mathcal C$, an isomorphism $\eta_X:X\to G F X$. Therefore a morphism $u:F X\to F Y$ in $\mathcal D$ can be transported back to a morphism from $X$ to $Y$ by applying $G$ and conjugating by the components of $\eta$. Define
\begin{align*}
\Psi_{X,Y}:\operatorname{Hom}_{\mathcal D}(F X,F Y)&\to \operatorname{Hom}_{\mathcal C}(X,Y)\\
u&\mapsto \eta_Y^{-1}\circ G(u)\circ \eta_X.
\end{align*}
First let $f:X\to Y$ be a morphism in $\mathcal C$. Naturality of $\eta$ for $f$ says that the square relating $f$ and $GF(f)$ commutes, namely
\begin{align*}
G F(f)\circ \eta_X=\eta_Y\circ f.
\end{align*}
Composing this equality on the left with $\eta_Y^{-1}$ gives
\begin{align*}
\Psi_{X,Y}(F(f))
&=\eta_Y^{-1}\circ G F(f)\circ \eta_X\\
&=\eta_Y^{-1}\circ \eta_Y\circ f\\
&=f.
\end{align*}
Thus two morphisms in $\operatorname{Hom}_{\mathcal C}(X,Y)$ with the same image under $F$ must be equal, so $F$ is faithful.
For fullness, take an arbitrary morphism $u:F X\to F Y$ in $\mathcal D$, and define
\begin{align*}
f:=\eta_Y^{-1}\circ G(u)\circ \eta_X.
\end{align*}
We need to prove $F(f)=u$. We first show that applying $G$ makes them equal. Naturality of $\eta$ applied to $f$ gives
\begin{align*}
G F(f)\circ \eta_X=\eta_Y\circ f.
\end{align*}
Substituting the definition of $f$ into the right-hand side,
\begin{align*}
G F(f)\circ \eta_X
&=\eta_Y\circ \eta_Y^{-1}\circ G(u)\circ \eta_X\\
&=G(u)\circ \eta_X.
\end{align*}
Since $\eta_X$ is an isomorphism, we cancel it on the right and obtain
\begin{align*}
G F(f)=G(u).
\end{align*}
It remains to justify cancellation after applying $G$: we need that $G$ is faithful. This follows from the other natural isomorphism $\varepsilon:F G\Rightarrow \operatorname{id}_{\mathcal D}$. Indeed, if $a,b:D\to E$ are morphisms in $\mathcal D$ with $G(a)=G(b)$, then naturality of $\varepsilon$ gives
\begin{align*}
a\circ \varepsilon_D&=\varepsilon_E\circ F G(a),\\
b\circ \varepsilon_D&=\varepsilon_E\circ F G(b).
\end{align*}
Since $G(a)=G(b)$, the right-hand sides are equal, so
\begin{align*}
a\circ \varepsilon_D=b\circ \varepsilon_D.
\end{align*}
Because $\varepsilon_D$ is an isomorphism, composition on the right by $\varepsilon_D^{-1}$ gives $a=b$. Thus $G$ is faithful. Applying this to $F(f)$ and $u$ gives $F(f)=u$, proving fullness.
[/guided]
[/step]
[step:Choose representatives and define the quasi-inverse on morphisms]
Conversely, assume that $F$ is full, faithful, and essentially surjective. By essential surjectivity, for each object $D\in\mathcal D$ choose an object $G D\in\mathcal C$ and an isomorphism
\begin{align*}
\varepsilon_D:F G D\to D
\end{align*}
in $\mathcal D$.
We define a map on objects by $D\mapsto G D$. For a morphism $f:D\to E$ in $\mathcal D$, define $G(f):G D\to G E$ to be the unique morphism in $\mathcal C$ satisfying
\begin{align*}
F(G(f))=\varepsilon_E^{-1}\circ f\circ \varepsilon_D.
\end{align*}
This morphism exists because $F$ is full, applied to the morphism
\begin{align*}
\varepsilon_E^{-1}\circ f\circ \varepsilon_D:F G D\to F G E,
\end{align*}
and it is unique because $F$ is faithful.
[guided]
We now build the quasi-inverse functor $G:\mathcal D\to\mathcal C$. Essential surjectivity says that every object of $\mathcal D$ is isomorphic to something of the form $F C$. Therefore, for each object $D\in\mathcal D$, choose an object $G D\in\mathcal C$ and an isomorphism
\begin{align*}
\varepsilon_D:F G D\to D.
\end{align*}
This defines $G$ on objects.
Now let $f:D\to E$ be a morphism in $\mathcal D$. We need a morphism $G(f):G D\to G E$ in $\mathcal C$. Since the available information is that $F$ induces bijections on hom-sets, we first convert $f$ into a morphism whose source and target are in the image of $F$. Using the chosen isomorphisms, form
\begin{align*}
\varepsilon_E^{-1}\circ f\circ \varepsilon_D:F G D\to F G E.
\end{align*}
This is a morphism in $\mathcal D$ from $F(GD)$ to $F(GE)$. Fullness of $F$ gives at least one morphism $G(f):G D\to G E$ with
\begin{align*}
F(G(f))=\varepsilon_E^{-1}\circ f\circ \varepsilon_D.
\end{align*}
Faithfulness of $F$ says that this preimage is unique. Thus the formula defines $G(f)$ unambiguously.
[/guided]
[/step]
[step:Verify that the constructed map is a functor]
We verify preservation of identities and composition. Let $D\in\mathcal D$. By definition,
\begin{align*}
F(G(\operatorname{id}_D))
&=\varepsilon_D^{-1}\circ \operatorname{id}_D\circ \varepsilon_D\\
&=\operatorname{id}_{F G D}.
\end{align*}
Also $F(\operatorname{id}_{G D})=\operatorname{id}_{F G D}$. Since $F$ is faithful,
\begin{align*}
G(\operatorname{id}_D)=\operatorname{id}_{G D}.
\end{align*}
Let $f:D\to E$ and $g:E\to H$ be morphisms in $\mathcal D$. By definition,
\begin{align*}
F(G(g\circ f))
&=\varepsilon_H^{-1}\circ g\circ f\circ \varepsilon_D.
\end{align*}
On the other hand,
\begin{align*}
F(G(g)\circ G(f))
&=F(G(g))\circ F(G(f))\\
&=(\varepsilon_H^{-1}\circ g\circ \varepsilon_E)\circ(\varepsilon_E^{-1}\circ f\circ \varepsilon_D)\\
&=\varepsilon_H^{-1}\circ g\circ f\circ \varepsilon_D.
\end{align*}
Thus $F(G(g\circ f))=F(G(g)\circ G(f))$, and faithfulness of $F$ gives
\begin{align*}
G(g\circ f)=G(g)\circ G(f).
\end{align*}
Therefore $G:\mathcal D\to\mathcal C$ is a functor.
[/step]
[step:Show that the chosen isomorphisms form a natural isomorphism $F G\cong \operatorname{id}_{\mathcal D}$]
The family
\begin{align*}
\varepsilon=(\varepsilon_D:F G D\to D)_{D\in\mathcal D}
\end{align*}
has isomorphism components by construction. For a morphism $f:D\to E$ in $\mathcal D$, the defining equation for $G(f)$ is
\begin{align*}
F(G(f))=\varepsilon_E^{-1}\circ f\circ \varepsilon_D.
\end{align*}
Composing on the left with $\varepsilon_E$ gives
\begin{align*}
\varepsilon_E\circ F(G(f))=f\circ \varepsilon_D.
\end{align*}
This is precisely the naturality condition for $\varepsilon:F G\Rightarrow \operatorname{id}_{\mathcal D}$. Hence $\varepsilon$ is a natural isomorphism.
[/step]
[step:Construct the natural isomorphism $\operatorname{id}_{\mathcal C}\cong G F$]
For each object $X\in\mathcal C$, define $\eta_X:X\to G F X$ to be the unique morphism satisfying
\begin{align*}
F(\eta_X)=\varepsilon_{F X}^{-1}:F X\to F G F X.
\end{align*}
This morphism exists by fullness and is unique by faithfulness.
We prove that $\eta_X$ is an isomorphism. By fullness, define $\theta_X:G F X\to X$ to be the unique morphism satisfying
\begin{align*}
F(\theta_X)=\varepsilon_{F X}:F G F X\to F X.
\end{align*}
Then
\begin{align*}
F(\theta_X\circ \eta_X)
&=F(\theta_X)\circ F(\eta_X)\\
&=\varepsilon_{F X}\circ \varepsilon_{F X}^{-1}\\
&=\operatorname{id}_{F X}
\\
&=F(\operatorname{id}_X),
\end{align*}
so faithfulness of $F$ gives $\theta_X\circ \eta_X=\operatorname{id}_X$. Similarly,
\begin{align*}
F(\eta_X\circ \theta_X)
&=F(\eta_X)\circ F(\theta_X)\\
&=\varepsilon_{F X}^{-1}\circ \varepsilon_{F X}\\
&=\operatorname{id}_{F G F X}
\\
&=F(\operatorname{id}_{G F X}),
\end{align*}
so $\eta_X\circ \theta_X=\operatorname{id}_{G F X}$. Hence $\eta_X$ is an isomorphism.
It remains to prove naturality. Let $h:X\to Y$ be a morphism in $\mathcal C$. We must show
\begin{align*}
G F(h)\circ \eta_X=\eta_Y\circ h.
\end{align*}
Applying $F$ to the left-hand side and using the definition of $G$ on the morphism $F(h):F X\to F Y$, we get
\begin{align*}
F(G F(h)\circ \eta_X)
&=F(G F(h))\circ F(\eta_X)\\
&=(\varepsilon_{F Y}^{-1}\circ F(h)\circ \varepsilon_{F X})\circ \varepsilon_{F X}^{-1}\\
&=\varepsilon_{F Y}^{-1}\circ F(h).
\end{align*}
Applying $F$ to the right-hand side gives
\begin{align*}
F(\eta_Y\circ h)
&=F(\eta_Y)\circ F(h)\\
&=\varepsilon_{F Y}^{-1}\circ F(h).
\end{align*}
The two images under $F$ are equal, and faithfulness of $F$ gives
\begin{align*}
G F(h)\circ \eta_X=\eta_Y\circ h.
\end{align*}
Therefore $\eta:\operatorname{id}_{\mathcal C}\Rightarrow G F$ is a natural isomorphism.
[/step]
[step:Conclude that $F$ is an equivalence]
We have constructed a functor $G:\mathcal D\to\mathcal C$ together with natural isomorphisms
\begin{align*}
\eta:\operatorname{id}_{\mathcal C}&\Rightarrow G F,\\
\varepsilon:F G&\Rightarrow \operatorname{id}_{\mathcal D}.
\end{align*}
Thus $G$ is a quasi-inverse to $F$, so $F$ is an equivalence of categories. Combining this with the first implication proves the theorem.
[/step]