diff --git a/provider/cmd/pulumi-resource-docker/schema.json b/provider/cmd/pulumi-resource-docker/schema.json index 041a84eba..e42fe4bee 100644 --- a/provider/cmd/pulumi-resource-docker/schema.json +++ b/provider/cmd/pulumi-resource-docker/schema.json @@ -3165,7 +3165,7 @@ } }, "docker:index/image:Image": { - "description": "`Image` builds a Docker image and pushes it Docker and OCI compatible registries.\nThis resource enables running Docker builds as part of a Pulumi deployment.\n\nNote: This resource does not delete tags, locally or remotely, when destroyed.\n\n## Image name\n\nThe Image resource uses `imageName` to refer to a fully qualified Docker image name, by the format `repository:tag`.\nNote that this does not include any digest information and thus will not cause any updates when passed to dependencies,\neven when using `latest` tag. To trigger such updates, e.g. when referencing pushed images in container orchestration \nand management resources, please use the `repoDigest` Output instead, which is of the format \n`repository@\u003calgorithm\u003e:\u003chash\u003e` and unique per build/push. \nAs of Docker v4.4, `repoDigest` is now available for local Images.\n\n## Cross-platform builds\n\nThe Image resource supports cross-platform builds when the [Docker engine has cross-platform support enabled via emulators](https://docs.docker.com/build/building/multi-platform/#building-multi-platform-images).\nThe Image resource currently supports providing only a single operating system and architecture in the `platform` field, e.g.: `linux/amd64`.\nTo enable this support, you may need to install the emulators in the environment running your Pulumi program.\n\nIf you are using Linux, you may be using Docker Engine or Docker Desktop for Linux, depending on how you have installed Docker. The [FAQ for Docker Desktop for Linux](https://docs.docker.com/desktop/faqs/linuxfaqs/#context) describes the differences and how to select which Docker context is in use.\n\n* For local development using Docker Desktop, this is enabled by default.\n* For systems using Docker Engine, install the QEMU binaries and register them with using the docker image from [github.com/tonistiigi/binfmt](https://github.com/tonistiigi/binfmt):\n\n ```shell\n docker run --privileged --rm tonistiigi/binfmt --install all\n ```\n* In a GitHub Actions workflow, the [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) can be used instead by adding this step to your workflow file. Example workflow usage:\n\n ```yaml\n name: Pulumi\n on:\n push:\n branches:\n - master\n jobs:\n up:\n name: Preview\n runs-on: ubuntu-latest\n steps:\n # This is the step added:\n - name: Set up QEMU\n uses: docker/setup-qemu-action@v2\n # The ordinary pulumi/actions workflow:\n - uses: actions/checkout@v3\n - uses: pulumi/actions@v4\n with:\n command: preview\n stack-name: org-name/stack-name\n env:\n PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}\n ```\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### A Docker image build\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoImage = new docker.Image(\"demo-image\", {\n build: {\n args: {\n platform: \"linux/amd64\",\n },\n context: \".\",\n dockerfile: \"Dockerfile\",\n },\n imageName: \"username/image:tag1\",\n skipPush: true,\n});\nexport const imageName = demoImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_image = docker.Image(\"demo-image\",\n build=docker.DockerBuildArgs(\n args={\n \"platform\": \"linux/amd64\",\n },\n context=\".\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=\"username/image:tag1\",\n skip_push=True)\npulumi.export(\"imageName\", demo_image.image_name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoImage = new Docker.Image(\"demo-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Args = \n {\n { \"platform\", \"linux/amd64\" },\n },\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = \"username/image:tag1\",\n SkipPush = true,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoImage.ImageName,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoImage, err := docker.NewImage(ctx, \"demo-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"platform\": pulumi.String(\"linux/amd64\"),\n\t\t\t\t},\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"username/image:tag1\"),\n\t\t\tSkipPush: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build\nname: image-yaml\noutputs:\n imageName: ${demo-image.imageName}\nresources:\n demo-image:\n options:\n version: v4.4.0\n properties:\n build:\n args:\n platform: linux/amd64\n context: .\n dockerfile: Dockerfile\n imageName: username/image:tag1\n skipPush: true\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoImage = new Image(\"demoImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .args(Map.of(\"platform\", \"linux/amd64\"))\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(\"username/image:tag1\")\n .skipPush(true)\n .build());\n\n ctx.export(\"imageName\", demoImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### A Docker image build and push\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoPushImage = new docker.Image(\"demo-push-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n },\n imageName: \"docker.io/username/push-image:tag1\",\n});\nexport const imageName = demoPushImage.imageName;\nexport const repoDigest = demoPushImage.repoDigest;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_push_image = docker.Image(\"demo-push-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=\"docker.io/username/push-image:tag1\")\npulumi.export(\"imageName\", demo_push_image.image_name)\npulumi.export(\"repoDigest\", demo_push_image.repo_digest)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoPushImage = new Docker.Image(\"demo-push-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = \"docker.io/username/push-image:tag1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoPushImage.ImageName,\n [\"repoDigest\"] = demoPushImage.RepoDigest,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPushImage, err := docker.NewImage(ctx, \"demo-push-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"docker.io/username/push-image:tag1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoPushImage.ImageName)\n\t\tctx.Export(\"repoDigest\", demoPushImage.RepoDigest)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build and push\nname: image-push-yaml\noutputs:\n imageName: ${demo-push-image.imageName}\n repoDigest: ${demo-push-image.repoDigest}\nresources:\n demo-push-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n imageName: docker.io/username/push-image:tag1\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoPushImage = new Image(\"demoPushImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(\"docker.io/username/push-image:tag1\")\n .build());\n\n ctx.export(\"imageName\", demoPushImage.imageName());\n ctx.export(\"repoDigest\", demoPushImage.repoDigest());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker image build using caching with AWS Elastic Container Registry\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ecrRepository = new aws.ecr.Repository(\"ecr-repository\", {name: \"docker-repository\"});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myAppImage = new docker.Image(\"my-app-image\", {\n build: {\n args: {\n BUILDKIT_INLINE_CACHE: \"1\",\n },\n cacheFrom: {\n images: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n },\n context: \"app/\",\n dockerfile: \"Dockerfile\",\n },\n imageName: pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`,\n registry: {\n password: pulumi.secret(authToken.apply(authToken =\u003e authToken.password)),\n server: ecrRepository.repositoryUrl,\n },\n});\nexport const imageName = myAppImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_docker as docker\n\necr_repository = aws.ecr.Repository(\"ecr-repository\", name=\"docker-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_app_image = docker.Image(\"my-app-image\",\n build=docker.DockerBuildArgs(\n args={\n \"BUILDKIT_INLINE_CACHE\": \"1\",\n },\n cache_from=docker.CacheFromArgs(\n images=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")],\n ),\n context=\"app/\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\"),\n registry=docker.RegistryArgs(\n password=pulumi.Output.secret(auth_token.password),\n server=ecr_repository.repository_url,\n ))\npulumi.export(\"imageName\", my_app_image.image_name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ecrRepository = new Aws.Ecr.Repository(\"ecr-repository\", new()\n {\n Name = \"docker-repository\",\n });\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myAppImage = new Docker.Image(\"my-app-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Args = \n {\n { \"BUILDKIT_INLINE_CACHE\", \"1\" },\n },\n CacheFrom = new Docker.Inputs.CacheFromArgs\n {\n Images = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n },\n },\n Context = \"app/\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n Registry = new Docker.Inputs.RegistryArgs\n {\n Password = Output.CreateSecret(authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.Password)),\n Server = ecrRepository.RepositoryUrl,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = myAppImage.ImageName,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr\"\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tecrRepository, err := ecr.NewRepository(ctx, \"ecr-repository\", \u0026ecr.RepositoryArgs{\n\t\t\tName: pulumi.String(\"docker-repository\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tauthToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{\n\t\t\tRegistryId: ecrRepository.RegistryId,\n\t\t}, nil)\n\t\tmyAppImage, err := docker.NewImage(ctx, \"my-app-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"BUILDKIT_INLINE_CACHE\": pulumi.String(\"1\"),\n\t\t\t\t},\n\t\t\t\tCacheFrom: \u0026docker.CacheFromArgs{\n\t\t\t\t\tImages: pulumi.StringArray{\n\t\t\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tContext: pulumi.String(\"app/\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegistry: \u0026docker.RegistryArgs{\n\t\t\t\tPassword: pulumi.ToSecret(authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\treturn \u0026authToken.Password, nil\n\t\t\t\t}).(pulumi.StringPtrOutput)).(*pulumi.StringOutput),\n\t\t\t\tServer: ecrRepository.RepositoryUrl,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", myAppImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: Docker image build using caching with AWS Elastic Container Registry\nname: image-caching-yaml\noutputs:\n imageName: ${my-app-image.imageName}\nresources:\n ecr-repository:\n properties:\n name: docker-repository\n type: aws:ecr:Repository\n my-app-image:\n options:\n version: v4.1.2\n properties:\n build:\n args:\n BUILDKIT_INLINE_CACHE: \"1\"\n cacheFrom:\n images:\n - ${ecr-repository.repositoryUrl}:latest\n context: app/\n dockerfile: Dockerfile\n imageName: ${ecr-repository.repositoryUrl}:latest\n registry:\n password:\n fn::secret: ${authToken.password}\n server: ${ecr-repository.repositoryUrl}\n type: docker:Image\nruntime: yaml\nvariables:\n authToken:\n fn::aws:ecr:getAuthorizationToken:\n registryId: ${ecr-repository.registryId}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.aws.ecr.Repository;\nimport com.pulumi.aws.ecr.RepositoryArgs;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport com.pulumi.docker.inputs.CacheFromArgs;\nimport com.pulumi.docker.inputs.RegistryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ecrRepository = new Repository(\"ecrRepository\", RepositoryArgs.builder() \n .name(\"docker-repository\")\n .build());\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myAppImage = new Image(\"myAppImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .args(Map.of(\"BUILDKIT_INLINE_CACHE\", \"1\"))\n .cacheFrom(CacheFromArgs.builder()\n .images(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .build())\n .context(\"app/\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .registry(RegistryArgs.builder()\n .password(Output.ofSecret(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.password()))))\n .server(ecrRepository.repositoryUrl())\n .build())\n .build());\n\n ctx.export(\"imageName\", myAppImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "`Image` builds a Docker image and pushes it Docker and OCI compatible registries.\nThis resource enables running Docker builds as part of a Pulumi deployment.\n\nNote: This resource does not delete tags, locally or remotely, when destroyed.\n\n## Image name\n\nThe Image resource uses `imageName` to refer to a fully qualified Docker image name, by the format `repository:tag`.\nNote that this does not include any digest information and thus will not cause any updates when passed to dependencies,\neven when using `latest` tag. To trigger such updates, e.g. when referencing pushed images in container orchestration \nand management resources, please use the `repoDigest` Output instead, which is of the format \n`repository@\u003calgorithm\u003e:\u003chash\u003e` and unique per build/push. \nAs of Docker v4.4, `repoDigest` is now available for local Images.\n\n## Cross-platform builds\n\nThe Image resource supports cross-platform builds when the [Docker engine has cross-platform support enabled via emulators](https://docs.docker.com/build/building/multi-platform/#building-multi-platform-images).\nThe Image resource currently supports providing only a single operating system and architecture in the `platform` field, e.g.: `linux/amd64`.\nTo enable this support, you may need to install the emulators in the environment running your Pulumi program.\n\nIf you are using Linux, you may be using Docker Engine or Docker Desktop for Linux, depending on how you have installed Docker. The [FAQ for Docker Desktop for Linux](https://docs.docker.com/desktop/faqs/linuxfaqs/#context) describes the differences and how to select which Docker context is in use.\n\n* For local development using Docker Desktop, this is enabled by default.\n* For systems using Docker Engine, install the QEMU binaries and register them with using the docker image from [github.com/tonistiigi/binfmt](https://github.com/tonistiigi/binfmt):\n\n ```shell\n docker run --privileged --rm tonistiigi/binfmt --install all\n ```\n* In a GitHub Actions workflow, the [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) can be used instead by adding this step to your workflow file. Example workflow usage:\n\n ```yaml\n name: Pulumi\n on:\n push:\n branches:\n - master\n jobs:\n up:\n name: Preview\n runs-on: ubuntu-latest\n steps:\n # This is the step added:\n - name: Set up QEMU\n uses: docker/setup-qemu-action@v2\n # The ordinary pulumi/actions workflow:\n - uses: actions/checkout@v3\n - uses: pulumi/actions@v4\n with:\n command: preview\n stack-name: org-name/stack-name\n env:\n PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}\n ```\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### A Docker image build\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoImage = new docker.Image(\"demo-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n platform: \"linux/amd64\",\n },\n imageName: \"username/image:tag1\",\n skipPush: true,\n});\nexport const imageName = demoImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_image = docker.Image(\"demo-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n platform=\"linux/amd64\",\n ),\n image_name=\"username/image:tag1\",\n skip_push=True)\npulumi.export(\"imageName\", demo_image.image_name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoImage = new Docker.Image(\"demo-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n Platform = \"linux/amd64\",\n },\n ImageName = \"username/image:tag1\",\n SkipPush = true,\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoImage.ImageName,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoImage, err := docker.NewImage(ctx, \"demo-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t\tPlatform: pulumi.String(\"linux/amd64\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"username/image:tag1\"),\n\t\t\tSkipPush: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build\nname: image-yaml\noutputs:\n imageName: ${demo-image.imageName}\nresources:\n demo-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n platform: linux/amd64\n imageName: username/image:tag1\n skipPush: true\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoImage = new Image(\"demoImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .platform(\"linux/amd64\")\n .build())\n .imageName(\"username/image:tag1\")\n .skipPush(true)\n .build());\n\n ctx.export(\"imageName\", demoImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### A Docker image build and push\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as docker from \"@pulumi/docker\";\n\nconst demoPushImage = new docker.Image(\"demo-push-image\", {\n build: {\n context: \".\",\n dockerfile: \"Dockerfile\",\n },\n imageName: \"docker.io/username/push-image:tag1\",\n});\nexport const imageName = demoPushImage.imageName;\nexport const repoDigest = demoPushImage.repoDigest;\n```\n```python\nimport pulumi\nimport pulumi_docker as docker\n\ndemo_push_image = docker.Image(\"demo-push-image\",\n build=docker.DockerBuildArgs(\n context=\".\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=\"docker.io/username/push-image:tag1\")\npulumi.export(\"imageName\", demo_push_image.image_name)\npulumi.export(\"repoDigest\", demo_push_image.repo_digest)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var demoPushImage = new Docker.Image(\"demo-push-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Context = \".\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = \"docker.io/username/push-image:tag1\",\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = demoPushImage.ImageName,\n [\"repoDigest\"] = demoPushImage.RepoDigest,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdemoPushImage, err := docker.NewImage(ctx, \"demo-push-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tContext: pulumi.String(\".\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: pulumi.String(\"docker.io/username/push-image:tag1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", demoPushImage.ImageName)\n\t\tctx.Export(\"repoDigest\", demoPushImage.RepoDigest)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: A Docker image build and push\nname: image-push-yaml\noutputs:\n imageName: ${demo-push-image.imageName}\n repoDigest: ${demo-push-image.repoDigest}\nresources:\n demo-push-image:\n options:\n version: v4.4.0\n properties:\n build:\n context: .\n dockerfile: Dockerfile\n imageName: docker.io/username/push-image:tag1\n type: docker:Image\nruntime: yaml\nvariables: {}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoPushImage = new Image(\"demoPushImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .context(\".\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(\"docker.io/username/push-image:tag1\")\n .build());\n\n ctx.export(\"imageName\", demoPushImage.imageName());\n ctx.export(\"repoDigest\", demoPushImage.repoDigest());\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Docker image build using caching with AWS Elastic Container Registry\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as docker from \"@pulumi/docker\";\n\nconst ecrRepository = new aws.ecr.Repository(\"ecr-repository\", {name: \"docker-repository\"});\nconst authToken = aws.ecr.getAuthorizationTokenOutput({\n registryId: ecrRepository.registryId,\n});\nconst myAppImage = new docker.Image(\"my-app-image\", {\n build: {\n args: {\n BUILDKIT_INLINE_CACHE: \"1\",\n },\n cacheFrom: {\n images: [pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`],\n },\n context: \"app/\",\n dockerfile: \"Dockerfile\",\n },\n imageName: pulumi.interpolate`${ecrRepository.repositoryUrl}:latest`,\n registry: {\n password: pulumi.secret(authToken.apply(authToken =\u003e authToken.password)),\n server: ecrRepository.repositoryUrl,\n },\n});\nexport const imageName = myAppImage.imageName;\n```\n```python\nimport pulumi\nimport pulumi_aws as aws\nimport pulumi_docker as docker\n\necr_repository = aws.ecr.Repository(\"ecr-repository\", name=\"docker-repository\")\nauth_token = aws.ecr.get_authorization_token_output(registry_id=ecr_repository.registry_id)\nmy_app_image = docker.Image(\"my-app-image\",\n build=docker.DockerBuildArgs(\n args={\n \"BUILDKIT_INLINE_CACHE\": \"1\",\n },\n cache_from=docker.CacheFromArgs(\n images=[ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\")],\n ),\n context=\"app/\",\n dockerfile=\"Dockerfile\",\n ),\n image_name=ecr_repository.repository_url.apply(lambda repository_url: f\"{repository_url}:latest\"),\n registry=docker.RegistryArgs(\n password=pulumi.Output.secret(auth_token.password),\n server=ecr_repository.repository_url,\n ))\npulumi.export(\"imageName\", my_app_image.image_name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Docker = Pulumi.Docker;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var ecrRepository = new Aws.Ecr.Repository(\"ecr-repository\", new()\n {\n Name = \"docker-repository\",\n });\n\n var authToken = Aws.Ecr.GetAuthorizationToken.Invoke(new()\n {\n RegistryId = ecrRepository.RegistryId,\n });\n\n var myAppImage = new Docker.Image(\"my-app-image\", new()\n {\n Build = new Docker.Inputs.DockerBuildArgs\n {\n Args = \n {\n { \"BUILDKIT_INLINE_CACHE\", \"1\" },\n },\n CacheFrom = new Docker.Inputs.CacheFromArgs\n {\n Images = new[]\n {\n ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n },\n },\n Context = \"app/\",\n Dockerfile = \"Dockerfile\",\n },\n ImageName = ecrRepository.RepositoryUrl.Apply(repositoryUrl =\u003e $\"{repositoryUrl}:latest\"),\n Registry = new Docker.Inputs.RegistryArgs\n {\n Password = Output.CreateSecret(authToken.Apply(getAuthorizationTokenResult =\u003e getAuthorizationTokenResult.Password)),\n Server = ecrRepository.RepositoryUrl,\n },\n });\n\n return new Dictionary\u003cstring, object?\u003e\n {\n [\"imageName\"] = myAppImage.ImageName,\n };\n});\n\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/ecr\"\n\t\"github.com/pulumi/pulumi-docker/sdk/v4/go/docker\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tecrRepository, err := ecr.NewRepository(ctx, \"ecr-repository\", \u0026ecr.RepositoryArgs{\n\t\t\tName: pulumi.String(\"docker-repository\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tauthToken := ecr.GetAuthorizationTokenOutput(ctx, ecr.GetAuthorizationTokenOutputArgs{\n\t\t\tRegistryId: ecrRepository.RegistryId,\n\t\t}, nil)\n\t\tmyAppImage, err := docker.NewImage(ctx, \"my-app-image\", \u0026docker.ImageArgs{\n\t\t\tBuild: \u0026docker.DockerBuildArgs{\n\t\t\t\tArgs: pulumi.StringMap{\n\t\t\t\t\t\"BUILDKIT_INLINE_CACHE\": pulumi.String(\"1\"),\n\t\t\t\t},\n\t\t\t\tCacheFrom: \u0026docker.CacheFromArgs{\n\t\t\t\t\tImages: pulumi.StringArray{\n\t\t\t\t\t\tecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tContext: pulumi.String(\"app/\"),\n\t\t\t\tDockerfile: pulumi.String(\"Dockerfile\"),\n\t\t\t},\n\t\t\tImageName: ecrRepository.RepositoryUrl.ApplyT(func(repositoryUrl string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v:latest\", repositoryUrl), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tRegistry: \u0026docker.RegistryArgs{\n\t\t\t\tPassword: pulumi.ToSecret(authToken.ApplyT(func(authToken ecr.GetAuthorizationTokenResult) (*string, error) {\n\t\t\t\t\treturn \u0026authToken.Password, nil\n\t\t\t\t}).(pulumi.StringPtrOutput)).(*pulumi.StringOutput),\n\t\t\t\tServer: ecrRepository.RepositoryUrl,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tctx.Export(\"imageName\", myAppImage.ImageName)\n\t\treturn nil\n\t})\n}\n```\n```yaml\nconfig: {}\ndescription: Docker image build using caching with AWS Elastic Container Registry\nname: image-caching-yaml\noutputs:\n imageName: ${my-app-image.imageName}\nresources:\n ecr-repository:\n properties:\n name: docker-repository\n type: aws:ecr:Repository\n my-app-image:\n options:\n version: v4.1.2\n properties:\n build:\n args:\n BUILDKIT_INLINE_CACHE: \"1\"\n cacheFrom:\n images:\n - ${ecr-repository.repositoryUrl}:latest\n context: app/\n dockerfile: Dockerfile\n imageName: ${ecr-repository.repositoryUrl}:latest\n registry:\n password:\n fn::secret: ${authToken.password}\n server: ${ecr-repository.repositoryUrl}\n type: docker:Image\nruntime: yaml\nvariables:\n authToken:\n fn::aws:ecr:getAuthorizationToken:\n registryId: ${ecr-repository.registryId}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.aws.ecr.Repository;\nimport com.pulumi.aws.ecr.RepositoryArgs;\nimport com.pulumi.aws.ecr.EcrFunctions;\nimport com.pulumi.aws.ecr.inputs.GetAuthorizationTokenArgs;\nimport com.pulumi.docker.Image;\nimport com.pulumi.docker.ImageArgs;\nimport com.pulumi.docker.inputs.DockerBuildArgs;\nimport com.pulumi.docker.inputs.CacheFromArgs;\nimport com.pulumi.docker.inputs.RegistryArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var ecrRepository = new Repository(\"ecrRepository\", RepositoryArgs.builder() \n .name(\"docker-repository\")\n .build());\n\n final var authToken = EcrFunctions.getAuthorizationToken(GetAuthorizationTokenArgs.builder()\n .registryId(ecrRepository.registryId())\n .build());\n\n var myAppImage = new Image(\"myAppImage\", ImageArgs.builder() \n .build(DockerBuildArgs.builder()\n .args(Map.of(\"BUILDKIT_INLINE_CACHE\", \"1\"))\n .cacheFrom(CacheFromArgs.builder()\n .images(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .build())\n .context(\"app/\")\n .dockerfile(\"Dockerfile\")\n .build())\n .imageName(ecrRepository.repositoryUrl().applyValue(repositoryUrl -\u003e String.format(\"%s:latest\", repositoryUrl)))\n .registry(RegistryArgs.builder()\n .password(Output.ofSecret(authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult).applyValue(authToken -\u003e authToken.applyValue(getAuthorizationTokenResult -\u003e getAuthorizationTokenResult.password()))))\n .server(ecrRepository.repositoryUrl())\n .build())\n .build());\n\n ctx.export(\"imageName\", myAppImage.imageName());\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}", "properties": { "baseImageName": { "type": "string", diff --git a/provider/pkg/docs-gen/examples/image.md b/provider/pkg/docs-gen/examples/image.md index 755a4f5fe..9afe70b77 100755 --- a/provider/pkg/docs-gen/examples/image.md +++ b/provider/pkg/docs-gen/examples/image.md @@ -9,11 +9,9 @@ import * as docker from "@pulumi/docker"; const demoImage = new docker.Image("demo-image", { build: { - args: { - platform: "linux/amd64", - }, context: ".", dockerfile: "Dockerfile", + platform: "linux/amd64", }, imageName: "username/image:tag1", skipPush: true, @@ -26,11 +24,9 @@ import pulumi_docker as docker demo_image = docker.Image("demo-image", build=docker.DockerBuildArgs( - args={ - "platform": "linux/amd64", - }, context=".", dockerfile="Dockerfile", + platform="linux/amd64", ), image_name="username/image:tag1", skip_push=True) @@ -48,12 +44,9 @@ return await Deployment.RunAsync(() => { Build = new Docker.Inputs.DockerBuildArgs { - Args = - { - { "platform", "linux/amd64" }, - }, Context = ".", Dockerfile = "Dockerfile", + Platform = "linux/amd64", }, ImageName = "username/image:tag1", SkipPush = true, @@ -78,11 +71,9 @@ func main() { pulumi.Run(func(ctx *pulumi.Context) error { demoImage, err := docker.NewImage(ctx, "demo-image", &docker.ImageArgs{ Build: &docker.DockerBuildArgs{ - Args: pulumi.StringMap{ - "platform": pulumi.String("linux/amd64"), - }, Context: pulumi.String("."), Dockerfile: pulumi.String("Dockerfile"), + Platform: pulumi.String("linux/amd64"), }, ImageName: pulumi.String("username/image:tag1"), SkipPush: pulumi.Bool(true), @@ -107,10 +98,9 @@ resources: version: v4.4.0 properties: build: - args: - platform: linux/amd64 context: . dockerfile: Dockerfile + platform: linux/amd64 imageName: username/image:tag1 skipPush: true type: docker:Image @@ -141,9 +131,9 @@ public class App { public static void stack(Context ctx) { var demoImage = new Image("demoImage", ImageArgs.builder() .build(DockerBuildArgs.builder() - .args(Map.of("platform", "linux/amd64")) .context(".") .dockerfile("Dockerfile") + .platform("linux/amd64") .build()) .imageName("username/image:tag1") .skipPush(true) diff --git a/provider/pkg/docs-gen/examples/yaml/image.yaml b/provider/pkg/docs-gen/examples/yaml/image.yaml index 31e800063..e6ef16e18 100644 --- a/provider/pkg/docs-gen/examples/yaml/image.yaml +++ b/provider/pkg/docs-gen/examples/yaml/image.yaml @@ -12,8 +12,7 @@ resources: build: dockerfile: Dockerfile context: . - args: - platform: linux/amd64 + platform: linux/amd64 options: version: v4.4.0 outputs: @@ -66,8 +65,7 @@ resources: registry: server: ${ecr-repository.repositoryUrl} password: - fn::secret: - ${authToken.password} + fn::secret: ${authToken.password} options: version: v4.1.2 outputs: diff --git a/sdk/dotnet/Image.cs b/sdk/dotnet/Image.cs index ecefaeb25..bd1436ebd 100644 --- a/sdk/dotnet/Image.cs +++ b/sdk/dotnet/Image.cs @@ -50,12 +50,9 @@ namespace Pulumi.Docker /// { /// Build = new Docker.Inputs.DockerBuildArgs /// { - /// Args = - /// { - /// { "platform", "linux/amd64" }, - /// }, /// Context = ".", /// Dockerfile = "Dockerfile", + /// Platform = "linux/amd64", /// }, /// ImageName = "username/image:tag1", /// SkipPush = true, diff --git a/sdk/go/docker/image.go b/sdk/go/docker/image.go index 65db4dd3b..32381e443 100644 --- a/sdk/go/docker/image.go +++ b/sdk/go/docker/image.go @@ -54,11 +54,9 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // demoImage, err := docker.NewImage(ctx, "demo-image", &docker.ImageArgs{ // Build: &docker.DockerBuildArgs{ -// Args: pulumi.StringMap{ -// "platform": pulumi.String("linux/amd64"), -// }, // Context: pulumi.String("."), // Dockerfile: pulumi.String("Dockerfile"), +// Platform: pulumi.String("linux/amd64"), // }, // ImageName: pulumi.String("username/image:tag1"), // SkipPush: pulumi.Bool(true), diff --git a/sdk/java/src/main/java/com/pulumi/docker/Image.java b/sdk/java/src/main/java/com/pulumi/docker/Image.java index da1628d6e..842c41c17 100644 --- a/sdk/java/src/main/java/com/pulumi/docker/Image.java +++ b/sdk/java/src/main/java/com/pulumi/docker/Image.java @@ -68,9 +68,9 @@ * public static void stack(Context ctx) { * var demoImage = new Image("demoImage", ImageArgs.builder() * .build(DockerBuildArgs.builder() - * .args(Map.of("platform", "linux/amd64")) * .context(".") * .dockerfile("Dockerfile") + * .platform("linux/amd64") * .build()) * .imageName("username/image:tag1") * .skipPush(true) diff --git a/sdk/nodejs/image.ts b/sdk/nodejs/image.ts index 5c170bcf0..476d9570f 100644 --- a/sdk/nodejs/image.ts +++ b/sdk/nodejs/image.ts @@ -43,11 +43,9 @@ import * as utilities from "./utilities"; * * const demoImage = new docker.Image("demo-image", { * build: { - * args: { - * platform: "linux/amd64", - * }, * context: ".", * dockerfile: "Dockerfile", + * platform: "linux/amd64", * }, * imageName: "username/image:tag1", * skipPush: true, diff --git a/sdk/python/pulumi_docker/image.py b/sdk/python/pulumi_docker/image.py index a01faa863..c0407be84 100644 --- a/sdk/python/pulumi_docker/image.py +++ b/sdk/python/pulumi_docker/image.py @@ -152,11 +152,9 @@ def __init__(__self__, demo_image = docker.Image("demo-image", build=docker.DockerBuildArgs( - args={ - "platform": "linux/amd64", - }, context=".", dockerfile="Dockerfile", + platform="linux/amd64", ), image_name="username/image:tag1", skip_push=True) @@ -253,11 +251,9 @@ def __init__(__self__, demo_image = docker.Image("demo-image", build=docker.DockerBuildArgs( - args={ - "platform": "linux/amd64", - }, context=".", dockerfile="Dockerfile", + platform="linux/amd64", ), image_name="username/image:tag1", skip_push=True)