Dicas de docker.
Setar o timezone no container
docker run -e TZ=America/Fortaleza -d --name sonarqube -p 9001:9000 sonarqube:8.2-community
📋 Lista de timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Apagar todas as tags de uma imagem de um registry remoto
skopeo list-tags docker://registry.meudominio.com/app | \
jq -r '.Tags' | \
grep -P -o '".*?"' | \
grep -P -o '[^"]+' | \
xargs -I{} skopeo delete docker://registry.meudominio.com/app:{}
Apagar as imagens a partir de X dias (modo 1)
days="15" # Imagens com mais de X dias serão apagadas
docker image prune --all --force \
--filter=until=$((days * 24))h \
--filter=label=${IMAGE_TEMP_NAME}
Apagar as imagens a partir de X dias (modo 2)
days="15" # Imagens com mais de X dias serão apagadas
timeago=$(date --date "$days days ago" +'%s')
# Deleta a imagem pelo <image:tag> ao invés do ID, evita erros se a imagem estiver sendo referenciada
docker image ls --filter=reference="$IMAGE_TEMP_NAME" --format ":;" |
while IFS=";" read -r IMAGE CreatedAt; do
CreatedAt=$(echo "$CreatedAt" | rev | cut -c5- | rev | xargs -I{} date -d {} +%s);
if [ "$CreatedAt" -lt "$timeago" ]; then echo "$IMAGE"; docker image rm --force "$IMAGE"; fi;
done
SELinux e /var/run/docker.sock
Ao tentar executar qualquer comando docker com SELinux ativado e der erro de acesso ao /var/run/docker.sock
, primeiro verifique se desativando o SELinux se o erro some:
sudo setenforce 0
getenforce
Se o erro sumir, reative o SELinux:
sudo setenforce 1
getenforce
E execute:
cd /tmp
grep "docker.sock" /var/log/audit/audit.* | audit2allow -M dockersock
semodule -i dockersock.pp
Exportar e importar uma imagem
# exportar
docker save jenkins:2.46.1 | gzip -9 > /tmp/jenkins-2.46.1.docker-image.gz
# importar
zcat /tmp/jenkins-2.46.1.docker-image.gz | docker load
Para uma máquina remota via ssh:
# exportar e importar
docker save jenkins:2.46.1 | gzip | ssh user@IP 'zcat | docker load'
Alterar range padrão das redes internas
Algo que pode ser necessário é ter que mudar a faixa de rede padrão do docker por conflitar com outras redes, como uma VPN por exemplo.
Algo comum nesse sentido é alterar o bip
dentro do daemon.json
do docker. Porém essa estratégia falha ao criar novas interfaces, pois o docker irá usar um pool de endereços padrões.
Então para modificar esse pool dentro de /etc/docker/daemon.json
altere:
{
"default-address-pools": [
{
"base": "172.18.0.1/16",
"size": 24
}
]
}
Agora basta reiniciar o docker:
sudo service docker restart
Backup de volumes (Opção 1)
# listar volumes
docker volume ls
# backup de um volume para um novo volume
VOLUME_NAME="sonarqube_logs" ; \
docker run --rm \
-v $VOLUME_NAME:/volume_origem:ro \
-v bkp_$VOLUME_NAME:/volume_destino \
alpine \
cp -ra /volume_origem /volume_destino
Backup de volumes (Opção 2)
# backup para o sistema de arquivos
VOLUME_NAME="sonarqube_logs" ; \
docker run --rm \
-v $VOLUME_NAME:/volume_origem:ro \
-v /var/backup/volumes-sonar:/volume_destino \
alpine \
tar -cf /volume_destino/$VOLUME_NAME.tar -C /volume_origem .
# restore
VOLUME_NAME="sonarqube_logs" ; \
docker run --rm \
-v $VOLUME_NAME:/volume_destino \
-v /var/backup/volumes-sonar:/volume_origem \
alpine \
tar -xf /volume_origem/$VOLUME_NAME.tar -C /volume_destino