What do we do instead of DFS on directed graphs? All the example of DFS I've seen so far are for undirected graph.
In a directed graph the basic DFS algorithm won't work because some vertex will be unreachable.

The algorithm I'm talking about :
https://en.wikipedia.org/wiki/Depth-first_search

1  procedure DFS-iterative(G,v):
2      let S be a stack
3      S.push(v)
4      while S is not empty
5          v = S.pop()
6          if v is not labeled as discovered:
7              label v as discovered
8              for all edges from v to w in G.adjacentEdges(v) do 
9                  S.push(w)


Example : 



So let's say I start with '1' I will never access 4,5,6 with this algorithm.

For directed graph it looks like we have to know all the vertex and iterate through them.

And so we cannot use a DFS for directed graph ?

Is there a DFS variant or another algorithm ?
DFS suffers from the same problem in undirected graphs: if your graph is not connected, then starting DFS with an initial vertex $v$ will only explore the connected component of $v$. In a similar fashion, if the graph is directed, then DFS will only explore the vertices reachable from $v$.

The solution is the same in both cases: loop over all vertices, and start DFS with each of the vertices functioning as the initial vertex. If you skip vertices which you have already discovered, then the resulting algorithm will still run in linear time.