diff --git a/modules/README.md b/modules/README.md
index 8680022eb4e11401e2f50f3fab4a67b0ee99ef29..db8c93e9fe923b79a058d476c4dcaeabfcb857fe 100644
--- a/modules/README.md
+++ b/modules/README.md
@@ -3,7 +3,7 @@
 It's possible to extend a mainline image with third-party modules either from
 your own instuctions following a simple filesystem layout/syntax using
 `build_module.sh` helper script, or failing back to package sources from
-`https://hg.nginx.org/pkg-oss`.
+[pkg-oss](https://hg.nginx.org/pkg-oss).
 
 ## Usage
 
@@ -30,23 +30,25 @@ are available from `pkg-oss` repository:
 ```
 /pkg-oss $ LC_ALL=C make -C debian list-all-modules
 make: Entering directory '/pkg-oss/debian'
+auth-spnego             1.1.0-1
 brotli                  1.0.0-1
 encrypted-session       0.08-1
-geoip                   1.19.6-1
+fips-check              0.1-1
+geoip                   1.19.7-1
 geoip2                  3.3-1
 headers-more            0.33-1
-image-filter            1.19.6-1
+image-filter            1.19.7-1
 lua                     0.10.19-1
-modsecurity             1.0.1-1
+modsecurity             1.0.1-2
 ndk                     0.3.1-1
-njs                     0.5.0-1
+njs                     0.5.1-1
 opentracing             0.10.0-1
 passenger               6.0.6-1
-perl                    1.19.6-1
+perl                    1.19.7-1
 rtmp                    1.2.1-1
 set-misc                0.32-1
 subs-filter             0.6.4-1
-xslt                    1.19.6-1
+xslt                    1.19.7-1
 make: Leaving directory '/pkg-oss/debian'
 ```
 
@@ -81,3 +83,88 @@ Note that we can not provide any support for those modifications and in no way
 guarantee they will work as nice as a build without third-party modules.  If
 you encounter any issues running your image with the modules enabled, please
 reproduce with a vanilla image first.
+
+## Examples
+
+### docker-compose with pre-packaged modules
+
+If desired modules are already packaged in
+[pkg-oss](https://hg.nginx.org/pkg-oss/) - e.g. `debian/Makefile.module-*`
+exists for a given module, you can use this example.
+
+1. Create a directory for your project:
+
+```
+mkdir myapp
+cd myapp
+````
+
+2.  Populate the build context for a custom nginx image:
+
+```
+mkdir my-nginx
+curl -o my-nginx/Dockerfile https://raw.githubusercontent.com/nginxinc/docker-nginx/master/modules/Dockerfile
+```
+
+3. Create a `docker-compose.yml` file:
+
+```
+cat > docker-compose.yml << __EOF__
+version: "3.3"
+services:
+  web:
+    build:
+      context: ./my-nginx/
+      args:
+        ENABLED_MODULES: ndk lua
+    image: my-nginx-with-lua:v1
+    ports:
+      - "80:8000"
+__EOF__
+```
+
+Now, running `docker-compose up --build -d` will build the image and run the application for you.
+
+### docker-compose with a non-packaged module
+
+If a needed module is not available via `pkg-oss`, you can use this example.
+
+We're going to build the image with [ngx_cache_purge](https://github.com/FRiCKLE/ngx_cache_purge) module.
+
+The steps are similar to a previous example, with a notable difference of
+providing a URL to fetch the module source code from.
+
+1. Create a directory for your project:
+
+```
+mkdir myapp-cache
+cd myapp-cache
+````
+
+2.  Populate the build context for a custom nginx image:
+
+```
+mkdir my-nginx
+curl -o my-nginx/Dockerfile https://raw.githubusercontent.com/nginxinc/docker-nginx/master/modules/Dockerfile
+mkdir my-nginx/cachepurge
+echo "https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz" > my-nginx/cachepurge/source
+```
+
+3. Create a `docker-compose.yml` file:
+
+```
+cat > docker-compose.yml << __EOF__
+version: "3.3"
+services:
+  web:
+    build:
+      context: ./my-nginx/
+      args:
+        ENABLED_MODULES: cachepurge
+    image: my-nginx-with-cachepurge:v1
+    ports:
+      - "80:8080"
+__EOF__
+```
+
+Now, running `docker-compose up --build -d` will build the image and run the application for you.