mirror of https://github.com/docker/docs.git
Improve the Windows secret and config examples
This commit is contained in:
parent
044bc28dbb
commit
6c1286d80d
|
@ -13,9 +13,10 @@ as possible, without the need to bind-mount configuration files into the
|
||||||
containers or use environment variables.
|
containers or use environment variables.
|
||||||
|
|
||||||
Configs operate in a similar way to [secrets](secrets.md), except that they are
|
Configs operate in a similar way to [secrets](secrets.md), except that they are
|
||||||
not encrypted at rest. Configs can be added or removed from a service at any
|
not encrypted at rest and are mounted directly into the container's filesystem
|
||||||
time, and services can share a config. You can even use configs in conjunction
|
without the use of RAM disks. Configs can be added or removed from a service at
|
||||||
with environment variables or labels, for maximum flexibility.
|
any time, and services can share a config. You can even use configs in
|
||||||
|
conjunction with environment variables or labels, for maximum flexibility.
|
||||||
|
|
||||||
> **Note**: Docker configs are only available to swarm services, not to
|
> **Note**: Docker configs are only available to swarm services, not to
|
||||||
> standalone containers. To use this feature, consider adapting your container
|
> standalone containers. To use this feature, consider adapting your container
|
||||||
|
@ -32,12 +33,12 @@ encrypted. The entire Raft log is replicated across the other managers, ensuring
|
||||||
the same high availability guarantees for configs as for the rest of the swarm
|
the same high availability guarantees for configs as for the rest of the swarm
|
||||||
management data.
|
management data.
|
||||||
|
|
||||||
When you grant a newly-created or running service access to a config, the
|
When you grant a newly-created or running service access to a config, the config
|
||||||
config is mounted as a file in the container, in an in-memory filesystem. The
|
is mounted as a file in the container. The location of the mount point within
|
||||||
location of the mount point within the container defaults to
|
the container defaults to `/<config-name>` in Linux containers. In Windows
|
||||||
`/<config-name>` in Linux containers. In Windows containers, configs are all
|
containers, configs are all mounted into `C:\ProgramData\Docker\configs` and
|
||||||
mounted into `C:\ProgramData\Docker\configs` and symbolic links are created to
|
symbolic links are created to the desired location, which defaults to
|
||||||
the desired location, which defaults to `C:\<config-name>`.
|
`C:\<config-name>`.
|
||||||
|
|
||||||
You can update a service to grant it access to additional configs or revoke its
|
You can update a service to grant it access to additional configs or revoke its
|
||||||
access to a given config at any time.
|
access to a given config at any time.
|
||||||
|
@ -98,7 +99,7 @@ real-world example, continue to
|
||||||
you can customize the file name on the container using the `target` option.
|
you can customize the file name on the container using the `target` option.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker service create --name="redis" --config="my-config" redis:alpine
|
$ docker service create --name redis --config my-config redis:alpine
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Verify that the task is running without issues using `docker service ps`. If
|
3. Verify that the task is running without issues using `docker service ps`. If
|
||||||
|
@ -155,14 +156,14 @@ real-world example, continue to
|
||||||
|
|
||||||
$ docker config rm my-config
|
$ docker config rm my-config
|
||||||
|
|
||||||
Error response from daemon: rpc error: code = 3 desc = config 'my-config' is in use by the following service: redis
|
Error response from daemon: rpc error: code = 3 desc = config 'my-config' is
|
||||||
```
|
in use by the following service: redis ```
|
||||||
|
|
||||||
7. Remove access to the config from the running `redis` service by updating the
|
7. Remove access to the config from the running `redis` service by updating the
|
||||||
service.
|
service.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker service update --config-rm="my-config" redis
|
$ docker service update --config-rm my-config redis
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Repeat steps 3 and 4 again, verifying that the service no longer has access
|
8. Repeat steps 3 and 4 again, verifying that the service no longer has access
|
||||||
|
@ -183,6 +184,57 @@ real-world example, continue to
|
||||||
$ docker config rm my-config
|
$ docker config rm my-config
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Simple example: Use configs in a Windows service
|
||||||
|
|
||||||
|
This is a very simple example which shows how to use configs with a Microsoft
|
||||||
|
IIS service running on Docker 17.06 EE on Microsoft Windows Server 2016 or Docker
|
||||||
|
for Mac 17.06 on Microsoft Windows 10. It stores the webpage in a config.
|
||||||
|
|
||||||
|
This example assumes that you have PowerShell installed.
|
||||||
|
|
||||||
|
1. Save the following into a new file `index.html`.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<html>
|
||||||
|
<head><title>Hello Docker</title></head>
|
||||||
|
<body>
|
||||||
|
<p>Hello Docker! You have deployed a HTML page.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
2. If you have not already done so, initialize or join the swarm.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
PS> docker swarm init
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Save the `index.html` file as a swarm config named `homepage`.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
PS> docker config create homepage index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Create an IIS service and grant it access to the `homepage` config.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
PS> docker service create
|
||||||
|
--name my-iis
|
||||||
|
-p 8000:8000
|
||||||
|
--config src=homepage,target="\inetpub\wwwroot\index.html"
|
||||||
|
microsoft/iis:nanoserver
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Access the IIS service at `http://localhost:8000/`. It should serve
|
||||||
|
the HTML content from the first step.
|
||||||
|
|
||||||
|
6. Remove the service and the config.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
PS> docker service rm my-iis
|
||||||
|
|
||||||
|
PS> docker config rm homepage
|
||||||
|
```
|
||||||
|
|
||||||
### Advanced example: Use configs with a Nginx service
|
### Advanced example: Use configs with a Nginx service
|
||||||
|
|
||||||
This example is divided into two parts.
|
This example is divided into two parts.
|
||||||
|
|
|
@ -37,6 +37,11 @@ development, test, and production swarms with the same secret name. Your
|
||||||
containers only need to know the name of the secret in order to function in all
|
containers only need to know the name of the secret in order to function in all
|
||||||
three environments.
|
three environments.
|
||||||
|
|
||||||
|
You can also use secrets to manage non-sensitive data, such as configuration
|
||||||
|
files. However, Docker 17.06 and higher support the use of [configs](configs.md)
|
||||||
|
for storing non-sensitive data. Configs are mounted into the container's
|
||||||
|
filesystem directly, without the use of a RAM disk.
|
||||||
|
|
||||||
### Windows support
|
### Windows support
|
||||||
|
|
||||||
Docker 17.06 and higher include support for secrets on Windows containers.
|
Docker 17.06 and higher include support for secrets on Windows containers.
|
||||||
|
@ -49,6 +54,11 @@ examples below. Keep the following notable differences in mind:
|
||||||
container stops. In addition, Windows does not support persisting a running
|
container stops. In addition, Windows does not support persisting a running
|
||||||
container as an image using `docker commit` or similar commands.
|
container as an image using `docker commit` or similar commands.
|
||||||
|
|
||||||
|
- On Windows, we recommend enabling
|
||||||
|
[BitLocker](https://technet.microsoft.com/en-us/library/cc732774(v=ws.11).aspx)
|
||||||
|
on the volume containing the Docker root directory on the host machine to
|
||||||
|
ensure that secrets for running containers are encrypted at rest.
|
||||||
|
|
||||||
- Secret files with custom targets are not directly bind-mounted into Windows
|
- Secret files with custom targets are not directly bind-mounted into Windows
|
||||||
containers, since Windows does not support non-directory file bind-mounts.
|
containers, since Windows does not support non-directory file bind-mounts.
|
||||||
Instead, secrets for a container are all mounted in
|
Instead, secrets for a container are all mounted in
|
||||||
|
@ -152,7 +162,7 @@ real-world example, continue to
|
||||||
you can customize the file name on the container using the `target` option.
|
you can customize the file name on the container using the `target` option.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker service create --name="redis" --secret="my_secret_data" redis:alpine
|
$ docker service create --name redis --secret my_secret_data redis:alpine
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Verify that the task is running without issues using `docker service ps`. If
|
3. Verify that the task is running without issues using `docker service ps`. If
|
||||||
|
@ -224,14 +234,15 @@ real-world example, continue to
|
||||||
|
|
||||||
$ docker secret rm my_secret_data
|
$ docker secret rm my_secret_data
|
||||||
|
|
||||||
Error response from daemon: rpc error: code = 3 desc = secret 'my_secret_data' is in use by the following service: redis
|
Error response from daemon: rpc error: code = 3 desc = secret
|
||||||
|
'my_secret_data' is in use by the following service: redis
|
||||||
```
|
```
|
||||||
|
|
||||||
7. Remove access to the secret from the running `redis` service by updating the
|
7. Remove access to the secret from the running `redis` service by updating the
|
||||||
service.
|
service.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker service update --secret-rm="my_secret_data" redis
|
$ docker service update --secret-rm my_secret_data redis
|
||||||
```
|
```
|
||||||
|
|
||||||
8. Repeat steps 3 and 4 again, verifying that the service no longer has access
|
8. Repeat steps 3 and 4 again, verifying that the service no longer has access
|
||||||
|
@ -254,64 +265,58 @@ real-world example, continue to
|
||||||
|
|
||||||
### Simple example: Use secrets in a Windows service
|
### Simple example: Use secrets in a Windows service
|
||||||
|
|
||||||
This is a very simple example which shows how to use secrets with a Windows
|
This is a very simple example which shows how to use secrets with a Microsoft
|
||||||
container running on Docker 17.06 EE on Microsoft Windows Server 2013 or Docker
|
IIS service running on Docker 17.06 EE on Microsoft Windows Server 2016 or Docker
|
||||||
for Mac 17.06 on Microsoft Windows 10. This example simply dumps the contents of
|
for Mac 17.06 on Microsoft Windows 10. It is a naive example that stores the
|
||||||
all secrets granted to the container.
|
webpage in a secret.
|
||||||
|
|
||||||
This example assumes that you have PowerShell installed.
|
This example assumes that you have PowerShell installed.
|
||||||
|
|
||||||
1. If you have not already done so, initialize or join the swarm.
|
1. Save the following into a new file `index.html`.
|
||||||
|
|
||||||
|
```html
|
||||||
|
<html>
|
||||||
|
<head><title>Hello Docker</title></head>
|
||||||
|
<body>
|
||||||
|
<p>Hello Docker! You have deployed a HTML page.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
2. If you have not already done so, initialize or join the swarm.
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
PS> docker swarm init
|
PS> docker swarm init
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Copy the following into a file called `Dockerfile`:
|
3. Save the `index.html` file as a swarm secret named `homepage`.
|
||||||
|
|
||||||
```conf
|
|
||||||
FROM microsoft/nanoserver
|
|
||||||
RUN ["powershell", "cat, "C:\\ProgramData\Docker\secrets\*.*"]
|
|
||||||
```
|
|
||||||
|
|
||||||
The `RUN` line will output the contents of any files within the default
|
|
||||||
secrets directory within Windows containers. If no secrets have been
|
|
||||||
granted to the service, no output will be shown.
|
|
||||||
|
|
||||||
3. Build the Dockerfile with the tag `secret-test`.
|
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
PS> docker build -t secret-test .
|
PS> docker secret create homepage index.html
|
||||||
```
|
```
|
||||||
|
|
||||||
4. Create a secret:
|
4. Create an IIS service and grant it access to the `homepage` secret.
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
PS> "this is a test" | docker secret create win-secret -
|
PS> docker service create
|
||||||
|
--name my-iis
|
||||||
|
-p 8000:8000
|
||||||
|
--secret src=homepage,target="\inetpub\wwwroot\index.html"
|
||||||
|
microsoft/iis:nanoserver
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Create a service using the `secret-test` image and grant it access to the
|
> **Note**: There is technically no reason to use secrets for this
|
||||||
`win-secret` secret.
|
> example. With Docker 17.06 and higher, [configs](configs.md) are
|
||||||
|
> a better fit. This example is for illustration only.
|
||||||
|
|
||||||
|
5. Access the IIS service at `http://localhost:8000/`. It should serve
|
||||||
|
the HTML content from the first step.
|
||||||
|
|
||||||
|
6. Remove the service and the secret.
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
PS> docker service create --name my-win-service --secret win-secret secret-test
|
PS> docker service rm my-iis
|
||||||
```
|
|
||||||
|
|
||||||
6. View the logs for the service:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
PS> docker service logs my-win-service
|
|
||||||
```
|
|
||||||
|
|
||||||
The contents of the secret should be shown.
|
|
||||||
|
|
||||||
7. Remove the service, the secret, and the image.
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
PS> docker service rm my-win-service
|
|
||||||
|
|
||||||
PS> docker secret rm win-secret
|
|
||||||
|
|
||||||
|
PS> docker secret rm homepage
|
||||||
PS> docker image remove secret-test
|
PS> docker image remove secret-test
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue