A context is a syntactic notion. A context is a term with one hole in it. (Occasionally there are multi-hole contexts, the definition will be given clearly in that case.) The syntax of contexts is defined by taking the syntax of terms and allowing one subterm to be a hole $[]$ instead of a term. In BNF (I use the lambda-calculus as an example, without booleans and if statements which don't bring anything to the example.):
$$ C ::= [] \mid x \mid t \, C \mid C \, t \mid \lambda x.C $$
Together with the definition of a context comes the definition of putting a term in a context. If $C[]$ is a context and $t$ is a term, then $C[t]$ is the term obtained by putting $t$ in the syntax tree where the hole $[]$ is in $C[t]$. This is basically a substitution where the variable is guaranteed to occur exactly once (but note that the “variable” that is substituted is a variable at the meta level, $[]$, not a variable in the lambda-calculus or other language of the terms $t$).
Contexts are used to formulate various definitions in semantics. A common example is that most notions of evaluation involve defining contexts in which evaluation can be performed. For example, consider the lambda-calculus. The fundamental notion of evaluation is given by the beta-reduction rule:
$$ (\lambda x. M) \, N \to_\beta M \{x\leftarrow N\} $$
where $M \{x\leftarrow N\}$ is the substitution $x \mapsto N$ applied to $M$.
This isn't the complete definition of beta-reduction: given a term $t$, it can beta-reduce if there are subterms $M$ and $N$ and a variable $x$ such that $t = (\lambda x. M) \, N$; but more generally $t$ can beta-reduce if there is a subterm $t'$ such that $t' = (\lambda x. M) \, N$. Another way to express this is that $t$ can beta-reduce if there is a context $C$ and some terms $M$ and $N$ and a variable $x$ such that $t = C[(\lambda x. M) \, N]$. When there is such a reduction, the right-hand side is $C[M \{x\leftarrow N\}]$. To use a formal notation, beta-reduction is defined by the following deduction rules:
$$
\dfrac{}{(\lambda x. M) \, N \to_\beta M \{x\leftarrow N\}} (\beta) \qquad
\dfrac{M \to_\beta N}{C[M] \to_\beta C[N]} (\gamma)
$$
The same definition can be expressed by making all the kinds of contexts explicit:
$$
\dfrac{}{(\lambda x. M) \, N \to_\beta M \{x\leftarrow N\}} (\beta) \\
\dfrac{M \to_\beta N}{\lambda x. M \to_\beta \lambda x. N} (C_\lambda) \qquad
\dfrac{M \to_\beta N}{M \, P \to_\beta N \, P} (C_{@\lt}) \qquad
\dfrac{M \to_\beta N}{P \, M \to_\beta P \, N} (C_{@\gt})
$$
This definition yields beta-reduction, i.e. a notion of evaluation that allows reducing any subterm. Computations as performed in programming languages often don't allow reducing subterms inside functions: the reduction rule can only be applied at the toplevel, or on the left-hand side or right-hand side of an application. We can express this by defining a new kind of context which does not allow all syntactic forms:
$$ D ::= [] \mid x \mid t \, D \mid D \, t $$
We can use this syntax to define the semantic notion of non-partial evaluation:
$$
\dfrac{}{(\lambda x. M) \, N \to_{np} M \{x\leftarrow N\}} \qquad
\dfrac{M \to_{np} N}{D[M] \to_{np} D[N]}
$$
We could also present this definition by expanding it, like we did above for full beta reduction:
$$
\dfrac{}{(\lambda x. M) \, N \to_{np} M \{x\leftarrow N\}} (\beta) \\
\dfrac{M \to_{np} N}{M \, P \to_{np} N \, P} (C_{@\lt}) \qquad
\dfrac{M \to_{np} N}{P \, M \to_{np} P \, N} (C_{@\gt})
$$
$D$ would be called an evaluation context because it is used to define a notion of evaluation. An evaluation context isn't a special kind of context; rather, calling it an evaluation context is a matter of what the context is used for.
I'll give one more example of context. Let's define values $V$ according to the following syntax:
$$ V ::= x V_1 \ldots V_n \mid \lambda x. M $$
Now let's define another kind of contexts:
$$ E ::= [] \mid M \, E \mid E \, V $$
Compared with $D$ above, the hole can be on the function side of an application if the argument of the application is a value. Define then the following notion of reduction:
$$
\dfrac{}{(\lambda x. M) \, V \to_{cbva} M \{x\leftarrow V\}} (\beta_{cbva}) \qquad
\dfrac{M \to_\beta N}{E[M] \to_{cbva} E[N]} (\gamma_{cbva})
$$
With the restriction that the argument of the function must be a value in the first rule and that lambda abstractions are not contexts, we're defining a call-by-value evaluation strategy. With the further restriction that the argument is evaluated before the function, this is applicative order call by value.