= Contaminate

Contaminate is a caching proxy masquerading as Docker registry. It can modify
Docker images and manifests on the fly, for those who need a little more
mutability in their immutable infrastructure.


== Configuration

Contaminate can be configured with a `contaminate.yml` file, or via specific
environment variables which can override configuration values.

=== YAML Keys

[cols="^1,<.^4,^1,^1"]
|===
.^| Name
.^| Env Variable
.^| Default Value
.^| Notes

| `layers_dir`
| `CT_layers_dir`
| `./layers.d`
| A directory containing the layers to override on images passing through Contaminate.

| `registry`
| `CT_registry`
| https://registry-1.docker.io
| A Registry HTTP V2 compliant URL, reachable by Contaminate.

|===

=== Environment Variables

[cols="^1,<.^4,^1"]
|===
.^| Name
.^| Default Value
.^| Notes


| `RUST_LOG`
| `warn`
| Log level for Contaminate logs to be printed

| `RUST_BACKTRACE`
| `0`
| Print full stack traces when errors occur

|===

== Hacking

Ensure that your local Docker daemon can access your Contaminate instance
without requiring HTTPs:

./etc/sysconfig/docker
[source, sh]
----
DOCKER_OPTS="--insecure-registry=localhost:5000 --insecure-registry=localhost:9090"
----

Running a local Docker registry to contaminate:

[source, sh]
----
docker run --rm -ti -e REGISTRY_HTTP_SECRET=secret -p 5000:5000 registry:2
----

Pull some upstream images and push them into your registry

[source,sh]
----
docker pull alpine:latest
docker tag alpine:latest localhost:5000/library/alpine:latest
docker push localhost:5000/library/alpine:latest
----
