5.6 KiB
Usage with Docker Compose
As stated by its repository, Docker Compose is a tool for defining and running multi-container Docker applications using a single Compose file. This Wiki page is not meant to be a definitive reference on how to run nginx-proxy and acme-companion with Docker Compose, as the number of possible setups is quite extensive and they can't be all covered.
Before your start
Be sure to be familiar with both the basic and advanced non compose setups, and Docker Compose usage.
The following examples are minimal, clean starting points, not a definitive reference. They follow current Docker Compose conventions:
- The top-level
version:key is intentionally omitted: it is obsolete in the Compose Specification and ignored by Docker Compose. - They do not use
volumes_from(a compose file version 2 only feature): every volume is mounted explicitly on each container instead. - acme-companion finds the nginx/nginx-proxy (and docker-gen) container through the
labelmethod, see getting container IDs. TheNGINX_PROXY_CONTAINER/NGINX_DOCKER_GEN_CONTAINERenvironment variable method documented there is an equally valid alternative.
If you still rely on a volumes_from based compose file, see getting container IDs for the docker run --volumes-from method (still supported) and this page's git history for the previous examples.
The use of named containers and volumes is not required but helps keeping everything clear and organized.
Two containers example
services:
nginx-proxy:
image: nginxproxy/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
labels:
- "com.github.nginx-proxy.nginx"
volumes:
- certs:/etc/nginx/certs:ro
- html:/usr/share/nginx/html
- /var/run/docker.sock:/tmp/docker.sock:ro
# The vhost and conf volumes are only required
# if you plan to obtain standalone certificates
# - vhost:/etc/nginx/vhost.d
# - conf:/etc/nginx/conf.d
acme-companion:
image: nginxproxy/acme-companion
container_name: nginx-proxy-acme
environment:
- DEFAULT_EMAIL=mail@yourdomain.tld
volumes:
- certs:/etc/nginx/certs:rw
- html:/usr/share/nginx/html:rw
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
# The vhost and conf volumes are only required
# if you plan to obtain standalone certificates
# - vhost:/etc/nginx/vhost.d
# - conf:/etc/nginx/conf.d
# A user-defined network is optional; Compose creates a default one per project.
#networks:
# default:
# name: nginx-proxy
volumes:
certs:
html:
acme:
# vhost:
# conf:
Three containers example
services:
nginx:
image: nginx:alpine
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
labels:
- "com.github.nginx-proxy.nginx"
volumes:
- conf:/etc/nginx/conf.d:ro
- html:/usr/share/nginx/html
- certs:/etc/nginx/certs:ro
# The vhost volume is only required if you
# plan to obtain standalone certificates
# - vhost:/etc/nginx/vhost.d
docker-gen:
image: nginxproxy/docker-gen
container_name: nginx-proxy-gen
command: -notify-sighup nginx-proxy -watch -wait 5s:30s /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
labels:
- "com.github.nginx-proxy.docker-gen"
volumes:
- conf:/etc/nginx/conf.d:rw
- certs:/etc/nginx/certs:ro
- /path/to/nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
# The vhost volume is only required if you
# plan to obtain standalone certificates
# - vhost:/etc/nginx/vhost.d
acme-companion:
image: nginxproxy/acme-companion
container_name: nginx-proxy-acme
environment:
- DEFAULT_EMAIL=mail@yourdomain.tld
volumes:
- certs:/etc/nginx/certs:rw
- html:/usr/share/nginx/html:rw
- acme:/etc/acme.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
# The vhost and conf volumes are only required
# if you plan to obtain standalone certificates
# - vhost:/etc/nginx/vhost.d
# - conf:/etc/nginx/conf.d
#networks:
# default:
# name: nginx-proxy
volumes:
conf:
html:
certs:
acme:
# vhost:
Note: don't forget to replace /path/to/nginx.tmpl with the actual path to the nginx.tmpl file you downloaded.
Other (external) examples
Warning: some of those examples might be outdated and not working properly with version >= 2.0 of this project.
If you want other examples how to use this container with Docker Compose, look at:
- Nicolas Duchon's Examples - with automated testing
- Evert Ramos's Examples - using docker-compose version '3'
- Karl Fathi's Examples
- More examples from Karl
- George Ilyes' Examples
- Dmitry's simple docker-compose example
- Radek's docker-compose jenkins example