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