Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 29893ab

Browse files
authored
feat: Add buildx and multi-stage build support to docker-build module (terraform-aws-modules#679)
1 parent c7ee15f commit 29893ab

File tree

9 files changed

+57
-5
lines changed

9 files changed

+57
-5
lines changed

‎examples/container-image/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Note that this example may create resources which cost money. Run `terraform des
3737
|------|--------|---------|
3838
| <a name="module_docker_build"></a> [docker\_build](#module\_docker\_build) | ../../modules/docker-build | n/a |
3939
| <a name="module_docker_build_from_ecr"></a> [docker\_build\_from\_ecr](#module\_docker\_build\_from\_ecr) | ../../modules/docker-build | n/a |
40+
| <a name="module_docker_build_multistage"></a> [docker\_build\_multistage](#module\_docker\_build\_multistage) | ../../modules/docker-build | n/a |
4041
| <a name="module_ecr"></a> [ecr](#module\_ecr) | terraform-aws-modules/ecr/aws | n/a |
4142
| <a name="module_lambda_function_with_docker_build"></a> [lambda\_function\_with\_docker\_build](#module\_lambda\_function\_with\_docker\_build) | ../../ | n/a |
4243
| <a name="module_lambda_function_with_docker_build_from_ecr"></a> [lambda\_function\_with\_docker\_build\_from\_ecr](#module\_lambda\_function\_with\_docker\_build\_from\_ecr) | ../../ | n/a |
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# `--platform` argument is used to be able to build docker images when using another platform (e.g. Apple M1)
2-
FROM --platform=linux/x86_64 scratch
2+
FROM --platform=linux/x86_64 scratch AS first_stage
33

44
ARG FOO
55

66
ENV FOO $FOO
77

88
COPY empty /empty
9+
10+
FROM first_stage AS second_stage
11+
12+
COPY empty /empty_two

‎examples/container-image/main.tf‎

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,35 @@ module "docker_build_from_ecr" {
123123
build_args = {
124124
FOO = "bar"
125125
}
126+
# Can also use buildx
127+
builder = "default"
128+
docker_file_path = "${local.source_path}/Dockerfile"
129+
130+
triggers = {
131+
dir_sha = local.dir_sha
132+
}
133+
134+
cache_from = ["${module.ecr.repository_url}:latest"]
135+
}
136+
137+
module "docker_build_multistage" {
138+
source = "../../modules/docker-build"
139+
140+
ecr_repo = module.ecr.repository_name
141+
142+
use_image_tag = true
143+
image_tag = "first_stage"
144+
145+
source_path = local.source_path
146+
platform = "linux/amd64"
147+
build_args = {
148+
FOO = "bar"
149+
}
150+
builder = "default"
151+
docker_file_path = "${local.source_path}/Dockerfile"
152+
153+
# multi-stage builds
154+
build_target = "first_stage"
126155

127156
triggers = {
128157
dir_sha = local.dir_sha

‎modules/docker-build/README.md‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,15 +59,15 @@ module "docker_image" {
5959
|------|---------|
6060
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
6161
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 4.22 |
62-
| <a name="requirement_docker"></a> [docker](#requirement\_docker) | >= 3.0 |
62+
| <a name="requirement_docker"></a> [docker](#requirement\_docker) | >= 3.5.0 |
6363
| <a name="requirement_null"></a> [null](#requirement\_null) | >= 2.0 |
6464

6565
## Providers
6666

6767
| Name | Version |
6868
|------|---------|
6969
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 4.22 |
70-
| <a name="provider_docker"></a> [docker](#provider\_docker) | >= 3.0 |
70+
| <a name="provider_docker"></a> [docker](#provider\_docker) | >= 3.5.0 |
7171
| <a name="provider_null"></a> [null](#provider\_null) | >= 2.0 |
7272

7373
## Modules
@@ -91,6 +91,8 @@ No modules.
9191
| Name | Description | Type | Default | Required |
9292
|------|-------------|------|---------|:--------:|
9393
| <a name="input_build_args"></a> [build\_args](#input\_build\_args) | A map of Docker build arguments. | `map(string)` | `{}` | no |
94+
| <a name="input_build_target"></a> [build\_target](#input\_build\_target) | Set the target build stage to build | `string` | `null` | no |
95+
| <a name="input_builder"></a> [builder](#input\_builder) | The buildx builder to use for the Docker build. | `string` | `null` | no |
9496
| <a name="input_cache_from"></a> [cache\_from](#input\_cache\_from) | List of images to consider as cache sources when building the image. | `list(string)` | `[]` | no |
9597
| <a name="input_create_ecr_repo"></a> [create\_ecr\_repo](#input\_create\_ecr\_repo) | Controls whether ECR repository for Lambda image should be created | `bool` | `false` | no |
9698
| <a name="input_create_sam_metadata"></a> [create\_sam\_metadata](#input\_create\_sam\_metadata) | Controls whether the SAM metadata null resource should be created | `bool` | `false` | no |

‎modules/docker-build/main.tf‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ resource "docker_image" "this" {
1616
context = var.source_path
1717
dockerfile = var.docker_file_path
1818
build_args = var.build_args
19+
builder = var.builder
20+
target = var.build_target
1921
platform = var.platform
2022
cache_from = var.cache_from
2123
}

‎modules/docker-build/variables.tf‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,24 @@ variable "ecr_repo_tags" {
7171
default = {}
7272
}
7373

74+
variable "builder" {
75+
description = "The buildx builder to use for the Docker build."
76+
type = string
77+
default = null
78+
}
79+
7480
variable "build_args" {
7581
description = "A map of Docker build arguments."
7682
type = map(string)
7783
default = {}
7884
}
7985

86+
variable "build_target" {
87+
description = "Set the target build stage to build"
88+
type = string
89+
default = null
90+
}
91+
8092
variable "ecr_repo_lifecycle_policy" {
8193
description = "A JSON formatted ECR lifecycle policy to automate the cleaning up of unused images."
8294
type = string

‎modules/docker-build/versions.tf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ terraform {
88
}
99
docker = {
1010
source = "kreuzwerker/docker"
11-
version = ">= 3.0"
11+
version = ">= 3.5.0"
1212
}
1313
null = {
1414
source = "hashicorp/null"

‎wrappers/docker-build/main.tf‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ module "wrapper" {
44
for_each = var.items
55

66
build_args = try(each.value.build_args, var.defaults.build_args, {})
7+
build_target = try(each.value.build_target, var.defaults.build_target, null)
8+
builder = try(each.value.builder, var.defaults.builder, null)
79
cache_from = try(each.value.cache_from, var.defaults.cache_from, [])
810
create_ecr_repo = try(each.value.create_ecr_repo, var.defaults.create_ecr_repo, false)
911
create_sam_metadata = try(each.value.create_sam_metadata, var.defaults.create_sam_metadata, false)

‎wrappers/docker-build/versions.tf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ terraform {
88
}
99
docker = {
1010
source = "kreuzwerker/docker"
11-
version = ">= 3.0"
11+
version = ">= 3.5.0"
1212
}
1313
null = {
1414
source = "hashicorp/null"

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /