Docker Compose
Ambiente limpo:
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZEEdição do arquivo compose.yaml:
$ vim compose.yamlservices:
web:
image: marcelodpbarbieri/simulador-caos:v2
ports:
- 8080:3000
restart: always
healthcheck:
disable: true
cpuset: "0"
memswap_limit: 512M
deploy:
resources:
limits:
cpus: "0.5"
memory: 512MExplicação do comando
O trecho a seguir refere-se à definição de um serviço chamado web em um arquivo docker-compose.yaml. Vamos analisar cada parte em detalhes, explicando seu propósito e o impacto que as opções configuradas têm sobre a execução do container.
1. services
A chave services define os serviços que serão executados pelo docker-compose. Cada serviço é um container que será executado de acordo com a configuração definida no arquivo. No caso, o serviço web será baseado na imagem marcelodpbarbieri/simulador-caos:v2.
2. image: marcelodpbarbieri/simulador-caos:v2
A opção image especifica a imagem Docker que será usada para criar o container. No exemplo, a imagem marcelodpbarbieri/simulador-caos:v2 será baixada do Docker Hub (ou de um registro privado, se configurado) e usada para o serviço web. A tag v2 indica uma versão específica da imagem.
Exemplo de execução:
O container usará a versão
v2da imagemsimulador-caos, publicada no repositório demarcelodpbarbieri.
3. ports: - 8080:3000
Aqui, a opção ports define o mapeamento de portas entre o host e o container. A sintaxe 8080:3000 significa que a porta 3000 do container será mapeada para a porta 8080 no host.
Entrada:
8080:3000
Comportamento:
O serviço estará acessível na porta
8080do host, mas dentro do container ele rodará na porta3000.
Uso comum: Esse mapeamento permite que você exponha a aplicação dentro do container para o mundo externo via a porta 8080 do host.
4. restart: always
A política de reinício restart: always define que o container será reiniciado automaticamente se ele parar, independentemente da razão. Isso inclui falhas inesperadas e paradas manuais.
Comportamento:
O container será reiniciado sempre que for parado ou se houver falha, garantindo que ele permaneça ativo.
Uso comum: Esse comportamento é importante em ambientes de produção para garantir alta disponibilidade de serviços.
5. healthcheck: disable: true
A chave healthcheck normalmente é usada para verificar o estado de saúde do container, executando periodicamente comandos que determinam se o serviço está funcionando corretamente. No entanto, disable: true desativa essa verificação.
Comportamento:
O Docker não realizará nenhuma verificação de saúde do container, o que pode ser útil quando a aplicação tem seu próprio mecanismo de verificação ou não precisa de monitoramento constante.
Uso comum: Essa configuração é útil quando se quer evitar a sobrecarga de health checks, especialmente se o container já possui outras formas de monitoramento.
6. cpuset: "0"
O parâmetro cpuset (equivalente a cpuset-cpus na linha de comando Docker) define em quais CPUs o container pode ser executado. No exemplo, cpu-set: "0" limita a execução do container ao primeiro núcleo de CPU (núcleo 0).
Entrada:
cpuset: "0"
Comportamento:
O container só poderá utilizar o núcleo de CPU 0, o que isola sua carga de processamento para um núcleo específico.
Uso comum: Esse recurso é usado em ambientes onde se deseja controlar quais CPUs estão alocadas para determinados containers, evitando que eles interfiram com outros processos ou containers.
7. memswap_limit: 512M
Este parâmetro define o limite combinado de memória física (RAM) e swap que o container pode usar. O valor 512M significa que o container poderá usar até 512MB de RAM mais swap, se necessário.
Entrada:
memswap_limit: 512M
Comportamento:
O container terá um limite de 512MB de memória e swap combinados, o que ajuda a evitar que ele consuma muita memória do sistema.
Uso comum: Limitar o uso de memória é útil em sistemas com recursos limitados ou onde é necessário evitar que um único container cause esgotamento de memória no host.
8. deploy: resources: limits: cpus: "0.5" memory: 512M
A seção deploy é usada para definir configurações de deploy, particularmente no Docker Swarm, mas também pode ser aplicada localmente para limitar o uso de recursos de um container.
cpus: "0.5":Define o limite de uso de CPU do container. Nesse exemplo,
cpus: "0.5"limita o container a usar até 50% de uma CPU.
memory: 512M:Define que o container pode usar no máximo 512MB de RAM.
Exemplo:
Entrada:
cpus: "0.5"memory: 512M
Comportamento:
O container só poderá usar 50% de uma CPU e terá seu uso de memória limitado a 512MB.
Uso comum: Definir limites de recursos é fundamental em ambientes com múltiplos containers, garantindo que nenhum container utilize mais do que sua cota de CPU e memória, preservando a estabilidade do sistema como um todo.
Considerações Gerais
Este arquivo docker-compose.yaml configura um serviço com limites de CPU e memória cuidadosamente definidos, além de uma política de reinício para garantir alta disponibilidade. Os parâmetros de CPU e memória são usados para controlar o impacto que esse serviço terá no sistema host, garantindo que ele não consuma mais recursos do que o alocado.
Esse tipo de configuração é ideal em ambientes onde:
O uso de recursos precisa ser controlado rigidamente.
A aplicação precisa estar disponível continuamente, sem interrupções.
O monitoramento de saúde é desativado por motivos de otimização ou simplicidade, e outros mecanismos de monitoramento são usados.
Em resumo, essa configuração garante que o serviço web esteja isolado em termos de CPU e memória, com um comportamento previsível e controlado.
Subida do Docker Compose:
Container em execução:

Monitoramento:

Alto Consumo de CPU e Memória:


Last updated