There are multiple ways to do this:
Using Linux bridges (brctl)
Using Open vSwitch (ovs-vsctl)
Using IPVLAN (introduced in 3.19 kernel, but not stable until 4.2 or later)
MACVLAN and IPVLAN are both supported as Linux kernel modules
MACVLAN: This makes it possible to create virtual network interfaces that “cling on” a physical network interface(eth5 in the question above). Each virtual interface has its own MAC address - distinct from the physical interface’s MAC address. Frames sent to or from the virtual interfaces are mapped to the physical interface.
While under Linux an interface can already have multiple addresses, a MACVLAN allows further isolation on what traffic can be seen on such an interface. A MACVLAN will only be able to see traffic that has a MAC address that matches that interface, preventing processes / containers on other interfaces from listening in on traffic destined for another MACVLAN.
IPVLAN: Conceptually very similar to the macvlan driver with one major exception that is uses L3 for muxing /demuxing among slaves. The master device shares the L2 MAC with it's slave devices. This allows creation of virtual devices off of a main interface and packets are delivered based on the dest L3 IP address on the packets. All interfaces (including the main interface) share L2 making it transparent to a connected L2 switch.
For IPVLAN, the canonical documentation is:
Currently Docker supports both MACVLAN and IPVLAN in experimental release; they are coming into GA soon
For more on MACVLAN and IPVLAN (including specific commands) see Brent Salisbury's excellent blogpost: