mirror of https://github.com/docker/docs.git
Merge pull request #18671 from dvdksn/build-secrets
build: add build secrets page
This commit is contained in:
commit
a43e0f9cbd
|
@ -0,0 +1,115 @@
|
||||||
|
---
|
||||||
|
title: Build secrets
|
||||||
|
description: Manage credentials and other secrets securely
|
||||||
|
keywords: build, secrets, credentials, passwords, tokens
|
||||||
|
---
|
||||||
|
|
||||||
|
A build secret is any piece of sensitive information, such as a password or API
|
||||||
|
token, consumed as part of your application's build process.
|
||||||
|
|
||||||
|
Build arguments and environment variables are inappropriate for passing secrets
|
||||||
|
to your build, because they persist in the final image. Instead, should use
|
||||||
|
secret mounts or SSH mounts, which expose secrets to your builds securely.
|
||||||
|
|
||||||
|
## Secret mounts
|
||||||
|
|
||||||
|
Secret mounts expose secrets to the build containers as files. You [mount the
|
||||||
|
secrets to the `RUN`
|
||||||
|
instructions](../../engine/reference/builder.md#run---mounttypesecret) that
|
||||||
|
need to access them, similar to how you would define a bind mount or cache
|
||||||
|
mount.
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
RUN --mount=type=secret,id=mytoken \
|
||||||
|
TOKEN=$(cat /run/secrets/mytoken) ...
|
||||||
|
```
|
||||||
|
|
||||||
|
To pass a secret to a build, use the [`docker build --secret`
|
||||||
|
flag](../../engine/reference/commandline/buildx_build.md#secret), or the
|
||||||
|
equivalent options for [Bake](../bake/reference.md#targetsecret).
|
||||||
|
|
||||||
|
{{< tabs >}}
|
||||||
|
{{< tab name="CLI" >}}
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker build --secret id=mytoken,src=$HOME/.aws/credentials .
|
||||||
|
```
|
||||||
|
|
||||||
|
{{< /tab >}}
|
||||||
|
{{< tab name="Bake" >}}
|
||||||
|
|
||||||
|
```hcl
|
||||||
|
variable "HOME" {
|
||||||
|
default = null
|
||||||
|
}
|
||||||
|
|
||||||
|
target "default" {
|
||||||
|
secret = [
|
||||||
|
"id=mytoken,src=${HOME}/.aws/credentials"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
{{< /tab >}}
|
||||||
|
{{< /tabs >}}
|
||||||
|
|
||||||
|
### Sources
|
||||||
|
|
||||||
|
The source of a secret can be either a
|
||||||
|
[file](../../engine/reference/commandline/buildx_build.md#file) or an
|
||||||
|
[environment variable](../../engine/reference/commandline/buildx_build.md#env).
|
||||||
|
When you use the CLI or Bake, the type can be detected automatically. You can
|
||||||
|
also specify it explicitly with `type=file` or `type=env`.
|
||||||
|
|
||||||
|
The following example mounts the environment variable `KUBECONFIG` to secret ID
|
||||||
|
`kube`.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker build --secret id=kube,env=KUBECONFIG .
|
||||||
|
```
|
||||||
|
|
||||||
|
The following example maps an environment variable directly to a secret ID.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker build --secret env=KUBECONFIG .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Target
|
||||||
|
|
||||||
|
By default, secrets are mounted to `/run/secrets/<id>`. You can customize the
|
||||||
|
mount point in the build container using the `target` option in the Dockerfile.
|
||||||
|
|
||||||
|
The following example mounts the secret to a `/root/.aws/credentials` file in
|
||||||
|
the build container.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker build --secret id=aws,src=/root/.aws/credentials .
|
||||||
|
```
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
RUN --mount=type=secret,id=aws,target=/root/.aws/credentials \
|
||||||
|
aws s3 cp ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## SSH mounts
|
||||||
|
|
||||||
|
If the credential you want to use in your build is an SSH agent socket or key,
|
||||||
|
you can use the SSH mount instead of a secret mount. Cloning private Git
|
||||||
|
repositories is a common use case for SSH mounts.
|
||||||
|
|
||||||
|
The following example clones a private GitHub repository using a [Dockerfile
|
||||||
|
SSH mount](../../engine/reference/builder.md#run---mounttypessh).
|
||||||
|
|
||||||
|
```dockerfile
|
||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
FROM alpine
|
||||||
|
ADD git@github.com:me/myprivaterepo.git /src/
|
||||||
|
```
|
||||||
|
|
||||||
|
To pass an SSH socket the build, you use the [`docker build --ssh`
|
||||||
|
flag](../../engine/reference/commandline/buildx_build.md#ssh), or equivalent
|
||||||
|
options for [Bake](../bake/reference.md#targetssh).
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ docker buildx build --ssh default .
|
||||||
|
```
|
|
@ -1775,6 +1775,8 @@ Manuals:
|
||||||
title: Multi-platform images
|
title: Multi-platform images
|
||||||
- path: /build/building/env-vars/
|
- path: /build/building/env-vars/
|
||||||
title: Environment variables
|
title: Environment variables
|
||||||
|
- path: /build/building/secrets/
|
||||||
|
title: Build secrets
|
||||||
- path: /build/building/opentelemetry/
|
- path: /build/building/opentelemetry/
|
||||||
title: OpenTelemetry support
|
title: OpenTelemetry support
|
||||||
- path: /build/building/base-images/
|
- path: /build/building/base-images/
|
||||||
|
|
Loading…
Reference in New Issue