17.06.2

Latest release in branch 17.06
Released 8 years ago (September 05, 2017)

Software Docker Engine
Branch 17.06
Status
End of life
End of life September 05, 2017
First official release version 17.06.0
First official release date 8 years ago (June 28, 2017)
Release notes https://docs.docker.com/engine/release-notes/17.06/
Documentation https://docs.docker.com/
Download https://docs.docker.com/engine/install/
Docker Engine 17.06 Releases View full list

What Is New in Docker Engine 17.06

Docker 17.06 CE introduces significant enhancements for both developers and operators, focusing on multi-stage builds, daemon management, and improved logging. This release solidifies features that were previously experimental, making them stable and production-ready.

Category Key Changes
New Features Multi-stage Builds, Topology-aware Scheduling, Systemd Cgroup Driver
Improvements Daemon Configuration Reload, JSON File Logging Driver, Overlay2 with Meta-only
Deprecations LXC Execution Driver, `-g` / `--graph` Daemon Flag
Bug Fixes Numerous fixes for networking, build, and runtime operations

How do multi-stage builds change the Dockerfile game?

Multi-stage builds are now stable, allowing you to create lean final images by separating build-time dependencies from the runtime environment in a single Dockerfile. You define multiple FROM statements and selectively copy artifacts from one stage to another. This eliminates the need for hacky shell scripts to clean up build tools and drastically reduces image size. In practice, this means a single Dockerfile can compile your application and then package only the necessary binaries and libraries.

Example

FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp .

FROM alpine:latest
COPY --from=builder /app/myapp .
CMD ["./myapp"]

What's new for managing the Docker Daemon?

You can now reload the daemon configuration without a full restart using the command kill -SIGHUP $(pidof dockerd) or a systemctl reload command. This applies many runtime configuration changes on the fly, which is crucial for minimizing downtime in production. The deprecated -g or --graph flag is replaced by the data-root setting in the daemon.json file. This provides a more consistent and declarative way to manage the daemon's data directory.

How is logging improved in this release?

The json-file log driver now uses a file-based locking mechanism to prevent corruption when multiple readers access the same log file simultaneously. This matters because it fixes a longstanding issue where log rotation or external tools reading logs could cause the daemon to crash. The improvement ensures log data integrity, which is fundamental for debugging and monitoring containerized applications.

What storage driver optimizations were made?

The overlay2 storage driver now supports the "meta-only" feature, which significantly accelerates the docker pull operation for images that share many layers. Instead of copying all data for each layer, it only updates metadata where possible. This results in much faster container startup times when using images based on similar OS layers, a common scenario in microservices architectures.

What has been removed or deprecated?

The LXC execution driver, which was deprecated years ago, has been completely removed. All containers now run using the native runc driver. The --graph and -g flags for specifying the Docker daemon's data directory are now deprecated in favor of the data-root option in the daemon.json configuration file. You should update your scripts and configurations to use the new method to ensure future compatibility.

FAQ

Do I need to rewrite all my Dockerfiles for multi-stage builds?
No, your existing Dockerfiles will continue to work unchanged. Multi-stage builds are an optional feature. You only need to modify a Dockerfile to use multiple FROM statements if you want to leverage the new functionality to reduce image size.

How do I switch to the new `data-root` configuration?
Stop the Docker daemon. Move your current data directory (e.g., /var/lib/docker) to the new location. Then, add the line "data-root": "/path/to/new/location" to your /etc/docker/daemon.json file and restart the daemon.

Can I still use LXC to run containers?
No. The LXC execution driver was completely removed in 17.06. All containers now run using the native runc container runtime, which has been the default and recommended option for many years.

What signals can I use to reload the daemon?
Send a SIGHUP signal to the dockerd process. This can be done with the command: kill -SIGHUP $(pidof dockerd). This reloads the configuration from the daemon.json file without restarting running containers.

Is the `overlay2` driver now the default?
Yes, overlay2 has been the default and recommended storage driver for some time. The 17.06 release enhances it with the "meta-only" feature, making it even more efficient for image pulls and container creation.

Releases In Branch 17.06

Version Release date
17.06.2 8 years ago
(September 05, 2017)
17.06.1 8 years ago
(August 15, 2017)
17.06.0 8 years ago
(June 28, 2017)