I'm not a fan of configuring Squid, and the NGINX configuration format has always seemed simpler.
When I saw the cute hack of doing proxy_pass http://$host;
, I couldn't resist trying it, especially since I haven't been 100% satisfied with Apt-Cacher NG either.
The configuration I've ended up with is probably a tad overaggressive about caching things (I haven't been testing it for very long, after all!), but it's speeding things up, so I'm happy with it anyhow!
This is how I use it -- your mileage may vary.
$ docker volume create \
--driver local \
--opt type=tmpfs \
--opt device=tmpfs \
--opt o=size=1048576k \
squignix
(The size of this tmpfs
controls how much RAM will be used for cache and also how much cache will be available, but max_size
has to be set in the configuration to a slightly lower value since NGINX will burst beyond the max_size
and then reign it back in. If having the cache in RAM isn't your thing or you want a different upper limit, you'll need to modify the NGINX configuration to adjust max_size
on proxy_cache_path
to your desired value.)
$ docker run -dit --name squignix -v squignix:/var/cache/nginx tianon/squignix
Once I've got that running, I add something like this to my rawdns configuration:
"deb.debian.org.": {
"type": "static",
"cnames": [ "squignix.docker" ],
"nameservers": [ "127.0.0.1" ]
},
"dl-cdn.alpinelinux.org.": {
"type": "static",
"cnames": [ "squignix.docker" ],
"nameservers": [ "127.0.0.1" ]
},
...
Since both my host and all my containers are configured to point at rawdns, this works transparently. There are other ways to accomplish this, but they'll be left as an exercise for the reader.