Docker Registry Trace Player

Improving Docker Registry Design based on Production Workload Analysis
Ali Anwar, Virginia Tech; Mohamed Mohamed and Vasily Tarasov, IBM Almaden; Michael Littley, Virginia Tech; Lukas Rupprecht, IBM Almaden; Yue Cheng, George Mason University; Nannan Zhao, Virginia Tech; Dimitrios Skourtis, Amit S. Warke, and Heiko Ludwig, IBM Almaden; Dean Hildebrand, IBM Research; Ali R. Butt, Virginia Tech. In Proceedings of USENIX FAST, 2018.

Download the traces: Traces

Source code github repo: Trace Replayer

The Docker registry trace player is used to replay anonimized production level traces for a registry, available in the traces directory. The traces are from the IBM docker registry, separated by availability zones. The trace player can send traces to an actual registry or be used to simulate different caching or prefetching.

The trace replayer can operate in two modes to perform two types of analysis: 1) performance analysis of a large scale registry setup, and 2) static analysisi of traces.


The trace player has two parts: the master and the client. The master is reponsible for reading a trace, generating layers, and distributing the layer requests amoung client applications to forward to a registry. The client application is only needed for the run mode.

The trace player has 3 modes:

The warmup mode connects to a registry and pushes all the layers in the traces specified by the configuration file. Layers are generated as a string of 0's equal to the size of the request reported in the trace. Because the traces are anonimized, manifests are are treated as layers for the warmup and run modes. During warmup, layers will be pushed to the first registry in the configuration file.

The Run mode replays the anonymized traces to the registry or registries specified in the configuration file. One or more clients need to be up before the master node is started.

The simulate mode takes a python file from the configuration file and attempts to call an init function from it. If arguments are specified in the configuration file, then init will be called with two arguments: a sorted list of the requests, and a dictionary of the arguments. If arguments are not specified, then init will be called with just the list of requests.

How to use the Trace Player:

Please see the README file for the instructions on how to use the trace player.

Support Channel:

Michael Littley: Ali Anwar:

Support is also available through the github repository


This work is sponsored in part by IBM, and by the NSF under the grants: CNS-1565314, CNS-1405697, and CNS-1615411.