This image is a simple configuration of the Nginx HTTP server, used for demonstrating the provision of a service from a container running on a Docker host, from containers deployed as service tasks in a Swarm cluster, or as pods in a Kubernetes cluster. The same image can be used for different, distinct workloads, by setting the COLOR
environment variable to one of Red, Blue or Black (default). Simplistic liveness and readiness endpoints can be accessed at /healthz/live
and /healthz/ready
, respectively.
The content and configuration of Nginx is simplistic, and can be invoked with:
$ docker container run --rm -d -p 80:80 -e COLOR=blue nbrown/nginxhello
To add the hostname of the Docker host to the served content, set the NODE_NAME
environment variable for the container:
$ docker container run --rm -d -p 80:80 -e NODENAME=$(hostname) nbrown/nginxhello
In order to run a Swarm service, and have each task serve the hostname of the node that the task is scheduled on:
$ docker service create --detach=false \
--publish published=80,target=80 \
--env COLOR=Red
--env NODE_NAME="{{.Node.Hostname}}" \
nbrown/nginxhello
To have Deployment replicas serve the cluster node's hostname, use the Downward API to retrieve the hostname:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginxhello
name: nginxhello
spec:
selector:
matchLabels:
app: nginxhello
template:
metadata:
labels:
app: nginxhello
spec:
containers:
- image: nginxhello
name: nginxhello
ports:
- containerPort: 80
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName