Browse Source

Run update.sh

Docker Library Bot 1 week ago
parent
commit
d8a03ebef1
2 changed files with 78 additions and 63 deletions
  1. 1 1
      bash/README.md
  2. 77 62
      varnish/README.md

+ 1 - 1
bash/README.md

@@ -24,7 +24,7 @@ WARNING:
 
 # Supported tags and respective `Dockerfile` links
 
--	[`devel-20260309`, `devel`, `devel-20260309-alpine3.23`, `devel-alpine3.23`](https://github.com/tianon/docker-bash/blob/5b559e99a3edb62532ae3a1c4ed7de7ed7c0c10c/devel/Dockerfile)
+-	[`devel-20260324`, `devel`, `devel-20260324-alpine3.23`, `devel-alpine3.23`](https://github.com/tianon/docker-bash/blob/d75654453472c202837574b8fd8ea7685af5592a/devel/Dockerfile)
 
 -	[`5.3.9`, `5.3`, `5`, `latest`, `5.3.9-alpine3.23`, `5.3-alpine3.23`, `5-alpine3.23`, `alpine3.23`](https://github.com/tianon/docker-bash/blob/59999c513d9e7bddb3972d38aa112af045cb0e80/5.3/Dockerfile)
 

+ 77 - 62
varnish/README.md

@@ -61,37 +61,51 @@ Varnish is an HTTP accelerator designed for content-heavy dynamic web sites as w
 
 # How to use this image.
 
+```console
+$ docker run -p 8080:80 --ulimit memlock=-1:-1 --tmpfs /var/lib/varnish/varnishd:exec varnish
+```
+
+You can then visit [http://localhost:8080](http://localhost:8080) with your browser and be greeted by the default landing page.
+
+**Note:** while the `--ulimit` and `--tmpfs` options aren't necessary, they are greatly recommended. More details are available at the end of this page.
+
 ## Basic usage
 
-### Using `VARNISH_BACKEND_HOST` and `VARNISH_BACKEND_PORT`
+### Simple cache
 
-You just need to know where your backend (the server that Varnish will accelerate) is:
+The default Varnish configuration will read the `VARNISH_BACKEND_HOST` environment variable which should be an HTTP or HTTPS URL, for example:
 
 ```console
-# we define VARNISH_BACKEND_HOST/VARNISH_BACKEND_PORT
-# our workdir has to be mounted as tmpfs to avoid disk I/O,
-# and we'll use port 8080 to talk to our container (internally listening on 80)
 $ docker run \
-    -e VARNISH_BACKEND_HOST=example.com -e VARNISH_BACKEND_PORT=80 \
+	--ulimit memlock=-1:-1 \
 	--tmpfs /var/lib/varnish/varnishd:exec \
 	-p 8080:80 \
+	-e VARNISH_BACKEND_HOST=https://example.com/ \
 	varnish
 ```
 
-From there, you can visit `localhost:8080` in your browser and see the example.com homepage.
+By default, Varnish is extremely careful regarding what it can and cannot cache by looking at the [client request](https://www.varnish-software.com/developers/tutorials/varnish-builtin-vcl/#1-vcl_recv) and at the [backend response](https://www.varnish-software.com/developers/tutorials/varnish-builtin-vcl/#11-vcl_backend_response).
 
-### Using a VCL file
+Notably, Varnish will not cache if:
+
+-	the request is not a `GET` or `HEAD`
+-	the request contains an `Authorization` or `Cookie` header
+-	the response status is not cacheable (i.e., not a 2xx or 4xx response)
+-	the response contains a `Set-Cookie` header
+-	the response contains headers indicating it is uncacheable
+
+These rules can, of course, be overridden by providing your own `VCL` file, as explained in the next section.
+
+### Custom caching logic
 
 If you already have a VCL file, you can directly mount it as `/etc/varnish/default.vcl`:
 
 ```console
-# we need the configuration file at /etc/varnish/default.vcl,
-# our workdir has to be mounted as tmpfs to avoid disk I/O,
-# and we'll use port 8080 to talk to our container (internally listening on 80)
 $ docker run \
-	-v /path/to/default.vcl:/etc/varnish/default.vcl:ro \
+	--ulimit memlock=-1:-1 \
 	--tmpfs /var/lib/varnish/varnishd:exec \
 	-p 8080:80 \
+	-v /path/to/default.vcl:/etc/varnish/default.vcl:ro \
 	varnish
 ```
 
@@ -106,12 +120,16 @@ COPY default.vcl /etc/varnish/
 Place this file in the same directory as your `default.vcl`, run `docker build -t my-varnish .`, then start your container:
 
 ```console
-$ docker --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 my-varnish
+$ docker \
+	--ulimit memlock=-1:-1 \
+	--tmpfs /var/lib/varnish/varnishd:exec \
+	-p 8080:80 \
+	my-varnish
 ```
 
 ## Reloading the configuration
 
-The images all ship with [varnishreload](https://github.com/varnishcache/pkg-varnish-cache/blob/master/systemd/varnishreload#L42) which allows you to easily update the running configuration without restarting the container (and therefore losing your cache). At its most basic, you just need this:
+The images all ship with [varnishreload](https://github.com/varnish/all-packager/blob/809d3c098d1cb84d1b85e18573121a3a3720c898/varnish/systemd/varnishreload#L48-L82) which allows you to easily update the running configuration without restarting the container (and therefore losing your cache). At its most basic, you just need this:
 
 ```console
 # update the default.vcl in your container
@@ -120,15 +138,39 @@ docker cp new_default.vcl running_container:/etc/varnish/default.vcl
 docker exec running_container varnishreload
 ```
 
-Note that `varnishreload` also supports reloading other files (it doesn't have to be `default.vcl`), labels (`l`), and garbage collection of old labeles (`-m`) among others. To know more, run
+Note that `varnishreload` also supports reloading other files (it doesn't have to be `default.vcl`), labels (`-l`), and garbage collection of old labels (`-m`), among others. To learn more, run
+
+```console
+$ docker run --rm varnish varnishreload -h
+```
+
+## File server
+
+Using the included [vmod-fileserver](https://github.com/varnish-rs/vmod-fileserver), Varnish can be used as a file server. Just mount the directory you want to expose into the `/var/www/html` directory and set the `VARNISH_FILESERVER` variable to `true`:
 
 ```console
-docker run varnish varnishreload -h
+$ docker run \
+	--ulimit memlock=-1:-1 \
+	--tmpfs /var/lib/varnish/varnishd:exec \
+	-p 8080:80 \
+	-v /dir/to/expose:/var/www/html:ro \
+	-e VARNISH_FILESERVER=true \
+	varnish
 ```
 
-## Additional configuration
+**Note:** Varnish will reply with an empty 200 when trying to access folders instead of individual files.
+
+## Environment variables
+
+### Backend address (`VARNISH_BACKEND_HOST`)
+
+Set the backend address and protocol as explained above. This only works with the provided `VCL`, i.e. if you don't mount an `/etc/varnish/default.vcl` file, and if you don't set `VARNISH_VCL_FILE`
+
+### File server mode (`VARNISH_FILESERVER`)
+
+Also only valid with the default `VCL`. If `VARNISH_BACKEND_HOST` is unset and `VARNISH_FILESERVER` is set, Varnish will act as a server, using `/var/www/html` as its source.
 
-### Cache size (VARNISH_SIZE)
+### Cache size (`VARNISH_SIZE`)
 
 By default, the containers will use a cache size of 100MB, which is usually a bit too small, but you can quickly set it through the `VARNISH_SIZE` environment variable:
 
@@ -136,26 +178,30 @@ By default, the containers will use a cache size of 100MB, which is usually a bi
 $ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 -e VARNISH_SIZE=2G varnish
 ```
 
-### Listening ports (VARNISH_HTTP_PORT/VARNISH_PROXY_PORT)
+### Listening ports (`VARNISH_HTTP_PORT`/`VARNISH_PROXY_PORT`)
 
-Varnish will listen to HTTP traffic on port `80`, and this can be overridden by setting the environment variable `VARNISH_HTTP_PORT`. Similarly, the variable `VARNISH_PROXY_PORT` (defaulting to `8443`) dictate the listening port for the [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) used notably to interact with [hitch](https://hub.docker.com/_/hitch) (which, coincidentally, uses `8443` as a default too!).
+Varnish will listen to HTTP traffic on port `80`, and this can be overridden by setting the environment variable `VARNISH_HTTP_PORT`. Similarly, the variable `VARNISH_PROXY_PORT` (defaulting to `8443`) dictates the listening port for the [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) used notably to interact with [hitch](https://hub.docker.com/_/hitch) (which, coincidentally, uses `8443` as a default too!).
 
 ```console
-# instruct varnish to listening to port 7777 instead of 80
+# instruct varnish to listen on port 7777 instead of 80
 $ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:7777 -e VARNISH_HTTP_PORT=7777 varnish
 ```
 
-### VCL file path
+### VCL file (`VARNISH_VCL_FILE`)
 
 The default Varnish configuration file is `/etc/varnish/default.vcl`, but this can be overridden with the `VARNISH_VCL_FILE` environment variable. This is useful if you want a single image that can be deployed with different configurations baked in it.
 
 ### Extra arguments
 
-Additionally, you can add arguments to `docker run` after `varnish`, if the first argument starts with a `-`, the whole list will be appendend to the [default command](https://github.com/varnish/docker-varnish/blob/master/fresh/debian/scripts/docker-varnish-entrypoint):
+Additionally, you can add arguments to `docker run` after `varnish`, if the first argument starts with a `-`, the whole list will be appended to the [default command](https://github.com/varnish/docker-varnish/blob/master/fresh/debian/scripts/docker-varnish-entrypoint):
 
 ```console
 # extend the default keep period
-$ docker run --tmpfs /var/lib/varnish/varnishd:exec -p 8080:80 -e VARNISH_SIZE=2G varnish -p default_keep=300
+$ docker run \
+	--ulimit memlock=-1:-1 \
+	--tmpfs /var/lib/varnish/varnishd:exec \
+	-p 8080:80 \
+	varnish -p default_keep=300
 ```
 
 If your first argument after `varnish` doesn't start with `-`, it will be interpreted as a command to override the default one:
@@ -171,49 +217,18 @@ $ docker run varnish varnishd -x parameter
 $ docker run varnish varnishd -F -a :8080 -b 127.0.0.1:8181 -t 600 -p feature=+http2
 ```
 
-## vmods (since 7.1)
-
-As mentioned above, you can use [vmod_dynamic](https://github.com/nigoroll/libvmod-dynamic) for backend resolution. The [varnish-modules](https://github.com/varnish/varnish-modules) collection is also included in the image. All the documentation regarding usage and syntax can be found in the [src/](https://github.com/varnish/varnish-modules/tree/master/src) directory of the repository.
+This can notably be used to extract logs using [varnishncsa or varnishlog](https://www.varnish-software.com/developers/tutorials/vsl-cheatsheet/), running `varnishstat -1` to extract metrics, and of course reloading the `VCL` with `varnishreload`.
 
-On top of this, images include [install-vmod](https://github.com/varnish/toolbox/tree/master/install-vmod), a helper script to quickly download, compile and install vmods while creating your own images. Note that images set the `ENV` variable `VMOD_DEPS` to ease the task further.
+## Vmods
 
-### Debian
+The docker image is built with a collection of "`VCL` modules" or "vmods" that extend Varnish capability. We've already covered `vmod-fileserver` (file backend) and `vmod-reqwest` (dynamic backends), but more are available and can be used in your custom `VCL` with `import <vmod_name>`. Please refer to the documentation of each vmod for more information.
 
-```dockerfile
-FROM varnish:7.1
-
-# set the user to root, and install build dependencies
-USER root
-RUN set -e; \
-    apt-get update; \
-    apt-get -y install $VMOD_DEPS /pkgs/*.deb; \
-    \
-# install one, possibly multiple vmods
-   install-vmod https://github.com/varnish/varnish-modules/releases/download/0.20.0/varnish-modules-0.20.0.tar.gz; \
-    \
-# clean up and set the user back to varnish
-    apt-get -y purge --auto-remove $VMOD_DEPS varnish-dev; \
-    rm -rf /var/lib/apt/lists/*
-USER varnish
-```
+# ulimit and tmpfs notes
 
-### Alpine
+Varnish uses [memory-mapped files](https://docs.varnish-software.com/varnish-enterprise/installation/#the-shared-memory-log) to log and store metrics for performance reasons. Those files are constantly written to, and to get the most out of your system, you should:
 
-```dockerfile
-FROM varnish:7.1-alpine
-
-# install build dependencies
-USER root
-RUN set -e; \
-    apk add --no-cache $VMOD_DEPS; \
-    \
-# install one, possibly multiple vmods
-    install-vmod https://github.com/varnish/varnish-modules/releases/download/0.20.0/varnish-modules-0.20.0.tar.gz; \
-    \
-# clean up
-    apk del --no-network $VMOD_DEPS
-USER varnish
-```
+-	mount the working directory as `tmpfs` to make sure disk I/O isn't a bottleneck; that's what the `--tmpfs` switch does
+-	allow Varnish to lock those memory-mapped files so they aren't paged out by the kernel; hence the `--ulimit` switch
 
 # Image Variants