diff --git a/examples/container-image/README.md b/examples/container-image/README.md
index d7d83e0d..3a0a4f47 100644
--- a/examples/container-image/README.md
+++ b/examples/container-image/README.md
@@ -37,6 +37,7 @@ Note that this example may create resources which cost money. Run `terraform des
|------|--------|---------|
| [docker\_build](#module\_docker\_build) | ../../modules/docker-build | n/a |
| [docker\_build\_from\_ecr](#module\_docker\_build\_from\_ecr) | ../../modules/docker-build | n/a |
+| [docker\_build\_multistage](#module\_docker\_build\_multistage) | ../../modules/docker-build | n/a |
| [ecr](#module\_ecr) | terraform-aws-modules/ecr/aws | n/a |
| [lambda\_function\_with\_docker\_build](#module\_lambda\_function\_with\_docker\_build) | ../../ | n/a |
| [lambda\_function\_with\_docker\_build\_from\_ecr](#module\_lambda\_function\_with\_docker\_build\_from\_ecr) | ../../ | n/a |
diff --git a/examples/container-image/context/Dockerfile b/examples/container-image/context/Dockerfile
index d6e7662a..64350ec5 100644
--- a/examples/container-image/context/Dockerfile
+++ b/examples/container-image/context/Dockerfile
@@ -1,8 +1,12 @@
# `--platform` argument is used to be able to build docker images when using another platform (e.g. Apple M1)
-FROM --platform=linux/x86_64 scratch
+FROM --platform=linux/x86_64 scratch AS first_stage
ARG FOO
ENV FOO $FOO
COPY empty /empty
+
+FROM first_stage AS second_stage
+
+COPY empty /empty_two
diff --git a/examples/container-image/main.tf b/examples/container-image/main.tf
index 75a36ffc..4db21302 100644
--- a/examples/container-image/main.tf
+++ b/examples/container-image/main.tf
@@ -123,6 +123,35 @@ module "docker_build_from_ecr" {
build_args = {
FOO = "bar"
}
+ # Can also use buildx
+ builder = "default"
+ docker_file_path = "${local.source_path}/Dockerfile"
+
+ triggers = {
+ dir_sha = local.dir_sha
+ }
+
+ cache_from = ["${module.ecr.repository_url}:latest"]
+}
+
+module "docker_build_multistage" {
+ source = "../../modules/docker-build"
+
+ ecr_repo = module.ecr.repository_name
+
+ use_image_tag = true
+ image_tag = "first_stage"
+
+ source_path = local.source_path
+ platform = "linux/amd64"
+ build_args = {
+ FOO = "bar"
+ }
+ builder = "default"
+ docker_file_path = "${local.source_path}/Dockerfile"
+
+ # multi-stage builds
+ build_target = "first_stage"
triggers = {
dir_sha = local.dir_sha
diff --git a/modules/docker-build/README.md b/modules/docker-build/README.md
index 0bfb506c..17e6c972 100644
--- a/modules/docker-build/README.md
+++ b/modules/docker-build/README.md
@@ -59,7 +59,7 @@ module "docker_image" {
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.0 |
| [aws](#requirement\_aws) | >= 4.22 |
-| [docker](#requirement\_docker) | >= 3.0 |
+| [docker](#requirement\_docker) | >= 3.5.0 |
| [null](#requirement\_null) | >= 2.0 |
## Providers
@@ -67,7 +67,7 @@ module "docker_image" {
| Name | Version |
|------|---------|
| [aws](#provider\_aws) | >= 4.22 |
-| [docker](#provider\_docker) | >= 3.0 |
+| [docker](#provider\_docker) | >= 3.5.0 |
| [null](#provider\_null) | >= 2.0 |
## Modules
@@ -91,6 +91,8 @@ No modules.
| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [build\_args](#input\_build\_args) | A map of Docker build arguments. | `map(string)` | `{}` | no |
+| [build\_target](#input\_build\_target) | Set the target build stage to build | `string` | `null` | no |
+| [builder](#input\_builder) | The buildx builder to use for the Docker build. | `string` | `null` | no |
| [cache\_from](#input\_cache\_from) | List of images to consider as cache sources when building the image. | `list(string)` | `[]` | no |
| [create\_ecr\_repo](#input\_create\_ecr\_repo) | Controls whether ECR repository for Lambda image should be created | `bool` | `false` | no |
| [create\_sam\_metadata](#input\_create\_sam\_metadata) | Controls whether the SAM metadata null resource should be created | `bool` | `false` | no |
diff --git a/modules/docker-build/main.tf b/modules/docker-build/main.tf
index 1bf27a1f..565027f4 100644
--- a/modules/docker-build/main.tf
+++ b/modules/docker-build/main.tf
@@ -16,6 +16,8 @@ resource "docker_image" "this" {
context = var.source_path
dockerfile = var.docker_file_path
build_args = var.build_args
+ builder = var.builder
+ target = var.build_target
platform = var.platform
cache_from = var.cache_from
}
diff --git a/modules/docker-build/variables.tf b/modules/docker-build/variables.tf
index e153fa7f..110ce554 100644
--- a/modules/docker-build/variables.tf
+++ b/modules/docker-build/variables.tf
@@ -71,12 +71,24 @@ variable "ecr_repo_tags" {
default = {}
}
+variable "builder" {
+ description = "The buildx builder to use for the Docker build."
+ type = string
+ default = null
+}
+
variable "build_args" {
description = "A map of Docker build arguments."
type = map(string)
default = {}
}
+variable "build_target" {
+ description = "Set the target build stage to build"
+ type = string
+ default = null
+}
+
variable "ecr_repo_lifecycle_policy" {
description = "A JSON formatted ECR lifecycle policy to automate the cleaning up of unused images."
type = string
diff --git a/modules/docker-build/versions.tf b/modules/docker-build/versions.tf
index 93aadf1a..454fc7ae 100644
--- a/modules/docker-build/versions.tf
+++ b/modules/docker-build/versions.tf
@@ -8,7 +8,7 @@ terraform {
}
docker = {
source = "kreuzwerker/docker"
- version = ">= 3.0"
+ version = ">= 3.5.0"
}
null = {
source = "hashicorp/null"
diff --git a/wrappers/docker-build/main.tf b/wrappers/docker-build/main.tf
index 7d7614cf..61a99a93 100644
--- a/wrappers/docker-build/main.tf
+++ b/wrappers/docker-build/main.tf
@@ -4,6 +4,8 @@ module "wrapper" {
for_each = var.items
build_args = try(each.value.build_args, var.defaults.build_args, {})
+ build_target = try(each.value.build_target, var.defaults.build_target, null)
+ builder = try(each.value.builder, var.defaults.builder, null)
cache_from = try(each.value.cache_from, var.defaults.cache_from, [])
create_ecr_repo = try(each.value.create_ecr_repo, var.defaults.create_ecr_repo, false)
create_sam_metadata = try(each.value.create_sam_metadata, var.defaults.create_sam_metadata, false)
diff --git a/wrappers/docker-build/versions.tf b/wrappers/docker-build/versions.tf
index 93aadf1a..454fc7ae 100644
--- a/wrappers/docker-build/versions.tf
+++ b/wrappers/docker-build/versions.tf
@@ -8,7 +8,7 @@ terraform {
}
docker = {
source = "kreuzwerker/docker"
- version = ">= 3.0"
+ version = ">= 3.5.0"
}
null = {
source = "hashicorp/null"