Docker
  • Introdução a Containeres e Docker
    • Introdução
    • O que é um container e suas vantanges
    • VM versus Container
    • Como funcionam os containers
    • Linux
    • Container sem Docker
      • cgroup
      • cpu.max
    • LxC
    • LxD
    • Containers versus Imagens
    • Arquitetura do Docker
    • Arquitetura do Docker mais a fundo
    • Projetos Open Source
  • Instalação do Docker
    • Linux
    • Windows
      • Docker Desktop
      • Rancher Desktop
      • WSL
    • Mac
    • Visual Studio Code
  • Primeiros Passos com Docker
    • Criação e listagem básica de um container
    • Interagindo com o container
    • Executando containers continuamente
      • nginx
      • docker container run
      • docker container run nginx
      • docker container run -d nginx
      • docker container exec
    • Como usar publish de porta
      • docker container stop
      • docker container start
      • docker container rm
      • docker container rm -f $(docker container ls -qa)
    • Containers e variáveis de ambiente
      • docker container run -e
  • Desafio
    • Desafio 01 - Banco de Dados Postgresql
    • Desafio 02 - Banco de Dados MySQL
    • Desafio 03 - Banco de Dados MongoDB
  • Executando a sua primeira aplicação em containers
    • Introdução
    • Preparando o container para a aplicação
    • Executando a aplicação
      • docker container cp
  • Primeiros Passos com Docker Images
    • Introdução
    • OverlayFS na Prática
    • Copy-on-Write
    • Formas de criar uma imagem Docker
    • Como funciona o Docker Commit
    • Docker Commit na Prática
      • docker commit
    • Entendendo melhor a sua imagem
      • docker image history
      • docker image inspect
    • Entrando mais a fundo na imagem
    • Como usar a imagem Docker no modo raiz
  • Avançando em imagens Docker com Dockerfile
    • O que é Dockerfile
    • Primeira Imagem com Dockerfile
      • docker image build
    • Como funciona a construção com Dockerfile
    • Possibilidades com Dockerfile
    • FROM
    • RUN
    • WORKDIR
    • COPY
    • ADD
    • LABEL
    • ENV
    • VOLUME
    • ARG
    • EXPOSE
    • USER
    • ENTRYPOINT
    • CMD
    • ENTRYPOINT versus CMD
    • Principais comandos com imagem
    • Imagem da aplicação com Dockerfile
    • Comparando Docker Commit com Dockerfile
  • Docker Registry
    • Introdução
    • Docker Hub
    • Sua imagem com o nome certo
    • Renomear imagens com Docker Tag
      • docker image tag
    • Enviando a sua primeira imagem para o Docker Hub
      • docker image push
      • docker image pull
  • Algumas boas práticas para construção de imagem
    • Um processo por container
    • Usar imagens confiáveis
    • Otimizar sempre a sua imagem
    • Uso inteligente das camadas
    • Dockerignore
  • Multistage Build
    • Introdução
    • Multistage build na prática
    • Target para fazer o build
      • docker image build --target
    • Imagem externa no Multistage build
    • Usar um estágio de build como base
  • Docker Volume
    • Introdução
      • docker volume
    • Bind Mount
    • Particularidades do Bind Mount
    • Bind Mount no Windows
    • Exemplo com Bind Mount
    • Docker Volume
      • docker volume create
      • docker volume inspect
      • docker volume ls
      • docker volume prune
      • docker volume rm
    • Onde ficam os arquivos do Docker volume?
    • Usando o volume no Dockerfile
    • Como fazer backup de um Docker Volume
    • Exemplo com Docker Volume
    • Storage tmpfs
    • Como criar algo funcional com o que aprendemos
  • Network
    • Introdução
    • Componentes do Docker Network
    • Rede Bridge na prática
      • docker network
      • docker network create
      • docker network inspect
      • docker network ls
      • docker network prune
      • docker network rm
    • Criando a sua rede bridge
      • docker network connect
      • docker network disconnect
    • Como funciona a rede bridge por dentro
    • Rede Host na prática
    • Rede none da prática
    • Como adicionar domínios no seu container
  • Aplicação 100% no Docker
    • Introdução
    • Criação da Imagem e Envio para o Docker Hub
    • Criação do Docker Network
    • Container do PostgreSQL
    • Container da Aplicação Web
    • Atualização da aplicação
  • Docker Compose
    • Introdução
      • docker compose
    • A evolução do docker compose
    • Criação básica de um Docker Compose
      • docker compose attach
      • docker compose build
      • docker compose config
      • docker compose cp
      • docker compose create
      • docker compose down
      • docker compose events
      • docker compose exec
      • docker compose images
      • docker compose kill
      • docker compose logs
      • docker compose ls
      • docker compose pause
      • docker compose port
      • docker compose ps
      • docker compose pull
      • docker compose push
      • docker compose restart
      • docker compose rm
      • docker compose run
      • docker compose scale
      • docker compose start
      • docker compose stats
      • docker compose stop
      • docker compose top
      • docker compose unpause
      • docker compose up
      • docker compose version
      • docker compose wait
      • docker compose watch
    • Variáveis de Ambiente
    • Volume Bind Mount
    • Docker Volume
    • Docker Network - Bridge
    • Docker Network - Host Driver e Add Host
    • Ordenando a execução dos containers
    • Compose com build de imagem
    • Como Parametrizar o Compose com Variáveis de Ambiente
    • Múltiplos Composes
    • Extends
    • Merge
    • Include
    • Profiles
    • Comandos importantes do Docker Compose
  • Troubleshooting
    • Introdução
    • Docker Info
    • Docker Events
    • Docker Logs
    • Docker Inspect
    • Docker Top
    • Docker Stats
    • Docker Exec
  • Resiliência e Gerenciamento de Recursos
    • Introdução
    • Docker Restart
      • Introdução
      • on-failure
      • unless-stopped
      • always
      • Docker Compose
    • Healthcheck
      • Introdução
      • Linha de Comando
      • Docker Compose
      • Direto na Imagem
    • Gerenciamento de Recurso
      • CPU
        • Como Gerenciar CPU
        • Prática
      • Memória
        • Como Gerenciar Memória
        • Prática
      • Docker Compose
  • Fazendo um ambiente mais seguro
    • Introdução
    • Docker Scout
      • Introdução
      • Verificação Simples de Imagem
      • Como adicionar um repositório
      • Primeira melhoria na imagem
  • BUSCA RÁPIDA
    • Referências
    • Comandos
      • docker commit
      • docker compose
      • docker container
      • docker image
      • docker network
      • docker volume
    • Dockerfile
Powered by GitBook
On this page
  • Visão Geral do Docker Compose
  • Funcionamento do docker restart com Docker Compose
  • 1. Reiniciar Containers Individuais
  • 2. Reiniciar Todos os Serviços com Docker Compose
  • 3. Reiniciar Serviços Específicos com Docker Compose
  • 4. Timeout para Reiniciar Containers
  • Relação com as Políticas de Reinicialização
  • Exemplo Completo
  • Comandos:
  • Conclusão
  • Laboratório
  1. Resiliência e Gerenciamento de Recursos
  2. Docker Restart

Docker Compose

O comando docker restart também pode ser usado em ambientes com o Docker Compose para reiniciar serviços de containers. No entanto, o funcionamento do reinício dos containers com Docker Compose tem algumas particularidades em comparação com o uso do Docker isoladamente. Vamos entender como isso funciona.

Visão Geral do Docker Compose

O Docker Compose é uma ferramenta que permite definir e executar múltiplos containers com base em um arquivo YAML (docker-compose.yml ou compose.yaml). Com ele, você pode configurar uma stack de serviços e gerenciá-los facilmente com comandos do Docker Compose.

Funcionamento do docker restart com Docker Compose

O comando docker restart pode ser usado tanto diretamente no nível dos containers, quanto no nível do Docker Compose. Aqui está o detalhamento de como ele funciona em ambos os casos:

1. Reiniciar Containers Individuais

Se você deseja reiniciar um container específico que faz parte de um serviço gerenciado pelo Docker Compose, pode usar o comando docker restart diretamente no nome do container. No entanto, é importante observar que o nome do container é gerado automaticamente pelo Docker Compose com base no nome do projeto e no serviço. Por exemplo:

docker restart <project_name>_<service_name>_1

Suponha que você tenha um projeto chamado meu-projeto e um serviço definido como web no compose.yaml. O nome completo do container seria algo como meu-projeto_web_1. Assim, para reiniciar o container desse serviço específico, você poderia executar:

docker restart meu-projeto_web_1

Esse comando reinicia apenas o container específico, sem interferir nos outros containers do projeto.

2. Reiniciar Todos os Serviços com Docker Compose

Se você deseja reiniciar todos os serviços definidos no compose.yaml, pode usar o comando docker-compose restart (ou docker compose restart, na versão mais recente do Compose). Isso reinicia todos os containers definidos no arquivo de composição, respeitando as dependências de serviço, mas sem recriar os containers.

Exemplo:

docker compose restart

Ou, se estiver usando o antigo docker-compose:

docker-compose restart

Esse comando é especialmente útil para reiniciar toda a stack de containers sem precisar derrubá-los e recriá-los. Ele simplesmente para e reinicia cada container, mantendo a configuração original e quaisquer volumes persistentes.

3. Reiniciar Serviços Específicos com Docker Compose

Você também pode reiniciar serviços específicos em vez de todos os containers do projeto. Para isso, basta especificar o nome do serviço:

docker compose restart <service_name>

Por exemplo, para reiniciar apenas o serviço web:

docker compose restart web

Esse comando para e reinicia o container responsável pelo serviço web sem afetar os outros serviços.

4. Timeout para Reiniciar Containers

Ao usar o comando docker restart com containers ou serviços, você pode especificar um timeout (tempo de espera) para que o Docker aguarde que o container finalize suas atividades antes de forçar a parada. Por padrão, o Docker aguarda 10 segundos antes de enviar o sinal SIGKILL, mas você pode ajustar esse tempo com a flag -t (timeout).

Por exemplo, para dar ao serviço 20 segundos para encerrar:

docker compose restart -t 20 web

Relação com as Políticas de Reinicialização

Se os serviços definidos no docker-compose.yml estão configurados com políticas de reinicialização, como restart: always, on-failure ou unless-stopped, o comando restart interage com essas políticas. Aqui estão alguns pontos importantes:

  1. restart: always:

    • O serviço será reiniciado automaticamente se falhar ou após uma reinicialização do Docker daemon. Usando docker compose restart, o container será interrompido e reiniciado normalmente, sem conflito com a política.

  2. restart: on-failure:

    • O container será reiniciado automaticamente apenas se falhar (exit code diferente de zero). O comando docker compose restart interrompe o container de forma controlada e, portanto, não o coloca em loop de reinicialização.

  3. restart: unless-stopped:

    • Semelhante ao always, mas se o container for manualmente parado, ele não será reiniciado após uma reinicialização do Docker daemon. O comando docker compose restart reinicia o container independentemente.

Exemplo Completo

Vamos ver um exemplo de como usar docker restart e docker compose restart em um projeto Docker Compose:

Exemplo de compose.yaml

version: "3"
services:
  web:
    image: nginx
    ports:
      - "80:80"
    restart: always

  db:
    image: postgres
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    restart: on-failure

Neste exemplo, temos dois serviços: web (Nginx) e db (PostgreSQL).

  • O serviço web está configurado para ser reiniciado sempre, independentemente do motivo da parada.

  • O serviço db será reiniciado apenas se falhar.

Comandos:

  • Reiniciar todos os serviços:

    docker compose restart

    Isso reinicia tanto o serviço web quanto o db.

  • Reiniciar apenas o serviço web:

    docker compose restart web

    Isso reinicia somente o serviço web, enquanto o serviço db continua em execução.

  • Reiniciar com timeout de 20 segundos:

    docker compose restart -t 20 web

    O Docker aguarda até 20 segundos antes de forçar o encerramento do container web.

Conclusão

O comando docker restart e sua versão com Docker Compose permitem reiniciar containers de maneira controlada, seja no nível de serviços individuais ou de toda a stack. Ao usar docker compose restart, você pode parar e reiniciar containers sem recriá-los, mantendo as definições e estados originais. Essa funcionalidade é extremamente útil para atualizar ou reiniciar serviços sem afetar todo o ambiente.

Laboratório

Criar o arquivo compose.yaml:

$ touch compose.yaml
$ vim compose.yaml
services:
  web:
    image: marcelodpbarbieri/simulador-caos:v1
    ports:
      - 8080:3000
    restart: always
PreviousalwaysNextHealthcheck

Last updated 8 months ago