From 5afd6155f49ba9a6e743509277c76696449030c0 Mon Sep 17 00:00:00 2001 From: Craig Date: Mon, 29 Sep 2025 13:28:09 -0700 Subject: [PATCH] hub: add dvp infrastructure benefit Signed-off-by: Craig --- _vale/config/vocabularies/Docker/accept.txt | 4 + .../images/verified-publisher-badge-iso.png | Bin 8242 -> 0 bytes .../images/verified-publisher-badge.png | Bin 38098 -> 13554 bytes .../manage/trusted-content/dvp-program.md | 196 ++++++++--- .../trusted-content/images/dvp-hub-flow.svg | 5 + .../trusted-content/insights-analytics.md | 331 ++++++++++++++++-- 6 files changed, 456 insertions(+), 80 deletions(-) delete mode 100644 content/manuals/docker-hub/images/verified-publisher-badge-iso.png create mode 100644 content/manuals/docker-hub/repos/manage/trusted-content/images/dvp-hub-flow.svg diff --git a/_vale/config/vocabularies/Docker/accept.txt b/_vale/config/vocabularies/Docker/accept.txt index a34666b13c2e..3a8096944aaf 100644 --- a/_vale/config/vocabularies/Docker/accept.txt +++ b/_vale/config/vocabularies/Docker/accept.txt @@ -73,6 +73,7 @@ EPERM ESXi Ethernet exploitability +[Ff]ailover Fargate Fedora firewalld @@ -226,6 +227,7 @@ Zsh [Aa]gentic [Aa]utobuilds? [Aa]utotests? +[Aa]utoscaling [Bb]uildx [Bb]uildpack(s)? [Bb]uildx @@ -234,6 +236,7 @@ Zsh [Cc]onfigs [dD]eduplicate [Dd]ev +[Dd]iscoverability [Dd]istroless [Ff]ilepaths? [Ff]iletypes? @@ -271,6 +274,7 @@ Zsh [Ss]yscalls? [Ss]ysfs [Tt]eardown +[Tt]echnographic [Tt]odo [Tt]oolchains? [Uu]narchived? diff --git a/content/manuals/docker-hub/images/verified-publisher-badge-iso.png b/content/manuals/docker-hub/images/verified-publisher-badge-iso.png deleted file mode 100644 index 63721f3148d66a8f50cae2b2df7d10c8bacfa6eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8242 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 diff --git a/content/manuals/docker-hub/images/verified-publisher-badge.png b/content/manuals/docker-hub/images/verified-publisher-badge.png index 27d99b87fcf49aead26b496c78b9ad4123b91a33..2b7c19e02d610f7e06ce50035796ae742819c6f7 100644 GIT binary patch literal 13554 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 literal 38098 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 Uf3iG(6V3nxp00i_>zopr0NA)0g#Z8m diff --git a/content/manuals/docker-hub/repos/manage/trusted-content/dvp-program.md b/content/manuals/docker-hub/repos/manage/trusted-content/dvp-program.md index 39f75d10d30d..586e8218d315 100644 --- a/content/manuals/docker-hub/repos/manage/trusted-content/dvp-program.md +++ b/content/manuals/docker-hub/repos/manage/trusted-content/dvp-program.md @@ -14,91 +14,179 @@ aliases: - /docker-hub/publish/repository-logos/ - /docker-hub/dvp-program/ - /trusted-content/dvp-program/ +toc_max: 2 --- -[The Docker Verified Publisher Program](https://hub.docker.com/search?q=&image_filter=store) provides high-quality images from commercial publishers verified by Docker. +[The Docker Verified Publisher +Program](https://hub.docker.com/search?q=&image_filter=store) provides +high-quality images from commercial publishers verified by Docker. -These images help development teams build secure software supply chains, minimizing exposure to malicious content early in the process to save time and money later. +These images help development teams build secure software supply chains, +minimizing exposure to malicious content early in the process to save time and +money later. -Images that are part of this program have a special badge on Docker Hub making it easier for users to identify projects that Docker has verified as high-quality commercial publishers. +## Who's eligible to become a verified publisher? -![Docker-Sponsored Open Source badge](../../../images/verified-publisher-badge-iso.png) +Any independent software vendor who distributes software on Docker Hub can join +the Verified Publisher Program. Find out more by heading to the [Docker Verified +Publisher Program](https://www.docker.com/partners/programs) page. + +> [!NOTE] +> +> DVP entitlements are applied per namespace (organization). If you operate +> multiple Docker Hub namespaces, each requires a separate DVP application and +> verification process. + +## Program benefits + +The Docker Verified Publisher Program (DVP) provides several features and +benefits to Docker Hub publishers. The program grants the following perks based +on participation tier: + +- [Enterprise-grade infrastructure](#enterprise-grade-infrastructure): High + availability hosting with 99.9% uptime +- [Verified publisher badge](#verified-publisher-badge): Special badge + identifying high-quality commercial publishers +- [Repository logo](#repository-logo): Upload custom logos for individual + repositories +- [Insights and analytics](#insights-and-analytics): Detailed usage metrics and + community engagement data +- [Vulnerability analysis](#vulnerability-analysis): Automated security scanning + with Docker Scout +- [Priority search ranking](#priority-search-ranking): Enhanced discoverability + in Docker Hub search results +- [Additional Docker Business seats](#additional-docker-business-seats): Extra + team collaboration capabilities +- [Removal of rate limiting](#removal-of-rate-limiting): Unrestricted pulls for + development teams +- [Co-marketing opportunities](#co-marketing-opportunities): Joint promotional + activities with Docker + +### Enterprise-grade infrastructure + +The Docker Verified Publisher Program runs on Docker Hub's enterprise-scale +infrastructure, serving millions of developers globally. Your published content +benefits from: + +- High availability and uptime: Docker's systems are designed for failover + across multiple availability zones, with load-balanced autoscaling, enabling + 99.9% uptime. +- Global delivery and fast downloads: Docker leverages Cloudflare's CDN and + caching (with Cache Reserve) to achieve cache hit ratios more than 99%, + reducing reliance on origin traffic and ensuring fast access for developers + everywhere. +- Durability: Docker maintains a documented backup policy and performs full + daily, backups of production data. + +You simply push your images to Docker Hub as usual, and Docker takes care of the +rest, serving your image to millions of developers worldwide. + +![DVP flow in Docker Hub](./images/dvp-hub-flow.svg) + +To learn more, see [Availability at +Docker](https://www.docker.com/trust/availability/). + +### Verified publisher badge -The Docker Verified Publisher Program (DVP) provides several features and benefits to Docker -Hub publishers. The program grants the following perks based on participation tier: +Images that are part of this program have a special badge on Docker Hub making +it easier for users to identify projects that Docker has verified as +high-quality commercial publishers. -- Repository logo -- Verified publisher badge -- Priority search ranking in Docker Hub -- Insights and analytics -- Vulnerability analysis -- Additional Docker Business seats -- Removal of rate limiting for developers -- Co-marketing opportunities +![Docker-Sponsored Open Source +badge](../../../images/verified-publisher-badge.png) ### Repository logo -DVP organizations can upload custom images for individual repositories on Docker Hub. -This lets you override the default organization-level logo on a per-repository basis. +DVP organizations can upload custom images for individual repositories on Docker +Hub. This lets you override the default organization-level logo on a +per-repository basis. -Only a user with administrative access (owner or team member with administrator permission) -over the repository can change the repository logo. +Only a user with administrative access (owner or team member with administrator +permission) over the repository can change the repository logo. To manage the +repository logo, see [Manage repository logo](#manage-repository-logo). -#### Image requirements +### Vulnerability analysis -- The supported filetypes for the logo image are JPEG and PNG. -- The minimum allowed image size in pixels is 120×120. -- The maximum allowed image size in pixels is 1000×1000. -- The maximum allowed image file size is 5MB. +[Docker Scout](/scout/) provides automatic vulnerability analysis +for DVP images published to Docker Hub. +Scanning images ensures that the published content is secure, and proves to +developers that they can trust the image. -#### Set the repository logo +You can enable analysis on a per-repository basis. For more about using this +feature, see [Basic vulnerability +scanning](/docker-hub/repos/manage/vulnerability-scanning/). -1. Sign in to [Docker Hub](https://hub.docker.com). -2. Go to the page of the repository that you want to change the logo for. -3. Select the upload logo button, represented by a camera icon ({{< inline-image - src="../../../images/upload_logo_sm.png" alt="camera icon" >}}) overlaying the -current repository logo. -4. In the dialog that opens, select the PNG image that you want to upload to - set it as the logo for the repository. +### Priority search ranking -#### Remove the logo +Verified publisher images receive enhanced visibility in Docker Hub search +results, making it easier for developers to discover your content. This improved +discoverability helps drive adoption of your images within the developer +community. -Select the **Clear** button ({{< inline-image src="../../../images/clear_logo_sm.png" -alt="clear button" >}}) to remove a logo. +### Additional Docker Business seats -Removing the logo makes the repository default to using the organization logo, if set, or the following default logo if not. +DVP participants receive additional Docker Business seats as part of their +program benefits, enabling expanded team collaboration and access to premium +Docker features for your organization. -![Default logo which is a 3D grey cube](../../../images/default_logo_sm.png) +### Removal of rate limiting -### Verified publisher badge +Verified publisher images are exempt from standard [Docker Hub rate +limits](../../../usage/_index.md), ensuring developers can pull your images +without restrictions. **This applies to all users, including unauthenticated users**, +who get unlimited pulls for DVP images. This eliminates potential barriers to adoption and +provides a seamless experience for users of your content. + +DVP partners can verify this unlimited access by checking the absence of rate +limiting headers when pulling their images. When pulling DVP images, users won't +see `ratelimit-limit` or `ratelimit-remaining` headers, indicating unlimited +access. For more details on checking rate limits, see [View pull rate and +limit](../../../usage/pulls.md#view-pull-rate-and-limit). -Images that are part of this program have a badge on Docker Hub making it easier for developers -to identify projects that Docker has verified as high quality publishers and with content they can trust. +### Co-marketing opportunities -![Docker, Inc. org with a verified publisher badge](../../../images/verified-publisher-badge.png) +Docker collaborates with verified publishers on joint marketing initiatives, +including blog posts, case studies, webinars, and conference presentations. +These opportunities help amplify your brand visibility within the Docker +ecosystem. ### Insights and analytics -The [insights and analytics](./insights-analytics.md) service provides usage metrics for how +The insights and analytics service provides usage metrics for how the community uses Docker images, granting insight into user behavior. -The usage metrics show the number of image pulls by tag or by digest, and breakdowns by +There is both a [web interface](./insights-analytics.md) and an +[API](/reference/api/dvp/latest/) for accessing the analytics data. + +The usage metrics show the number of image pulls by tag or by digest, geolocation, cloud provider, client, and more. -You can select the time span for which you want to view analytics data. You can also export the data in either a summary or raw format. +## Manage repository logo -### Vulnerability analysis +After joining the Docker Verified Publisher Program, you can set a custom logo +for each repository in your organization. The following requirements apply: -[Docker Scout](/scout/) provides automatic vulnerability analysis -for DVP images published to Docker Hub. -Scanning images ensures that the published content is secure, and proves to -developers that they can trust the image. +- The supported filetypes for the logo image are JPEG and PNG. +- The minimum allowed image size in pixels is 120×120. +- The maximum allowed image size in pixels is 1000×1000. +- The maximum allowed image file size is 5MB. + +### Set the repository logo + +1. Sign in to [Docker Hub](https://hub.docker.com). +2. Go to the page of the repository that you want to change the logo for. +3. Select the upload logo button, represented by a camera icon ({{< inline-image + src="../../../images/upload_logo_sm.png" alt="camera icon" >}}) overlaying the +current repository logo. +4. In the dialog that opens, select the PNG image that you want to upload to + set it as the logo for the repository. + +### Remove the logo -You can enable analysis on a per-repository -basis. For more about using this feature, see [Basic vulnerability scanning](/docker-hub/repos/manage/vulnerability-scanning/). +Select the **Clear** button ({{< inline-image src="../../../images/clear_logo_sm.png" +alt="clear button" >}}) to remove a logo. -### Who's eligible to become a verified publisher? +Removing the logo makes the repository default to using the organization logo, +if set, or the following default logo if not. -Any independent software vendor who distributes software on Docker Hub can join -the Verified Publisher Program. Find out more by heading to the -[Docker Verified Publisher Program](https://www.docker.com/partners/programs) page. +![Default logo which is a 3D grey cube](../../../images/default_logo_sm.png) diff --git a/content/manuals/docker-hub/repos/manage/trusted-content/images/dvp-hub-flow.svg b/content/manuals/docker-hub/repos/manage/trusted-content/images/dvp-hub-flow.svg new file mode 100644 index 000000000000..d3c73a7b93ce --- /dev/null +++ b/content/manuals/docker-hub/repos/manage/trusted-content/images/dvp-hub-flow.svg @@ -0,0 +1,5 @@ + + +Write and packagecode as a DockerimageDocker HubDVPHigh-availabilityCDN & cachingDurabilityDevelopers / CIPull & use your DVPimages anywhere99.9% uptimeFast access everywhereDaily backups \ No newline at end of file diff --git a/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md b/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md index 078fda8f0288..878a780a67b4 100644 --- a/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md +++ b/content/manuals/docker-hub/repos/manage/trusted-content/insights-analytics.md @@ -8,22 +8,289 @@ aliases: - /trusted-content/insights-analytics/ --- -Insights and analytics provides usage analytics for Docker Verified -Publisher (DVP) and Docker-Sponsored Open Source (DSOS) images on Docker Hub. This includes self-serve access to image and extension usage metrics for a desired time span. You can also display the number of image pulls by tag or by digest, and get breakdowns by geolocation, cloud provider, client, and more. +Insights and analytics provides usage analytics for [Docker Verified Publisher +(DVP)](https://www.docker.com/partners/programs/) and [Docker-Sponsored Open +Source (DSOS)](https://www.docker.com/community/open-source/application/#) +images on Docker Hub. This includes self-serve access to image and extension +usage metrics for a desired time span. You can see the number of image pulls by +tag or by digest, geolocation, cloud provider, client, and more. + +> [!NOTE] +> +> The Legacy DVP program applies to existing customers who have not yet renewed +> to DVP Core. The DVP Legacy program is deprecated and will be retired. Contact +> your Docker sales representative or +> [Docker](https://www.docker.com/partners/programs/) for more information. + +{{< tabs >}} +{{< tab name="DVP program" >}} + +All members of an organization have access to the analytics data. Members can +access analytics data in the [Docker Hub](https://hub.docker.com/) web interface +or by using the [DVP Data API](/reference/api/dvp/latest/). The following covers +the web interface. + +## Available reports + +The following reports may be available for download as CSV files: + +- [Summary](#summary-report) +- [Trends](#trends-report) +- [Technographic](#technographic-report) +- [Technographic companies](#technographic-companies-report) +- [Tracked companies](#tracked-companies-report) + +The reports available for download may vary based on your organization's +subscription. Contact your Docker sales representative or +[Docker](https://www.docker.com/partners/programs/) for more information. + +### Summary report + +The summary report provides high-level usage metrics aggregated across all your +Docker Hub content, organized by namespace and repository. This report gives you +a comprehensive overview of your image portfolio performance, helping you +understand which repositories, tags, and specific image versions are most +popular with your users. + +You can use this report to answer questions like: + +- Which of my repositories are getting the most usage? +- How do different image tags compare in terms of adoption? +- What's the ratio of actual downloads versus version checks across my + portfolio? +- Which specific image digests are being pulled most frequently? +- How has overall usage changed over time for my entire image collection? + +To access the report: + +1. Sign in to [Docker Hub](https://hub.docker.com/). +2. Select **My Hub** in the top navigation. +3. Select your organization in the left navigation. +4. Select **Analytics** > **Overview** in the left navigation. +5. Download the report by doing one of the following: + - Select **Download Weekly Summary**. + - Select the **Download Monthly Summary**. + - Expand the **Summary reports for the year** drop-down and then select + **Download report** for the desired week or month. + +The summary report is a CSV file that contains the following data points: + +| Field | Description | +|-------|-------------| +| `DATE_GRANULARITY` | Weekly or monthly granularity of the data. Indicates whether the data is aggregated by week or month. | +| `DATE_REFERENCE` | The start date of the week or month in YYYY-MM-DD format (e.g., `2025-09-29` for the week starting September 29, 2025). | +| `PUBLISHER_NAME` | The name of the Docker organization that owns the repository (e.g., `demonstrationorg`). | +| `LEVEL` | The aggregation level of the data - either `repository` (summary for entire repository), `tag` (summary for specific tag), or `digest` (summary for specific digest). | +| `REFERENCE` | The specific reference being summarized - the repository name, tag name, or digest hash depending on the level. | +| `DATA_DOWNLOADS` | The number of actual image downloads. | +| `VERSION_CHECKS` | The number of version checks performed (HEAD requests to check for updates without downloading the full image). | +| `EVENT_COUNT` | The total number of events, calculated as the sum of data downloads and version checks. | + +### Trends report + +The trends report helps you understand how adoption of your container images +evolves over time. It provides visibility into pull activity across repositories +and tags, enabling you to identify adoption patterns, version migration trends, +and usage environments (e.g., local development, CI/CD, production). + +You can use this report to answer questions like: + +- Which versions are gaining or losing traction? +- Is a new release being adopted? +- How does usage vary across cloud providers? + +To access the report: + +1. Sign in to [Docker Hub](https://hub.docker.com/). +2. Select **My Hub** in the top navigation. +3. Select your organization in the left navigation. +4. Select **Analytics** > **Trends** in the left navigation. +5. Select **DATA BY WEEK** or **DATA BY MONTH** to choose the data granularity. +6. Select **Download report** for the desired week or month. + +The trends report is a CSV file that contains the following data points: + +| Field | Description | +|-------|-------------| +| `DATE_GRANULARITY` | Weekly or monthly granularity of the data. | +| `DATE_REFERENCE` | The start date of the week or month. | +| `PUBLISHER_NAME` | The name of the organization that owns the repository. | +| `IMAGE_REPOSITORY` | The full name of the image repository (e.g., `demonstrationorg/scout-demo`). | +| `NAMESPACE` | The Docker organization or namespace that owns the repository. | +| `IP_COUNTRY` | The country code (ISO 3166-1 alpha-2) where the pull request originated from (e.g., `US`, `CA`). | +| `CLOUD_SERVICE_PROVIDER` | The cloud service provider used for the pull request (e.g., `gcp`, `aws`, `azure`) or `no csp` for non-cloud providers. | +| `USER_AGENT` | The client application or tool used to pull the image (e.g., `docker`, `docker-scout`, `node-fetch`, `regclient`). | +| `TAG` | The specific image tag that was pulled, or `\\N` if no specific tag was used. | +| `DATA_DOWNLOADS` | The number of data downloads for the specified criteria. | +| `VERSION_CHECKS` | The number of version checks (HEAD requests) performed without downloading the full image. | +| `PULLS` | The total number of pull requests (data downloads + version checks). | +| `UNIQUE_AUTHENTICATED_USERS` | The number of unique authenticated users who performed pulls. | +| `UNIQUE_UNAUTHENTICATED_USERS` | The number of unique unauthenticated users who performed pulls. | + +### Technographic report + +The technographic report provides insights into how your Docker Verified +Publisher (DVP) images are used alongside other container images in real-world +technology stacks. This report helps you understand the technical ecosystem +where your images operate and identify co-usage patterns with other images. + +You can use this report to answer questions like: + +- Which other images are commonly used together with your images? +- What percentage of your user base also uses specific complementary + technologies? +- How many companies in your ecosystem use both your image and other popular + images? +- What technology stacks are most popular among your users? + +To access the report: + +1. Sign in to [Docker Hub](https://hub.docker.com/). +2. Select **My Hub** in the top navigation. +3. Select your organization in the left navigation. +4. Select **Analytics** > **Technographic** in the left navigation. +5. Select **DATA BY WEEK** or **DATA BY MONTH** to choose the data granularity. +6. Select **Download report** for the desired week or month. + +The technographic report is a CSV file that contains the following data points: + +| Field | Description | +|-------|-------------| +| `DATE_GRANULARITY` | Weekly or monthly granularity of the data. | +| `DATE_REFERENCE` | The start date of the week or month in YYYY-MM-DD format. | +| `PUBLISHER_ID` | The unique identifier for the publisher organization. | +| `PUBLISHER_NAME` | The name of the organization that owns the DVP repository. | +| `DVPP_IMAGE` | Your Docker Verified Publisher image repository name. | +| `PAIRED_IMAGE` | The other image repository that is commonly used together with your DVP image. | +| `USERS` | The number of unique users who pulled both your DVP image and the paired image within the time period. | +| `TOTAL_PULLERS` | The total number of unique users who pulled your DVP image during the time period. | +| `PCT_USERS` | The percentage of your image's users who also use the paired image (users/total_pullers). | +| `DOMAINS` | The number of unique company domains that pulled both your DVP image and the paired image. | +| `TOTAL_DOMAINS` | The total number of unique company domains that pulled your DVP image. | +| `PCT_DOMAINS` | The percentage of company domains using your image that also use the paired image (domains/total_domains). | + +> [!NOTE] +> +> To protect user privacy and ensure statistical significance, the technographic +> report only includes image pairings that have at least 10 unique users. +> Personal, disposable, and university email domains are excluded from the +> company domain analysis. + +### Technographic companies report + +The technographic companies report provides a detailed view of which specific +companies (identified by their domains) are using your Docker Verified Publisher +(DVP) images together with other container images. This report gives you +visibility into the actual organizations adopting your technology stack +combinations, enabling targeted business development and partnership +opportunities. + +You can use this report to answer questions like: + +- Which companies are using my image alongside specific complementary + technologies? +- What technology stacks are adopted by enterprise customers in my target + market? +- Which organizations might be good candidates for partnership discussions? +- How can I identify potential customers who are already using related + technologies? + +To access the report: + +1. Sign in to [Docker Hub](https://hub.docker.com/). +2. Select **My Hub** in the top navigation. +3. Select your organization in the left navigation. +4. Select **Analytics** > **Technographic** in the left navigation. +5. Select **DATA BY WEEK** or **DATA BY MONTH** to choose the data granularity. +6. Select **Download report** for the desired week or month. + +The technographic companies report is a CSV file that contains the following +data points: + +| Field | Description | +|-------|-------------| +| `DATE_GRANULARITY` | Weekly or monthly granularity of the data. | +| `DATE_REFERENCE` | The start date of the week or month in YYYY-MM-DD format. | +| `PUBLISHER_NAME` | The name of the organization that owns the DVP repository. | +| `DOMAIN` | The company domain that pulled both your DVP image and the paired image (e.g., `example.com`). | +| `DVPP_IMAGE` | Your Docker Verified Publisher image repository name. | +| `PAIRED_IMAGE` | The other image repository that was used together with your DVP image by this company. | + +Each row represents a unique combination of a company domain, your DVP image, +and another image that were used together during the specified time period. + +> [!NOTE] +> +> To protect privacy and ensure data quality, this report excludes personal +> email domains, disposable email services, and university domains. Only +> business and organizational domains are included in the analysis. + +### Tracked companies report + +The tracked companies report provides detailed insights into how specific +companies are using your Docker Verified Publisher (DVP) images. This report +helps you understand usage patterns, deployment environments, and adoption +trends across your customer base and potential prospects. + +You can use this report to answer questions like: + +- How are specific companies using my images across different environments? +- What deployment patterns do I see across local development, CI/CD, and + production? +- Which companies are heavy users of my images? +- How does usage vary by geography and cloud providers for tracked companies? + +To access the report: + +1. Sign in to [Docker Hub](https://hub.docker.com/). +2. Select **My Hub** in the top navigation. +3. Select your organization in the left navigation. +4. Select **Analytics** > **Tracked Companies** in the left navigation. +5. Select **DATA BY WEEK** or **DATA BY MONTH** to choose the data granularity. +6. Select **Download report** for the desired week or month. + +The tracked companies report is a CSV file that contains the following data +points: + +| Field | Description | +|-------|-------------| +| `DATE_GRANULARITY` | Weekly or monthly granularity of the data. | +| `DATE_REFERENCE` | The start date of the week or month in YYYY-MM-DD format. | +| `PUBLISHER_NAME` | The name of the organization that owns the DVP repository. | +| `DOMAIN` | The company domain (e.g., `docker.com`) associated with the image pulls. | +| `IP_COUNTRY` | The country code (ISO 3166-1 alpha-2) where the pull request originated from. | +| `CLOUD_SERVICE_PROVIDER` | The cloud service provider used for the pull request or `no csp` for non-cloud providers. | +| `USER_AGENT` | The client application or tool used to pull the image. | +| `INFERRED_USE_CASE` | The inferred deployment environment based on user agent and cloud provider analysis. Values include:
• `Local Dev`: Local development environment (e.g., Docker Desktop, direct `docker` commands)
• `CI/CD`: Continuous integration/deployment pipelines (e.g., containerd, build tools, registry mirroring)
• `Prod`: Production environments (e.g., Kubernetes, container orchestration platforms)
• `Unknown`: Unable to determine the use case from available data | +| `IMAGE_REPOSITORY` | The specific DVP image repository that was pulled. | +| `DATA_DOWNLOADS` | The number of actual image layer downloads for this combination. | +| `VERSION_CHECKS` | The number of version checks (HEAD requests) performed without downloading the full image. | +| `PULLS` | The total number of pull requests (data downloads + version checks). | +| `UNIQUE_AUTHENTICATED_USERS` | The number of unique authenticated users from this domain who performed pulls. | + +> [!NOTE] +> +> Use case inference is determined by analyzing user agent patterns and cloud +> service provider usage. Local development tools used on cloud infrastructure +> are reclassified as CI/CD, and CI/CD tools used on cloud infrastructure are +> reclassified as production to better reflect actual deployment patterns. - -> [!TIP] +{{< /tab >}} +{{< tab name="Legacy DVP program" >}} + +> [!IMPORTANT] > -> Head to the -[Docker Verified Publisher Program](https://www.docker.com/partners/programs/) or [Docker-Sponsored Open Source](https://www.docker.com/community/open-source/application/#) pages -to learn more about the programs. +> The Legacy DVP program applies to existing customers who have not yet renewed +> to DVP Core. The DVP Legacy program is deprecated and will be retired. Contact +> your Docker sales representative or +> [Docker](https://www.docker.com/partners/programs/) for more information. ## View the image's analytics data You can find analytics data for your repositories on the **Insights and analytics** dashboard at the following URL: -`https://hub.docker.com/orgs/{namespace}/insights/images`. The dashboard contains a -visualization of the usage data and a table where you can download +`https://hub.docker.com/orgs/{namespace}/insights/images`. The dashboard +contains a visualization of the usage data and a table where you can download the data as CSV files. To view data in the chart: @@ -34,7 +301,6 @@ To view data in the chart: ![Insights and analytics chart visualization](../../../images/chart.png) - > [!TIP] > > Hovering your cursor over the chart displays a tooltip, showing precise data @@ -42,8 +308,9 @@ To view data in the chart: ### Share analytics data -You can share the visualization with others using the **Share** icon above the chart. -This is a convenient way to share statistics with others in your organization. +You can share the visualization with others using the **Share** icon at the top +of the chart. This is a convenient way to share statistics with others in your +organization. ![Chart share icon](../../../images/chart-share-icon.png) @@ -54,14 +321,19 @@ configuration as you had set up when creating the link. ## Extension analytics data -If you have published Docker Extensions in the Extension marketplace, you can also get analytics about your extension usage, available as CSV files. -You can download extension CSV reports from the **Insights and analytics** dashboard at the following URL: -`https://hub.docker.com/orgs/{namespace}/insights/extensions`. If your Docker namespace contains extensions known in the marketplace, you will see an **Extensions** tab listing CSV files for your extension(s). +If you have published Docker Extensions in the Extension marketplace, you can +also get analytics about your extension usage, available as CSV files. You can +download extension CSV reports from the **Insights and analytics** dashboard at +the following URL: +`https://hub.docker.com/orgs/{namespace}/insights/extensions`. If your Docker +namespace contains extensions known in the marketplace, you will see an +**Extensions** tab listing CSV files for your extension(s). ## Exporting analytics data You can export the analytics data either from the web dashboard, or using the -[DVP Data API](/reference/api/dvp/latest.md). All members of an organization have access to the analytics data. +[DVP Data API](/reference/api/dvp/latest.md). All members of an organization +have access to the analytics data. The data is available as a downloadable CSV file, in a weekly (Monday through Sunday) or monthly format. Monthly data is available from the first day of the @@ -70,7 +342,8 @@ can analyze it manually as a spreadsheet. ### Export data -Export usage data for your organization's images using the Docker Hub website by following these steps: +Export usage data for your organization's images using the Docker Hub website by +following these steps: 1. Sign in to [Docker Hub](https://hub.docker.com/) and select **My Hub**. @@ -183,7 +456,8 @@ pulls. To provide feedback or ask questions about these rules, There are two levels of extension summary data available: -- Core summary, with basic extension usage information: number of extension installs, uninstalls, and total install all times +- Core summary, with basic extension usage information: number of extension + installs, uninstalls, and total install all times The core-summary-data file contains the following data points for the selected time span: @@ -196,7 +470,8 @@ span: | TotalUninstalls | Number of uninstalls for the extension all times | Feb 1, 2024 | | Updates | Number of updates for the extension | Feb 1, 2024 | -- Premium summary, with advanced extension usage information: installs, uninstalls by unique users, extension opening by unique users. +- Premium summary, with advanced extension usage information: installs, + uninstalls by unique users, extension opening by unique users. The core-summary-data file contains the following data points for the selected time span: @@ -222,12 +497,16 @@ from the date of when the field was first introduced, and going forward. Refer to the tables in the [Data points](#data-points) section to see from which date a given data point is available. + + +{{< /tab >}} +{{< /tabs >}} + ## Privacy This section contains information about privacy-protecting measures that ensures consumers of content on Docker Hub remain completely anonymous. - > [!IMPORTANT] > > Docker never shares any Personally Identifiable Information (PII) as part of @@ -237,10 +516,10 @@ The image pulls summary dataset includes unique IP address count. This data poin includes the number of distinct unique IP addresses that request an image. Individual IP addresses are never shared. -The image pulls raw dataset includes user IP domains as a data point. This is the domain name -associated with the IP address used to pull an image. If the IP type is -`business`, the domain represents the company or organization associated with -that IP address (for example, `docker.com`). For any other IP type that's not -`business`, the domain represents the internet service provider or hosting +The image pulls raw dataset includes user IP domains as a data point. This is +the domain name associated with the IP address used to pull an image. If the IP +type is `business`, the domain represents the company or organization associated +with that IP address (for example, `docker.com`). For any other IP type that's +not `business`, the domain represents the internet service provider or hosting provider used to make the request. On average, only about 30% of all pulls -classify as the `business` IP type (this varies between publishers and images). +classify as the `business` IP type (this varies between publishers and images). \ No newline at end of file