Docker 1.7 | New container networking, volumes and plugins

The new Docker 1.7 has a host of improvements aimed at helping the Docker community improve the quality of its projects, including a complete rewrite of Docker’s networking and volumes systems to accompany the new networking and plugins systems for Engine.
The experimental release is meant to allow users to try out new features and provide feedback before Docker finalizes its new user interface and APIs.
The experimental release includes a major change to how networking is done via Docker.
With the new networking system, Docker containers can communicate with one another across different hosts.
Configuring networking also is more flexible, as Docker has launched a new networks CLI.
The new networking is paired with an experimental release of Engine, which features a new plugin system.

The first two plugins available are for networking and volumes, giving users the flexibility to back the plugins with any third-party systems.
That means that users now can seamlessly connect containers to networking systems including Weave, Microsoft, VMware, Cisco, Nuage Networks, Midokura and Project Calico.
While the main focus of the newly released Docker has been on improving stability and quality, the new system also comes with many upgrades.

With those upgrades, users can now store images in ZFS.
Also, while this release does not include the new UI, Docker has completely rewritten Engine’s networking internals, split them out into a separate reusable library, called libnetwork.
The change increases the quality of the networking internals and adds an option to set a daemon-wide default gateway for containers.

Docker also has performed a complete rewrite of the volumes internals, making them cleaner and increasing their quality.
With the upgrade, Docker has refactored many other internals, making them faster, more stable and easier to maintain.

Other upgrades with the new Docker 1.7 include:

* The ability to disable the userland proxy in favor of hairpin NAT with the daemon’s `–userland-proxy=false` flag;
* The support of the `-u|–user` flag with the exec command to specify a new process owner
* A new daemon-wide default gateway for containers with the `–default-gateway` and `–default-gateway-v6` flags
* The ability to set CPU CFS (Completely Fair Scheduler) quota in docker run with `–cpu-quota`
* The ability to control container block IO in `docker run` with –`blkio-weight`
* ZFS support
* The support of a `–since` argument with the `docker logs` command
* The ability to share UTS namespace with the host by using `docker run –uts=host`
* The refactoring of Engine internals
* The sending of SIGUSR1 to a daemon to dump all goroutines stacks without exiting
* The support of `${variable:-value}` and `${variable:+value}` syntax for environment variables
* The support of resource management flags `–cgroup-parent`, `–cpu-period`, `–cpu-quota`, `–cpuset-cpus`, `–cpuset-mems`;
* Changes to git context with branches and directories;
* Support of exclusion rules with `.dockerignore` file; and
* Client support for v2 mirroring support for the official registry.

Docker also has fixed bugs so that Firewalld is supported and will be used automatically when available mounting `–device` recursively.