New Docker Terraform Provider: Automate, Secure, and Scale with Ease
Weβre excited to announce the launch of the Docker Terraform Provider, designed to help users and organizations automate and securely manage their Docker-hosted resources. This includes repositories, teams, organization settings, and more, all using Terraformβs infrastructure-as-code approach. This provider brings a unified, scalable, and secure solution for managing Docker resources in an automated fashion β whether youβre managing a single repository or a large-scale organization.
A new way of working with Docker Hub
The Docker Terraform Provider introduces a new way of working with Docker Hub, enabling infrastructure-as-code best practices that are already widely adopted across cloud-native environments. By integrating Docker Hub with Terraform, organizations can streamline resource management, improve security, and collaborate more effectively, all while ensuring Docker resources remain in sync with other infrastructure components.
The Problem
Managing Docker Hub resources manually can become cumbersome and prone to errors, especially as teams grow and projects scale. Maintaining configurations can lead to inconsistencies, reduced security, and a lack of collaboration between teams without a streamlined, version-controlled system. The Docker Terraform Provider solves this by allowing you to manage Docker Hub resources in the same way you manage your other cloud resources, ensuring consistency, auditability, and automation across the board.
The solution
The Docker Terraform Provider offers:
- Unified management: With this provider, you can manage Docker repositories, teams, users, and organizations in a consistent workflow, using the same code and structure across environments.
- Version control: Changes to Docker Hub resources are captured in your Terraform configuration, providing a version-controlled, auditable way to manage your Docker infrastructure.
- Collaboration and automation: Teams can now collaborate seamlessly, automating the provisioning and management of Docker Hub resources with Terraform, enhancing productivity and ensuring best practices are followed.
- Scalability: Whether youβre managing a few repositories or an entire organization, this provider scales effortlessly to meet your needs.
Example
At Docker, even we faced challenges managing our Docker Hub resources, especially when adding repositories without owner permissions β it was a frustrating, manual process. With the Terraform provider, anyone in the company can create a new repository without having elevated Docker Hub permissions. All levels of employees are now empowered to write code rather than track down coworkers. This streamlines developer workflows with familiar tooling and reduces employee permissions. Security and developers are happy!
Hereβs an example where we are managing a repository, an org team, the permissions for the created repo, and a PAT token:
terraform { required_providers { docker = { source = "docker/docker" version = "~> 0.2" } } } # Initialize provider provider "docker" {} # Define local variables for customization locals { namespace = "my-docker-namespace" repo_name = "my-docker-repo" org_name = "my-docker-org" team_name = "my-team" my_team_users = ["user1", "user2"] token_label = "my-pat-token" token_scopes = ["repo:read", "repo:write"] permission = "admin" } # Create repository resource "docker_hub_repository" "org_hub_repo" { namespace = local.namespace name = local.repo_name description = "This is a generic Docker repository." full_description = "Full description for the repository." } # Create team resource "docker_org_team" "team" { org_name = local.org_name team_name = local.team_name team_description = "Team description goes here." } # Team association resource "docker_org_team_member" "team_membership" { for_each = toset(local.my_team_users) org_name = local.org_name team_name = docker_org_team.team.team_name user_name = each.value } # Create repository team permission resource "docker_hub_repository_team_permission" "repo_permission" { repo_id = docker_hub_repository.org_hub_repo.id team_id = docker_org_team.team.id permission = local.permission } # Create access token resource "docker_access_token" "access_token" { token_label = local.token_label scopes = local.token_scopes }
Future work
Weβre just getting started with the Docker Terraform Provider, and thereβs much more to come. Future work will expand support to other products in Dockerβs suite, including Docker Scout, Docker Build Cloud, and Testcontainers Cloud. Stay tuned as we continue to evolve and enhance the provider with new features and integrations.
For feedback and issue tracking, visit the official Docker Terraform Provider repository or submit feedback via our issue tracker.
Weβre confident this new provider will enhance how teams work with Docker Hub, making it easier to manage, secure, and scale their infrastructure while focusing on what matters most β building great software.
Learn more
- Visit the official Docker Terraform Provider repository.
- Submit feedback via our issue tracker.
- Subscribe to the Docker Newsletter.Β
- Get the latest release of Docker Desktop.
- Have questions? The Docker community is here to help.
- New to Docker? Get started.