Gerenciando aplicativos de vários contêineres com o docker-compose
- 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:
Execute o comando:
>
sudo
transactional-update pkg install podman*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:
Instale o pacote
podman-docker
executando:transactional-update pkg install podman-docker
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.
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:
Execute o comando:
>
sudo
transactional-update pkg install docker-composeApó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:
Crie o arquivo de configuração
compose.yml
. Para obter informações detalhadas, consulte a Seção 2.1, “Criando ocompose.yml
”.Prepare a estrutura de diretórios necessária. Recomendamos colocar o arquivo
compose.yml
na parte superior do diretório de trabalho.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.
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, consulteconfigs
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:
Verifique se o contêiner que você pretende executar já não existe:
>
podman ps --allSe necessário, remova o contêiner específico:
>
podman rm -fCONTAINER_IDInicie o aplicativo de vários contêineres executando o seguinte comando no diretório em que o
compose.yml
está localizado:>
docker compose up -dO docker-compose cria uma rede separada para o aplicativo de vários contêineres.
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
4 Informações legais #
Copyright © 2006-2024 SUSE LLC e colaboradores. Todos os direitos reservados.
Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença GNU de Documentação Livre, Versão 1.2 ou (por sua opção) versão 1.3; com a Seção Invariante sendo estas informações de copyright e a licença. Uma cópia da versão 1.2 da licença está incluída na seção intitulada “GNU Free Documentation License” (Licença GNU de Documentação Livre).
Para ver as marcas registradas da SUSE, visite https://www.suse.com/company/legal/. Todas as marcas comerciais de terceiros pertencem a seus respectivos proprietários. Os símbolos de marca registrada (®, ™ etc.) indicam marcas registradas da SUSE e de suas afiliadas. Os asteriscos (*) indicam marcas registradas de terceiros.
Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. A SUSE LLC, suas afiliadas, os autores ou tradutores não serão responsáveis por possíveis erros nem pelas consequências resultantes de tais erros.