The project structure of the Docker CLI is organized in a way that separates different functionalities into various directories and files. Here’s a breakdown of the project structure:
Top-level directories
.github/: Contains GitHub-related configuration files such as issue templates, workflows, CODEOWNERS, etc.cli/: Contains the main codebase for the Docker CLI.cli-plugins/: Contains the plugin system for the Docker CLI.cmd/: Contains the main command-line entry points for the Docker CLI.contrib/: Contains various contribution-related files such as completions for different shells.dockerfiles/: Contains Dockerfiles for building various components of the Docker CLI.e2e/: Contains end-to-end test suites for the Docker CLI.experimental/: Contains experimental features for the Docker CLI.hack/: Contains various scripts and configuration files for hacking on the Docker CLI.internal/: Contains internal implementation details of the Docker CLI.man/: Contains man pages for the Docker CLI.opts/: Contains various options and flags used throughout the Docker CLI.pkg/: Contains reusable packages used throughout the Docker CLI.scripts/: Contains various scripts used in the development and build process of the Docker CLI.service/: Contains various services used in the Docker CLI.templates/: Contains various templates used in the Docker CLI.
cli/ directory
The cli/ directory contains the main codebase for the Docker CLI. It is further divided into the following directories:
command/: Contains various commands that can be executed using the Docker CLI.compose/: Contains various files related to Docker Compose.connhelper/: Contains various connection helpers used in the Docker CLI.context/: Contains various context-related functionalities used in the Docker CLI.debug/: Contains various debugging tools used in the Docker CLI.flags/: Contains various flags used throughout the Docker CLI.hints/: Contains various hints used in the Docker CLI.internal/: Contains internal implementation details of the Docker CLI.manifest/: Contains various files related to Docker Manifest.registry/: Contains various files related to Docker Registry.streams/: Contains various stream-related functionalities used in the Docker CLI.trust/: Contains various trust-related functionalities used in the Docker CLI.version/: Contains various version-related functionalities used in the Docker CLI.winresources/: Contains various Windows-related resources used in the Docker CLI.
cli-plugins/ directory
The cli-plugins/ directory contains the plugin system for the Docker CLI. It is further divided into the following directories:
examples/: Contains various example plugins for the Docker CLI.hooks/: Contains various hooks used in the Docker CLI plugin system.manager/: Contains the main plugin manager for the Docker CLI.plugin/: Contains various plugin-related functionalities used in the Docker CLI.socket/: Contains various socket-related functionalities used in the Docker CLI plugin system.
cmd/ directory
The cmd/ directory contains the main command-line entry points for the Docker CLI. It is further divided into the following directories:
docker/: Contains the main command-line entry point for the Docker CLI.docker/internal/: Contains internal implementation details of the Docker CLI command-line entry point.docker/winresources/: Contains various Windows-related resources used in the Docker CLI command-line entry point.
contrib/ directory
The contrib/ directory contains various contribution-related files such as completions for different shells. It is further divided into the following directories:
completion/: Contains various completion scripts for different shells.bash/: Contains the Bash completion script for the Docker CLI.fish/: Contains the Fish completion script for the Docker CLI.powershell/: Contains the PowerShell completion script for the Docker CLI.zsh/: Contains the Zsh completion script for the Docker CLI.
dockerfiles/ directory
The dockerfiles/ directory contains Dockerfiles for building various components of the Docker CLI. It is further divided into the following directories:
Dockerfile.authors: Contains the Dockerfile for building the Docker CLI authors image.Dockerfile.dev: Contains the Dockerfile for building the Docker CLI development image.Dockerfile.lint: Contains the Dockerfile for building the Docker CLI lint image.Dockerfile.shellcheck: Contains the Dockerfile for building the Docker CLI shellcheck image.Dockerfile.vendor: Contains the Dockerfile for building the Docker CLI vendor image.
e2e/ directory
The e2e/ directory contains end-to-end test suites for the Docker CLI. It is further divided into the following directories:
cli-plugins/: Contains various end-to-end test suites for the Docker CLI plugin system.plugins/: Contains various end-to-end test suites for the Docker CLI plugins.testdata/: Contains various test data used in the Docker CLI end-to-end test suites.
experimental/ directory
The experimental/ directory contains experimental features for the Docker CLI. It is further divided into the following directories:
README.md: Contains the README file for the experimental features of the Docker CLI.
hack/ directory
The hack/ directory contains various scripts and configuration files for hacking on the Docker CLI. It is further divided into the following directories:
otel/: Contains various OpenTelemetry-related scripts and configuration files.otel/compose.yaml: Contains the Docker Compose file for the OpenTelemetry setup.otel/otelcol.yaml: Contains the OpenTelemetry Collector configuration file.otel/prom.yaml: Contains the Prometheus configuration file.
internal/ directory
The internal/ directory contains internal implementation details of the Docker CLI. It is further divided into the following directories:
test/: Contains various test suites for the Docker CLI.test/builders/: Contains various builder-related test suites for the Docker CLI.test/environment/: Contains various environment-related test suites for the Docker CLI.test/network/: Contains various network-related test suites for the Docker CLI.test/notary/: Contains various notary-related test suites for the Docker CLI.test/output/: Contains various output-related test suites for the Docker CLI.test/cli.go: Contains the main test suite for the Docker CLI.test/cmd.go: Contains various command-related test suites for the Docker CLI.test/doc.go: Contains various documentation-related test suites for the Docker CLI.test/store.go: Contains various store-related test suites for the Docker CLI.test/strings.go: Contains various string-related test suites for the Docker CLI.test/writer.go: Contains various writer-related test suites for the Docker CLI.
man/ directory
The man/ directory contains man pages for the Docker CLI. It is further divided into the following directories