SlideShare a Scribd company logo
A New Model for
Image Distribution
Stephen Day
Distribution, Tech Lead
Docker, Inc.
stephen@docker.com
@stevvooe
github.com/stevvooe
Overview
• Why does this matter?
• History
• Docker Registry API V2
• Implementation
• The Future
What is Docker?
What is an Image?
What is an Image?
• Identified by a name
• ubuntu
• redis
• stevvooe/myapp
• docker run ubuntu
- Runs a container, created from image ubuntu
What is an Image?
• Containers, the runtime of docker, are created from images
• Filesystem made up with “layers”
- Just tar files
- Layers can be shared between images
• Includes a description organizing layers into an image
A runnable component with a filesystem
What is the Docker
Registry?
What is the Docker Registry?
• A central place to store and distribute
docker images
• Stores the layers and the description of how
they make up an image
• Implements a common API agreed upon by
Docker clients
What is the Docker Registry?
• Several Implementations
• A simple web server to make images available
• A complete web application
• Services
• Docker Hub
• Docker Trusted Registry
• Documentation: https://docs.docker.com/registry/
A central place to store and distribute docker images
History
Docker Registry API V1: History
• Layer Oriented
• Layer IDs are randomly assigned
• JSON object corresponding to each layer referencing a parent
• Naming accomplished through tags
Layer Layer Layer Layer
JSON JSON JSON JSONFetch(ID)
{
Registry API V1 URL Layout
Methods URL
GET /v1/_ping
GET, PUT /v1/images/(image_id)/layer
GET, PUT /v1/images/(image_id)/json
GET /v1/images/(image_id)/ancestry
GET /v1/repositories/(namespace)/(repository)/tags
GET, PUT, DELETE /v1/repositories/(namespace)/(repository)/tags/(tag*)
DELETE /v1/repositories/(namespace)/(repository)/
GET /v1/search
13
https://docs.docker.com/reference/api/hub_registry_spec/
Docker Registry API V1: Problems
• Abstraction
- Exposes Internals of Image to distribution mechanism
• Security
- Image IDs must be kept secret
- Who assigns the layer IDs?
- Hard to audit, verify
• Performance
- Fetch a layer, fetch the parent, fetch the parent, …
Docker Registry API V1: Problems
• Implementation in Python
- Affected ease of deployment
- Reduced sharing with main Docker Project
• More information:
• https://github.com/docker/docker/issues/8093
Docker Registry API V2
Docker Registry API V2: Goals
• Simplicity
- Easy to implement
- Works with static host
• Security
- Verifiable Images
- Straightforward access control
Docker Registry API V2: Goals
• Distribution
- Separate location of content from naming
• Performance
- Remove the single track
• Implementation
- Use Go to increase code sharing with Docker Engine
Docker Registry API V2: Content Addressable
• Layers are treated as content-addressable blobs
- Much better for security
- Permits safe-distribution through untrusted channels
• All data can be verified
• De-duplication
• Improved cache-ability
• Content address is known as the “digest”
Docker Registry API V2: Digests
• Uniquely identifies content
• A cryptographically strong hash
- Chose a name, digest, that does not conflict with other concepts
(map, dict, crc, etc.)
- Simply using sha256(bytes)
• Independently Verifiable
- By agreeing on common algorithm, IDs chosen for content without
coordination
• Strongly-typed with tools to parse and verify
- http://godoc.org/github.com/docker/distribution/digest
Docker Registry API V2: Manifests
• Describes the components of an image in a single object
- Layers can be fetched immediately, in parallel
LayerLayer Layer Layer
JSONFetch(ID)
{
Docker Registry API V2: Manifests
{
"name": <name>,
"tag": <tag>,
"fsLayers": [
{
"blobSum": <digest>
},
...
]
],
"history": [<v1 image json>, ... ]
}
Docker Registry API V2: Manifest
• Content-addressable:
- docker pull
ubuntu@sha256:8126991394342c2775a9ba4a843869112da815
6037451fc424454db43c25d8b0
• Leverages Merkle DAG
- Because the digests of the layers are in the manifest, if any bit in the
layer changes, the digest of the manifest changes
- Similar to git, ipfs, camlistore and a host of other projects
• Tags are in the manifest
- This will going away
Docker Registry API V2: Repositories
• All content is now part of a named repository
- Image IDs are no longer a secret
- Simplified authorization model
• repository + operation (push, pull)
- Clients must “prove” content is available to another repository by
providing it
• Opened up namespace to allow more than two components
- No reason to have registry enforce “<user>/<image>”
- API “reversed” to make static layout easier
Registry API V2 URL Layout
Methods URL
GET /v2/
GET /v2/<name>/tags/list
GET, PUT, DELETE /v2/<name>/manifests/<reference>
GET /v2/<name>/blobs/<digest>
POST /v2/<name>/blobs/uploads/
GET, PUT, PATCH, DELETE /v2/<name>/blobs/uploads/<uuid>
https://docs.docker.com/registry/spec/api/
Docker Registry API V2: Design
• Shared-nothing
- “Backend” ties a cluster of registries together
- Allows scaling by adding instances
- Performance limited by backend
• Make backend faster, registry gets faster
• Pull-optimized
- Most important factor when distributing software
- May hurt certain use cases
• Resumable Pull and Push (specified but not implemented)
- Resumable pull already available with http Range requests
- Two-step upload start for resumable push
- Built into the protocol for future support
• A living specification
- Meant to be used and modified
- Always backwards compatible
Docker Registry API V2: Differences with V1
• Content addresses (digests) are primary identifier
• Unrolled image description model
• Multi-step upload
- Provides flexibility in failure modes
- Options for future alternative upload location (redirects)
• No Search API
- In V1, this API does everything
- Replacing with something better
• No explicit tagging API
- This will change: https://github.com/docker/distribution/pull/173
Docker Registry
2.0
–Earl Milford
“[A registry] should be
neither seen nor heard. ”
Handlers
Docker Registry 2.0: Architecture
Repository Repository
Storage
Access Control
Notifications
Docker Engine
Auth
API
Docker Registry 2.0: An Ingredient
• Move away from monolithic architecture
• Narrower scope
- Distribute content
• Extensible
- Authentication
- Index
- Ponies
• Strong core
- Docker Hub
- Docker Trusted Registry
Docker Registry 2.0
• Full support released with Docker 1.6
- Minimal bugs
- Most problems are common to version upgrades
• Header required to declare support for 2.0 API
• Validated most concepts in 1.3, 1.4 with V2 preview
- Much faster pull performance
- You’ve probably already used it with Docker Hub
• There are some edge cases
- push-heavy workflows
- disk IO when verifying large images
- We are mitigating these
Docker Registry 2.0: Should you use it?
• Are you on Docker 1.6+?
- Yes.
• Evaluate it
• Test it
• Break it (and file bugs https://github.com/docker/distribution/issues)
• Deploy it
• Are you on Docker <1.6?
- Are you entrenched in v1?
• Perhaps, hold off
- Run dual stack v1, v2
• Not recommended
Docker Registry 2.0: Deploying
• Internal deployments
- Use the filesystem driver — it is really fast
- Backup with rsync
• Scale storage
- Use S3 driver
• Make sure you are “close” since round trip times can have an effect
• Scale Reads
- Use round robin DNS
• Do not use this for HA
- Rsync to followers on read-only filesystem
- Add machines to taste
• https://docs.docker.com/registry/deploying/
Docker Registry 2.0: Docker Hub
• Running the Hub
- S3 backend
• Having some trouble with round trips to s3 :(
- Decent performance with very little caching
• A lot of low hanging fruit left to tackle
• No longer intertwined with Docker Hub services
• Independent Authentication Service
• Heightened Availability
Monitoring culture
Docker Hub Adoption
0%
50%
100%
Last Three Months
V1
(1.5-)
V2
(1.6+)
Docker Hub Adoption
• Overall usage increasing
• A V2 world and growing
V1/V2 Protocol Overall Comparison
0
25
50
75
100
Requests Bandwidth
V1
V2
80% Fewer Requests 60% Less Bandwidth
V1/V2 Protocol HTTP Errors
Peak Average
V1
V2
5
Exceptional Panicking
• 1 Panic in Three Months of Production
• 4000 protocol level errors per 30 minutes in V1
• 5 protocol level errors per 30 minutes in V2
Docker Registry
2.1
Docker Registry 2.1
• Key Changes
- Documentation
- Pull-through Caching
- Soft-Deletion
- Native Basic Auth Support
- Stability
- Catalog API
- Storage Drivers
• Release coming by mid-July
Docker
Distribution
Docker Distribution: Goals
• Goals
- Improve the state of image distribution in Docker
- Build a solid and secure foundation
• Focus
- Security
- Reliability
- Performance
• Unlock new distribution models
- Integration with trust system (notary!)
- Relax reliance on registries
- Peer to Peer for large deployments
Docker Distribution: Future
• Ingredients
- From the start, we have targeted solid packages
- Provide Lego to build image distribution systems
• Clean up the docker daemon code base
- Defined new APIs for working with docker content
- Increase feature velocity
- Generalize around strong base
• Current Manifest format is provisional
- Still includes v1 layer JSON
- Content-addressability + mediatypes make support new formats trivial
- https://github.com/docker/distribution/pull/62
• Feature parity with V1 and maturity
- Building collective operational knowledge
• Deletes and Garbage Collection
- Diverse backend support makes this hard
- https://github.com/docker/distribution/issues/461
- https://github.com/docker/distribution/issues/462
• Search
- See the goals of Distribution to see why this is interesting
• Road Map: https://github.com/docker/distribution/wiki
Thank you
Stephen Day
Google Group: distribution@dockerproject.org
GitHub: https://github.com/docker/distribution
IRC on Freenode: #docker-distribution

More Related Content

PDF
Docker Introduction
PPT
Docker introduction
PPTX
Getting started with Docker
PPTX
Docker: From Zero to Hero
PPTX
Docker Container Security
PPTX
Virtualization, Containers, Docker and scalable container management services
PPTX
Introduction to Docker - 2017
PDF
Getting Started with Kubernetes
Docker Introduction
Docker introduction
Getting started with Docker
Docker: From Zero to Hero
Docker Container Security
Virtualization, Containers, Docker and scalable container management services
Introduction to Docker - 2017
Getting Started with Kubernetes

What's hot (20)

PDF
Introduction to Docker Compose
PDF
Introduction to Docker - VIT Campus
PPTX
Docker Basics
PPTX
Docker introduction (1)
PDF
Introduction to Docker storage, volume and image
PDF
Introduction to docker
PDF
An Introduction to Kubernetes
PDF
Kubernetes
PDF
Kubernetes architecture
PPTX
Docker 101 : Introduction to Docker and Containers
PDF
Introduction to container based virtualization with docker
PPTX
A brief study on Kubernetes and its components
PPTX
Docker introduction for the beginners
PPTX
Docker, LinuX Container
PDF
Introduction to Docker
PDF
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
PPTX
Docker.pptx
PDF
What Is Helm
PPTX
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Introduction to Docker Compose
Introduction to Docker - VIT Campus
Docker Basics
Docker introduction (1)
Introduction to Docker storage, volume and image
Introduction to docker
An Introduction to Kubernetes
Kubernetes
Kubernetes architecture
Docker 101 : Introduction to Docker and Containers
Introduction to container based virtualization with docker
A brief study on Kubernetes and its components
Docker introduction for the beginners
Docker, LinuX Container
Introduction to Docker
왜 쿠버네티스는 systemd로 cgroup을 관리하려고 할까요
Docker.pptx
What Is Helm
Docker Tutorial For Beginners | What Is Docker And How It Works? | Docker Tut...
Ad

Similar to Docker Registry V2 (20)

PPTX
A new model for Docker image distribution
PPTX
Dockerize the World
PPTX
Intro Docker october 2013
PDF
Exploring Docker in CI/CD
PPTX
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
PDF
Lightweight Virtualization Docker in Practice
PDF
Docker in pratice -chenyifei
PDF
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
PPTX
Devoxx 2016 - Docker Nuts and Bolts
PPTX
DockerCon EU 2015 Barcelona
PDF
Containers docker-docker hub-azureacr-azure aci
PPTX
Using Docker in production: Get started today!
PPTX
Write Once and REALLY Run Anywhere | OpenStack Summit HK 2013
PPTX
Intro to Docker October 2013
PPTX
Docker introduction
PPTX
ma-formation-en-Docker-jlklk,nknkjn.pptx
PPTX
Docker Hub: Past, Present and Future by Ken Cochrane & BC Wong
PDF
DevOpsDays Houston 2019 - Shaun Ladewig, Robert Stone - From OverTheWallOps t...
PPTX
Intro docker and demo monitor on docker
A new model for Docker image distribution
Dockerize the World
Intro Docker october 2013
Exploring Docker in CI/CD
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
Lightweight Virtualization Docker in Practice
Docker in pratice -chenyifei
Cloudsolutionday 2016: DevOps workflow with Docker on AWS
Devoxx 2016 - Docker Nuts and Bolts
DockerCon EU 2015 Barcelona
Containers docker-docker hub-azureacr-azure aci
Using Docker in production: Get started today!
Write Once and REALLY Run Anywhere | OpenStack Summit HK 2013
Intro to Docker October 2013
Docker introduction
ma-formation-en-Docker-jlklk,nknkjn.pptx
Docker Hub: Past, Present and Future by Ken Cochrane & BC Wong
DevOpsDays Houston 2019 - Shaun Ladewig, Robert Stone - From OverTheWallOps t...
Intro docker and demo monitor on docker
Ad

More from Docker, Inc. (20)

PDF
Containerize Your Game Server for the Best Multiplayer Experience
PDF
How to Improve Your Image Builds Using Advance Docker Build
PDF
Build & Deploy Multi-Container Applications to AWS
PDF
Securing Your Containerized Applications with NGINX
PDF
How To Build and Run Node Apps with Docker and Compose
PDF
Hands-on Helm
PDF
Distributed Deep Learning with Docker at Salesforce
PDF
The First 10M Pulls: Building The Official Curl Image for Docker Hub
PDF
Monitoring in a Microservices World
PDF
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
PDF
Predicting Space Weather with Docker
PDF
Become a Docker Power User With Microsoft Visual Studio Code
PDF
How to Use Mirroring and Caching to Optimize your Container Registry
PDF
Monolithic to Microservices + Docker = SDLC on Steroids!
PDF
Kubernetes at Datadog Scale
PDF
Labels, Labels, Labels
PDF
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
PDF
Build & Deploy Multi-Container Applications to AWS
PDF
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
PDF
Developing with Docker for the Arm Architecture
Containerize Your Game Server for the Best Multiplayer Experience
How to Improve Your Image Builds Using Advance Docker Build
Build & Deploy Multi-Container Applications to AWS
Securing Your Containerized Applications with NGINX
How To Build and Run Node Apps with Docker and Compose
Hands-on Helm
Distributed Deep Learning with Docker at Salesforce
The First 10M Pulls: Building The Official Curl Image for Docker Hub
Monitoring in a Microservices World
COVID-19 in Italy: How Docker is Helping the Biggest Italian IT Company Conti...
Predicting Space Weather with Docker
Become a Docker Power User With Microsoft Visual Studio Code
How to Use Mirroring and Caching to Optimize your Container Registry
Monolithic to Microservices + Docker = SDLC on Steroids!
Kubernetes at Datadog Scale
Labels, Labels, Labels
Using Docker Hub at Scale to Support Micro Focus' Delivery and Deployment Model
Build & Deploy Multi-Container Applications to AWS
From Fortran on the Desktop to Kubernetes in the Cloud: A Windows Migration S...
Developing with Docker for the Arm Architecture

Recently uploaded (20)

PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Big Data Technologies - Introduction.pptx
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Encapsulation theory and applications.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Cloud computing and distributed systems.
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
DOCX
The AUB Centre for AI in Media Proposal.docx
PPT
Teaching material agriculture food technology
PDF
Electronic commerce courselecture one. Pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Big Data Technologies - Introduction.pptx
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Encapsulation theory and applications.pdf
Unlocking AI with Model Context Protocol (MCP)
NewMind AI Weekly Chronicles - August'25 Week I
Chapter 3 Spatial Domain Image Processing.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Cloud computing and distributed systems.
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
The AUB Centre for AI in Media Proposal.docx
Teaching material agriculture food technology
Electronic commerce courselecture one. Pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Understanding_Digital_Forensics_Presentation.pptx
MYSQL Presentation for SQL database connectivity
Building Integrated photovoltaic BIPV_UPV.pdf

Docker Registry V2

  • 1. A New Model for Image Distribution
  • 2. Stephen Day Distribution, Tech Lead Docker, Inc. stephen@docker.com @stevvooe github.com/stevvooe
  • 3. Overview • Why does this matter? • History • Docker Registry API V2 • Implementation • The Future
  • 5. What is an Image?
  • 6. What is an Image? • Identified by a name • ubuntu • redis • stevvooe/myapp • docker run ubuntu - Runs a container, created from image ubuntu
  • 7. What is an Image? • Containers, the runtime of docker, are created from images • Filesystem made up with “layers” - Just tar files - Layers can be shared between images • Includes a description organizing layers into an image A runnable component with a filesystem
  • 8. What is the Docker Registry?
  • 9. What is the Docker Registry? • A central place to store and distribute docker images • Stores the layers and the description of how they make up an image • Implements a common API agreed upon by Docker clients
  • 10. What is the Docker Registry? • Several Implementations • A simple web server to make images available • A complete web application • Services • Docker Hub • Docker Trusted Registry • Documentation: https://docs.docker.com/registry/ A central place to store and distribute docker images
  • 12. Docker Registry API V1: History • Layer Oriented • Layer IDs are randomly assigned • JSON object corresponding to each layer referencing a parent • Naming accomplished through tags Layer Layer Layer Layer JSON JSON JSON JSONFetch(ID) {
  • 13. Registry API V1 URL Layout Methods URL GET /v1/_ping GET, PUT /v1/images/(image_id)/layer GET, PUT /v1/images/(image_id)/json GET /v1/images/(image_id)/ancestry GET /v1/repositories/(namespace)/(repository)/tags GET, PUT, DELETE /v1/repositories/(namespace)/(repository)/tags/(tag*) DELETE /v1/repositories/(namespace)/(repository)/ GET /v1/search 13 https://docs.docker.com/reference/api/hub_registry_spec/
  • 14. Docker Registry API V1: Problems • Abstraction - Exposes Internals of Image to distribution mechanism • Security - Image IDs must be kept secret - Who assigns the layer IDs? - Hard to audit, verify • Performance - Fetch a layer, fetch the parent, fetch the parent, …
  • 15. Docker Registry API V1: Problems • Implementation in Python - Affected ease of deployment - Reduced sharing with main Docker Project • More information: • https://github.com/docker/docker/issues/8093
  • 17. Docker Registry API V2: Goals • Simplicity - Easy to implement - Works with static host • Security - Verifiable Images - Straightforward access control
  • 18. Docker Registry API V2: Goals • Distribution - Separate location of content from naming • Performance - Remove the single track • Implementation - Use Go to increase code sharing with Docker Engine
  • 19. Docker Registry API V2: Content Addressable • Layers are treated as content-addressable blobs - Much better for security - Permits safe-distribution through untrusted channels • All data can be verified • De-duplication • Improved cache-ability • Content address is known as the “digest”
  • 20. Docker Registry API V2: Digests • Uniquely identifies content • A cryptographically strong hash - Chose a name, digest, that does not conflict with other concepts (map, dict, crc, etc.) - Simply using sha256(bytes) • Independently Verifiable - By agreeing on common algorithm, IDs chosen for content without coordination • Strongly-typed with tools to parse and verify - http://godoc.org/github.com/docker/distribution/digest
  • 21. Docker Registry API V2: Manifests • Describes the components of an image in a single object - Layers can be fetched immediately, in parallel LayerLayer Layer Layer JSONFetch(ID) {
  • 22. Docker Registry API V2: Manifests { "name": <name>, "tag": <tag>, "fsLayers": [ { "blobSum": <digest> }, ... ] ], "history": [<v1 image json>, ... ] }
  • 23. Docker Registry API V2: Manifest • Content-addressable: - docker pull ubuntu@sha256:8126991394342c2775a9ba4a843869112da815 6037451fc424454db43c25d8b0 • Leverages Merkle DAG - Because the digests of the layers are in the manifest, if any bit in the layer changes, the digest of the manifest changes - Similar to git, ipfs, camlistore and a host of other projects • Tags are in the manifest - This will going away
  • 24. Docker Registry API V2: Repositories • All content is now part of a named repository - Image IDs are no longer a secret - Simplified authorization model • repository + operation (push, pull) - Clients must “prove” content is available to another repository by providing it • Opened up namespace to allow more than two components - No reason to have registry enforce “<user>/<image>” - API “reversed” to make static layout easier
  • 25. Registry API V2 URL Layout Methods URL GET /v2/ GET /v2/<name>/tags/list GET, PUT, DELETE /v2/<name>/manifests/<reference> GET /v2/<name>/blobs/<digest> POST /v2/<name>/blobs/uploads/ GET, PUT, PATCH, DELETE /v2/<name>/blobs/uploads/<uuid> https://docs.docker.com/registry/spec/api/
  • 26. Docker Registry API V2: Design • Shared-nothing - “Backend” ties a cluster of registries together - Allows scaling by adding instances - Performance limited by backend • Make backend faster, registry gets faster • Pull-optimized - Most important factor when distributing software - May hurt certain use cases • Resumable Pull and Push (specified but not implemented) - Resumable pull already available with http Range requests - Two-step upload start for resumable push - Built into the protocol for future support • A living specification - Meant to be used and modified - Always backwards compatible
  • 27. Docker Registry API V2: Differences with V1 • Content addresses (digests) are primary identifier • Unrolled image description model • Multi-step upload - Provides flexibility in failure modes - Options for future alternative upload location (redirects) • No Search API - In V1, this API does everything - Replacing with something better • No explicit tagging API - This will change: https://github.com/docker/distribution/pull/173
  • 29. –Earl Milford “[A registry] should be neither seen nor heard. ”
  • 30. Handlers Docker Registry 2.0: Architecture Repository Repository Storage Access Control Notifications Docker Engine Auth API
  • 31. Docker Registry 2.0: An Ingredient • Move away from monolithic architecture • Narrower scope - Distribute content • Extensible - Authentication - Index - Ponies • Strong core - Docker Hub - Docker Trusted Registry
  • 32. Docker Registry 2.0 • Full support released with Docker 1.6 - Minimal bugs - Most problems are common to version upgrades • Header required to declare support for 2.0 API • Validated most concepts in 1.3, 1.4 with V2 preview - Much faster pull performance - You’ve probably already used it with Docker Hub • There are some edge cases - push-heavy workflows - disk IO when verifying large images - We are mitigating these
  • 33. Docker Registry 2.0: Should you use it? • Are you on Docker 1.6+? - Yes. • Evaluate it • Test it • Break it (and file bugs https://github.com/docker/distribution/issues) • Deploy it • Are you on Docker <1.6? - Are you entrenched in v1? • Perhaps, hold off - Run dual stack v1, v2 • Not recommended
  • 34. Docker Registry 2.0: Deploying • Internal deployments - Use the filesystem driver — it is really fast - Backup with rsync • Scale storage - Use S3 driver • Make sure you are “close” since round trip times can have an effect • Scale Reads - Use round robin DNS • Do not use this for HA - Rsync to followers on read-only filesystem - Add machines to taste • https://docs.docker.com/registry/deploying/
  • 35. Docker Registry 2.0: Docker Hub • Running the Hub - S3 backend • Having some trouble with round trips to s3 :( - Decent performance with very little caching • A lot of low hanging fruit left to tackle • No longer intertwined with Docker Hub services • Independent Authentication Service • Heightened Availability
  • 37. Docker Hub Adoption 0% 50% 100% Last Three Months V1 (1.5-) V2 (1.6+)
  • 38. Docker Hub Adoption • Overall usage increasing • A V2 world and growing
  • 39. V1/V2 Protocol Overall Comparison 0 25 50 75 100 Requests Bandwidth V1 V2 80% Fewer Requests 60% Less Bandwidth
  • 40. V1/V2 Protocol HTTP Errors Peak Average V1 V2 5
  • 41. Exceptional Panicking • 1 Panic in Three Months of Production • 4000 protocol level errors per 30 minutes in V1 • 5 protocol level errors per 30 minutes in V2
  • 43. Docker Registry 2.1 • Key Changes - Documentation - Pull-through Caching - Soft-Deletion - Native Basic Auth Support - Stability - Catalog API - Storage Drivers • Release coming by mid-July
  • 45. Docker Distribution: Goals • Goals - Improve the state of image distribution in Docker - Build a solid and secure foundation • Focus - Security - Reliability - Performance • Unlock new distribution models - Integration with trust system (notary!) - Relax reliance on registries - Peer to Peer for large deployments
  • 46. Docker Distribution: Future • Ingredients - From the start, we have targeted solid packages - Provide Lego to build image distribution systems • Clean up the docker daemon code base - Defined new APIs for working with docker content - Increase feature velocity - Generalize around strong base • Current Manifest format is provisional - Still includes v1 layer JSON - Content-addressability + mediatypes make support new formats trivial - https://github.com/docker/distribution/pull/62 • Feature parity with V1 and maturity - Building collective operational knowledge • Deletes and Garbage Collection - Diverse backend support makes this hard - https://github.com/docker/distribution/issues/461 - https://github.com/docker/distribution/issues/462 • Search - See the goals of Distribution to see why this is interesting • Road Map: https://github.com/docker/distribution/wiki
  • 47. Thank you Stephen Day Google Group: distribution@dockerproject.org GitHub: https://github.com/docker/distribution IRC on Freenode: #docker-distribution