  Software design patterns present general code solutions to common software
design problems. Modern software systems rely heavily on containers for running
their constituent service components. Yet, despite the prevalence of
ready-to-use Docker service images ready to participate in multi-container
service compositions of applications, developers do not have much guidance on
how to compose their own Docker service orchestrations. Thus in this work, we
curate a dataset of successful projects that employ Docker Compose as an
orchestration tool to run multiple service containers; then, we engage in
qualitative and quantitative analysis of Docker Compose configurations. The
collection of data and analysis enables the identification and naming of
repeating multi-container composition patterns that are used in numerous
successful open-source projects, much like software design patterns. These
patterns highlight how software systems are orchestrated in the real-world and
can give examples to anybody wishing to compose their own service
orchestrations. These contributions also advance empirical research in software
engineering patterns as evidence is provided about how Docker Compose is used.
