Atualize automaticamente um contêiner do Docker em execução e limpe a versão antiga dele!

O ISSU?

Temos um contêiner docker rodando com nosso aplicativo e temos uma nova versão pronta que queremos implantar e depois disso queremos poder deletar a versão antiga para economizar espaço, mas desde quando o docker está rodando e nós paramos, não podemos apagá-lo sem reiniciar o serviço docker antes de automatizar um pouco desta parte e compartilhá-lo, pois é útil para qualquer um que execute o docker seriamente em produção ou desenvolvimento de contagem

Pequenas coisas fora dos DirektSPEED Docker Managers – script de implantação:

Atualizar um contêiner Docker já em execução

Save ID of Current running Dockercontainer Version into a var
-> Build new container
-> Tag new container as an image and name it
-> Stop old running container using its IDS
-> Restart docker service
-> Run new container in daemon-mode based on newly built image
-> Delete old stopped containers
-> Delete old un-tagged images

Aqui está o script bash completo que faz o acima:

#!/usr/bin/env bash
set -e

echo
'>>> Get old container id'
CID
=$(sudo docker ps | grep "project" | awk '{print $1}')
echo $CID


echo
'>>> Building new image'
# analyse the log to find out if build passed (see https://github.com/dotcloud/docker/issues/1875)
sudo docker build
./deploy | tee /tmp/docker_build_result.log
RESULT
=$(cat /tmp/docker_build_result.log | tail -n 1)
if [[ "$RESULT" != *Successfully* ]];
then
exit -1
fi

echo
'>>> Tagging new image'
NEW
=$(sudo docker ps -a -q | head -n 1)
sudo docker commit $NEW project



echo
'>>> Stopping old container'
if [ "$CID" != "" ];
then
sudo docker stop $CID

fi


echo
'>>> Restarting docker'
sudo service docker restart

sleep
5


echo
'>>> Starting new container'
sudo docker run
-p 3000:80 -d project /usr/bin/supervisord --nodaemon


echo
'>>> Cleaning up containers'
sudo docker ps
-a | grep "Exit" | awk '{print $1}' | while read -r id ; do
sudo docker rm $id

done


echo
'>>> Cleaning up images'
sudo docker images
| grep "^<none>" | head -n 1 | awk 'BEGIN { FS = "[ t]+" } { print $3 }' | while read -r id ; do
sudo docker rmi $id

done