cache docker + squid vm ou externe
This commit is contained in:
parent
4c1e7bde33
commit
aa3c77c29a
11
README.md
11
README.md
@ -112,17 +112,20 @@ vagrant destroy
|
|||||||
|
|
||||||
## Accélération de la construction avec un proxy cache local
|
## Accélération de la construction avec un proxy cache local
|
||||||
|
|
||||||
Au tout début de la construction de la VM, un proxy Squid et un proxy Dockerhub sont installés au niveau de la VM. Ils font du cache et sont ensuite utilisé lors des apt-get du provisionning de la VM puis lors des constructions des conteneurs LXC et des dockers. Certains téléchargements ne sont pas encore mis en cache (soit parce que certains téléchargements se font hors de ce proxy, soit par l'utilisation du HTTPS qui n'est pas (encore) intercepté pour faire ce cache), mais cela diminue déjà beaucoup le trafic réseau lors de la construction et lors des reconstructions partielles ensuite.
|
Au tout début de la construction de la VM, un proxy Squid et un proxy Dockerhub (docker-registry) sont installés au niveau de la VM. Ils font du cache et sont ensuite utilisé lors des apt-get du provisionning de la VM puis lors des constructions des conteneurs LXC et des dockers. Quelques téléchargements ne sont pas encore mis en cache (soit parce que certains téléchargements se font hors de ce proxy, soit par l'utilisation du HTTPS qui n'est pas (encore) intercepté pour faire ce cache), mais cela diminue déjà beaucoup le trafic réseau lors de la construction et lors des reconstructions partielles ensuite.
|
||||||
|
|
||||||
Il est possible de configurer ce proxy pour utiliser un proxy du réseau local à son tour. L'intérêt est d'avoir un cache persistant lors de la reconstruction de la VM, ou de pouvoir rediriger certaines requêtes (dépôts Debian ou Alpine) vers des miroirs locaux. Pour cela, il faut :
|
Il est possible de configurer ce proxy pour utiliser un proxy du réseau local à son tour. L'intérêt est d'avoir un cache persistant lors de la reconstruction de la VM, ou de pouvoir rediriger certaines requêtes (dépôts Debian ou Alpine) vers des miroirs locaux. Pour cela, il faut un fichier `files/customVM.sh`. Un fichier `files/customVM.sh.dist` est fourni en exemple : il suffit de le renommer en `customVM.sh`, puis de modifier les IP du proxy et du registry Docker upstreams dans les premières lignes. Il est évidemment possible de n'activer que l'une des 2 fonctionnalités (soit que le proxy http externe, soit que le docker registry externe) en commentant les lignes associées.
|
||||||
* Un fichier `files/customVM.sh`. Un fichier `files/customVM.sh.dist` est fourni en exemple : il suffit de le renommer en `customVM.sh`, puis de modifier l'IP du proxy upstream dans la ligne `cache_peer`. Il s'adressera par exemple à un squid sur le réseau local.
|
|
||||||
* Un fichier `files/snster-kaz/kaz/prod/customKaz.sh`. Un fichier `files/snster-kaz/kaz/prod/customKaz.sh.dist` est fourni en exemple : il suffit de le renommer en `customKaz.sh`, puis de modifier l'IP du registre docker sur le réseau local. Pour installer ce registre sur une Debian :
|
Pour installer un Squid sur l'hôte : TODO
|
||||||
|
|
||||||
|
Pour installer un docker-registry sur l'hôte :
|
||||||
* `apt install docker-registry`
|
* `apt install docker-registry`
|
||||||
* Éditer `/etc/docker/registry/config.yml` :
|
* Éditer `/etc/docker/registry/config.yml` :
|
||||||
* Enlever la section `auth`
|
* Enlever la section `auth`
|
||||||
* Ajouter `proxy:
|
* Ajouter `proxy:
|
||||||
remoteurl: https://registry-1.docker.io`
|
remoteurl: https://registry-1.docker.io`
|
||||||
|
|
||||||
|
|
||||||
## Installation avancée
|
## Installation avancée
|
||||||
|
|
||||||
L'installation avancée, notamment pour utiliser d'autres miroirs ou des caches APT, est décrite dans le fichier [DETAILS.md](DETAILS.md).
|
L'installation avancée, notamment pour utiliser d'autres miroirs ou des caches APT, est décrite dans le fichier [DETAILS.md](DETAILS.md).
|
||||||
|
@ -1,14 +1,42 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Upstream proxy
|
PROXY="192.168.0.121:3128"
|
||||||
echo "cache_peer 192.168.0.121 parent 3128 0 no-query default
|
REGISTRY="192.168.0.121:5000"
|
||||||
acl all src 0.0.0.0/0.0.0.0
|
|
||||||
http_access allow all
|
|
||||||
never_direct allow all" >> /etc/squid/squid.conf
|
|
||||||
|
|
||||||
service squid restart
|
# Pour le proxy http/https (https sans cache) avec iptables
|
||||||
|
cat >> /etc/rc.local <<EOF
|
||||||
|
#!/bin/sh
|
||||||
|
PROXY=${PROXY}
|
||||||
|
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3142 -j DNAT --to \${PROXY}
|
||||||
|
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 3142 -j DNAT --to \${PROXY}
|
||||||
|
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||||||
|
EOF
|
||||||
|
chmod +x /etc/rc.local
|
||||||
|
echo "net.ipv4.conf.eth0.route_localnet=1" >> /etc/sysctl.conf
|
||||||
|
sysctl -p
|
||||||
|
# fin proxy
|
||||||
|
|
||||||
|
# Pour le cache docker
|
||||||
|
cat >> /etc/rc.local <<EOF
|
||||||
|
REGISTRY=${REGISTRY}
|
||||||
|
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 5000 -j DNAT --to \${REGISTRY}
|
||||||
|
EOF
|
||||||
|
# fin cache docker
|
||||||
|
|
||||||
|
|
||||||
|
bash /etc/rc.local
|
||||||
|
|
||||||
# Un peu de customisation
|
# Un peu de customisation
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y vim rsync
|
DEBIAN_FRONTEND=noninteractive apt-get install -y vim rsync
|
||||||
rsync -a /vagrant/files/.emacs* /root/
|
rsync -a /vagrant/files/.emacs* /root/
|
||||||
|
|
||||||
|
|
||||||
|
###
|
||||||
|
# Une autre façon de router vers un autre proxy http/https upstream, si on veut que la VM fasse le cache
|
||||||
|
###
|
||||||
|
# Pour le proxy http/https (https sans cache) avec squid config
|
||||||
|
#echo "cache_peer $(cut -d':' -f1 <<< $PROXY) parent $(cut -d':' -f2 <<< $PROXY) 0 no-query default
|
||||||
|
#acl all src 0.0.0.0/0.0.0.0
|
||||||
|
#http_access allow all
|
||||||
|
#never_direct allow all" >> /etc/squid/squid.conf
|
||||||
|
#service squid restart
|
||||||
|
@ -66,6 +66,8 @@ proxy=$(/sbin/ip route | awk '/default/ { print $3 }' | head -1)
|
|||||||
sed -i -e "s/^proxy.*$/proxy=$proxy/" /usr/local/sbin/detect_proxy.sh
|
sed -i -e "s/^proxy.*$/proxy=$proxy/" /usr/local/sbin/detect_proxy.sh
|
||||||
#echo "export http_proxy=\"http://$proxy:3142\"" > /etc/profile.d/proxy.sh
|
#echo "export http_proxy=\"http://$proxy:3142\"" > /etc/profile.d/proxy.sh
|
||||||
#echo "export https_proxy=\"http://$proxy:3142\"" >> /etc/profile.d/proxy.sh
|
#echo "export https_proxy=\"http://$proxy:3142\"" >> /etc/profile.d/proxy.sh
|
||||||
|
|
||||||
|
# Proxy pour les environnements durant les dockerbuilds
|
||||||
mkdir /root/.docker
|
mkdir /root/.docker
|
||||||
echo "{
|
echo "{
|
||||||
\"proxies\":
|
\"proxies\":
|
||||||
@ -74,15 +76,18 @@ echo "{
|
|||||||
{
|
{
|
||||||
\"httpProxy\": \"http://$proxy:3142\",
|
\"httpProxy\": \"http://$proxy:3142\",
|
||||||
\"httpsProxy\": \"http://$proxy:3142\",
|
\"httpsProxy\": \"http://$proxy:3142\",
|
||||||
\"noProxy\": \"*.sns,127.0.0.0/8,100.64.0.0/10\"
|
\"noProxy\": \"*.sns,127.0.0.0/8,100.64.0.0/10,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16\"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}" > /root/.docker/config.json
|
}" > /root/.docker/config.json
|
||||||
echo "http_proxy=\"http://$proxy:3142\"
|
|
||||||
https_proxy=\"http://$proxy:3142\"
|
|
||||||
" >> /etc/default/docker
|
|
||||||
|
|
||||||
# On active btrfs+proxy pour docker
|
# Proxy pour les docker pull -> commenté car pas de cache avec dockerhub
|
||||||
|
# echo "http_proxy=\"http://$proxy:3142\"
|
||||||
|
# https_proxy=\"http://$proxy:3142\"
|
||||||
|
# no_proxy=\"*.sns,127.0.0.0/8,100.64.0.0/10,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16\"
|
||||||
|
# " >> /etc/default/docker
|
||||||
|
|
||||||
|
# On active btrfs+registry miroir pour docker
|
||||||
cat >> /etc/docker/daemon.json <<EOF
|
cat >> /etc/docker/daemon.json <<EOF
|
||||||
{ "storage-driver": "btrfs",
|
{ "storage-driver": "btrfs",
|
||||||
"registry-mirrors": ["http://$proxy:5000"] }
|
"registry-mirrors": ["http://$proxy:5000"] }
|
||||||
|
@ -228,3 +228,6 @@ reboot
|
|||||||
# ssl_bump server-first all
|
# ssl_bump server-first all
|
||||||
# ssl_bump stare all
|
# ssl_bump stare all
|
||||||
# sslproxy_cert_error deny all
|
# sslproxy_cert_error deny all
|
||||||
|
# refresh_pattern -i (/blobs/sha256) 1440 99% 10080 ignore-no-store ignore-private override-expire store-stale reload-into-ims
|
||||||
|
# refresh_pattern -i (/images/sha256) 1440 99% 10080 ignore-no-store ignore-private override-expire store-stale reload-into-ims
|
||||||
|
# refresh_pattern -i (/manifests/) 1440 99% 10080 ignore-no-store ignore-private override-expire store-stale reload-into-ims
|
||||||
|
Loading…
Reference in New Issue
Block a user