Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Gerenciando aplicativos de vários contêineres com o docker-compose

Gerenciando aplicativos de vários contêineres com o docker-compose

Data de Publicação: 12/12/2024
O QUE É?

O docker-compose permite definir e gerenciar um aplicativo de vários contêineres. A ferramenta simplifica a implantação da pilha de aplicativos usando um arquivo de definição fácil de usar.

POR QUÊ?

O artigo descreve como criar um aplicativo de vários contêineres usando o docker-compose.

DEDICAÇÃO

A leitura do artigo leva aproximadamente 20 minutos.

META

Você poderá criar a própria pilha de aplicativos com base em contêiner.

REQUISITOS

Imagens dos contêineres do aplicativo ou os arquivos de origem associados que são usados para criar o aplicativo.

1 Ferramentas envolvidas no gerenciamento de aplicativos de vários contêineres

O docker-compose é a ferramenta responsável pela criação do aplicativo de vários contêineres. Por padrão, ele usa o Docker, que não está presente no SLE Micro. Para ignorar o Docker e usar o Podman, o script podman-docker é usado. Portanto, você não precisa mudar os scripts existentes do Docker para o Podman. As seções a seguir apresentam descrições detalhadas das ferramentas.

1.1 Sobre o Podman

Podman é a abreviação da Ferramenta Pod Manager. Trata-se de um mecanismo de contêiner sem daemon que permite executar e implantar aplicativos usando contêineres e imagens de contêineres. O Podman oferece uma interface de linha de comando para gerenciar contêineres.

Como o Podman não tem daemon, ele permite a integração com o systemd. Isso possibilita o controle de contêineres por meio de unidades do systemd. Você pode criar essas unidades para contêineres existentes e também gerar unidades que podem iniciar contêineres, se eles não existirem no sistema. O Podman pode executar o systemd dentro de contêineres.

O Podman permite organizar os contêineres em pods. Os pods compartilham a mesma interface de rede e recursos. Um caso de uso comum para organizar um grupo de contêineres em um pod é um contêiner que executa um banco de dados e um contêiner com um cliente que acessa o banco de dados.

1.1.1 Instalação do Podman

Por padrão, o Podman está incluído no SLE Micro. No entanto, se o Podman estiver ausente, você poderá instalá-lo conforme descrito abaixo:

  1. Execute o comando:

    > sudo transactional-update pkg install podman*
  2. Reinicie o sistema para inicializá-lo no novo instantâneo.

1.2 Sobre o podman-docker

O podman-docker é um script bash que transforma qualquer comando docker executado em um comando podman correspondente com os mesmos argumentos inseridos. Portanto, você pode usar todos os scripts do Docker sem nenhuma modificação.

1.2.1 Instalação do podman-docker

Por padrão, o podman-docker não está instalado no SLE Micro. Para instalá-lo, faça o seguinte:

  1. Instale o pacote podman-docker executando:

    transactional-update pkg install podman-docker
  2. Reinicialize o sistema para alternar para o instantâneo mais recente.

1.3 Sobre o docker-compose

O docker-compose é uma ferramenta para gerenciar aplicativos de vários contêineres. Ele permite ter vários ambientes isolados em um único host, além de suportar o uso de variáveis entre os ambientes. Com o docker-compose, você pode recriar apenas os contêineres que foram modificados sem destruir todo o aplicativo de vários contêineres.

Importante
Importante: docker substituído pelo comando podman

No SLE Micro, o script podman-docker é usado para chamar o Podman sempre que o docker-compose é executado, pois o Docker não está presente no SLE Micro.

1.3.1 Instalando o docker-compose

Se o docker-compose não estiver presente em seu sistema, você poderá instalá-lo seguindo as etapas:

  1. Execute o comando:

    > sudo transactional-update pkg install docker-compose
  2. Após o término da instalação, reinicialize o sistema para inicializá-lo no novo instantâneo.

2 Criando um aplicativo de vários contêineres

Para criar um aplicativo de vários contêineres, faça o seguinte:

  1. Crie o arquivo de configuração compose.yml. Para obter informações detalhadas, consulte a Seção 2.1, “Criando o compose.yml.

  2. Prepare a estrutura de diretórios necessária. Recomendamos colocar o arquivo compose.yml na parte superior do diretório de trabalho.

  3. Se necessário, grave seus próprios arquivos de contêiner específicos aos serviços usados pelo aplicativo conteinerizado. Por exemplo, para implantar um aplicativo Go, crie um arquivo de contêiner para ele com a configuração e as dependências necessárias.

    Recomendamos criar um subdiretório por serviço no diretório de trabalho e colocar nele os arquivos específicos ao serviço.

  4. Implante o aplicativo de vários contêineres. Para obter informações detalhadas, consulte a Seção 2.2, “Implantando aplicativos de vários contêineres”.

2.1 Criando o compose.yml

Para criar o aplicativo de vários contêineres, você precisa criar um arquivo compose.yml localizado, de preferência, no diretório de trabalho. Ele pode ser um único arquivo, ou você pode adotar uma abordagem mais granular utilizando fragmentos e extensões. Vários arquivos do docker-compose também podem ser fundidos para definir o modelo do aplicativo completo.

O arquivo compose.yml define seu aplicativo. Você pode incluir os componentes a seguir.

service

O serviço é um componente de computação do aplicativo. Para obter detalhes sobre a definição, consulte a Seção 2.1.1, “Definição de serviços”.

networks

Você pode usar a declaração network para definir redes personalizadas e atribuir serviços específicos a elas. Para obter informações detalhadas, consulte a Seção 2.1.2, “Definição de redes”.

volumes

Um diretório gerenciado pelo mecanismo de contêiner em que os serviços armazenam e compartilham dados.

Variáveis de ambiente

Você também pode precisar usar uma lista de variáveis de ambiente que serão passadas para os seus serviços. Para obter os detalhes, consulte environment variables reference.

configs

Todos os arquivos de configuração exigidos pelos serviços devem ser declarados na seção configs. Para obter os detalhes, consulte configs definition.

2.1.1 Definição de serviços

Ao definir serviços, você precisa especificar a imagem de contêiner que será usada ou fornecer os arquivos de origem para criar o serviço com base neles.

Para criar o contêiner de serviços com base em uma imagem, use a declaração image:

services:
       db:
         image: database

O Podman verifica se o nome da imagem declarado no arquivo compose.yml está disponível no armazenamento de contêiner local. Se não estiver, o Podman extrairá a imagem de um dos registros configurados.

Para criar um serviço com base nos arquivos de origem, forneça-os e crie um arquivo de contêiner, ambos no mesmo diretório. No arquivo compose.yml, use a declaração build:

      services:
        db: 
          build: PATH_TO_SOURCE_FILES

Se um serviço específico precisar ser iniciado após outro, você poderá usar a declaração depends_on:

      services:
       db:
         image: database
         depends_on:
          system:
            condition: SERVICE_CONDITION

SERVICE_CONDITION pode ser um dos seguintes: service_started, service_healthy ou service_completed_successfully.

Para obter mais informações sobre a definição de services, consulte services specification.

2.1.2 Definição de redes

Por padrão, o docker-compose cria uma rede padrão, e cada contêiner na pilha de aplicativos é incluído na rede. A rede padrão não precisa ser declarada no arquivo compose.yml, pois o docker-compose a cria automaticamente.

Você também pode definir redes personalizadas e atribuir serviços específicos a elas. Por exemplo, para criar duas redes, network1 e network2, adicione o seguinte trecho:

networks:
  network1:
    # Use a custom driver
    driver: custom-driver-1
  network2:
    # Use a custom driver and name the network
    driver: custom-driver-2
    name: custom_network

Você também pode usar uma rede existente. Nesse caso, marque a rede como externa:

networks:
  network1:
    name: network1
    external: true

Para consultar a especificação completa de networks, consulte networks specification.

2.1.3 Exemplo de compose.yml

O exemplo a seguir de compose.yml define uma pilha de aplicativos que usa o sistema de monitoramento Prometheus e o sistema de análise Grafana.

services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - 9090:9090
    restart: unless-stopped
    volumes:
      - ./prometheus:/etc/prometheus
      - prom_data:/prometheus
  grafana:
    image: grafana/grafana
    container_name: grafana
    ports:
      - 3000:3000
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=grafana
    volumes:
      - ./grafana:/etc/grafana/provisioning/datasources
volumes:
  prom_data:

A estrutura do projeto neste exemplo deve ter a seguinte aparência:

.
├── compose.yaml
├── grafana
│   └── datasource.yml
├── prometheus
│   └── prometheus.yml
└── README.md

2.2 Implantando aplicativos de vários contêineres

Após criar a estrutura de diretórios e o arquivo compose.yml apropriados, você poderá implantar o aplicativo de vários contêineres:

  1. Verifique se o contêiner que você pretende executar já não existe:

    > podman ps --all

    Se necessário, remova o contêiner específico:

    > podman rm -fCONTAINER_ID
  2. Inicie o aplicativo de vários contêineres executando o seguinte comando no diretório em que o compose.yml está localizado:

    > docker compose up -d

    O docker-compose cria uma rede separada para o aplicativo de vários contêineres.

  3. Você pode verificar se os contêineres estão em execução e se as portas estão mapeadas listando os contêineres em execução:

    > podman ps

3 Gerenciamento de um aplicativo de vários contêineres

Após criar seu aplicativo de vários contêineres, você poderá usar o comando docker-compose para executar operações de gerenciamento. Veja abaixo a sintaxe do comando:

> docker compose[OPTIONS]COMMAND

Execute o comando no mesmo diretório em que está localizado o arquivo compose.yml do aplicativo de vários contêineres que você deseja gerenciar. Se preferir, insira um caminho para o arquivo compose.yml usando a opção -f, --file. Por exemplo, para sair e remover o aplicativo de vários contêineres:

> docker compose -f ./test/compose.yml down

Outros comandos úteis:

images

Listar todas as imagens usadas pelos contêineres no aplicativo de vários contêineres.

> docker compose images
pause

Pausar todos os contêineres.

> docker compose pause[SERVICE]
ps

Listar os contêineres no aplicativo de vários contêineres.

> docker compose ps
rm

Remover contêineres parados.

> docker compose rm
start/stop

Iniciar ou parar contêineres.

> docker compose stop[SERVICE]

Para obter uma lista completa de opções e comandos, execute:

> docker-compose --help