Docker

Guia para iniciantes no Docker Compose

Guia para iniciantes no Docker Compose
Docker Compose é uma das ferramentas mais úteis para desenvolvedores de software e administradores de sistema. Muitos trabalhos exigem alguém com conhecimento dessa tecnologia, então Docker e Docker Compose estão na moda no espaço DevOps. Sem dúvida, saber como usar essas tecnologias beneficiará sua carreira em TI.

Se você é um iniciante no Docker Compose, mas tem algum conhecimento do Docker, este artigo é para você. Você aprenderá sobre:

Antes de mergulhar nas partes interessantes deste artigo, um pouco de fundo sobre a tecnologia deve ser incrível.

A conteinerização se tornou uma parte fundamental da infraestrutura de software, e isso se aplica a projetos de grande, médio ou pequeno porte. Embora os contêineres não sejam novos, o Docker os tornou populares. Com os contêineres, os problemas de dependência tornaram-se uma coisa do passado. Os contêineres também desempenham um papel importante em tornar a arquitetura de microsserviços muito eficaz. Os aplicativos de software são feitos de serviços menores, por isso é fácil ter esses serviços em contêineres e eles se comunicam.

O problema de fazer isso é que haverá tantos contêineres em execução. De forma que gerenciá-los se torna complexo. Isso cria a necessidade de uma ferramenta que ajude a executar vários contêineres, o que o Docker Compose faz. No final do artigo, você entenderá os conceitos básicos do Docker Compose e também será capaz de usá-lo.

O que é Docker Compose?

Sem toda a complexidade, o Docker Compose é uma ferramenta que permite gerenciar vários contêineres Docker. Lembre-se de micro-serviços? O conceito de dividir um aplicativo da web em diferentes serviços? Bem, esses serviços serão executados em contêineres individuais que precisam ser gerenciados.

Imagine que um aplicativo da web tenha alguns destes serviços:

Seguindo uma arquitetura semelhante a microsserviço, esses serviços serão divididos e executados em contêineres separados. O Docker Compose facilita o gerenciamento de todos esses contêineres, em vez de gerenciá-los individualmente. É importante observar que o Docker Compose não cria imagens do Docker explicitamente. O trabalho de construção de imagens é feito pelo Docker por meio do Dockerfile.

Comparações populares

É comum ter muitas soluções para um problema. O Docker Compose resolve esse problema de gerenciamento de vários contêineres. Como resultado, muitas vezes há comparações com outras soluções. Você deve notar que a maioria dessas comparações são as erradas. Embora muitas vezes não sejam válidos, é melhor você aprender sobre eles, pois ajuda a entender melhor o Docker Compose.

As duas comparações a serem discutidas são:

Docker Compose x Kubernetes

O Kubernetes é frequentemente comparado ao Docker Compose. Mas, as semelhanças em ambas as ferramentas são mínimas, com grandes diferenças. Essas tecnologias não estão no mesmo nível ou escala. Portanto, comparar as duas ferramentas é totalmente errado.

Kubernetes conhecido popularmente como k8s é uma ferramenta de código aberto que pode ser usada para automatizar contêineres (não restrito ao Docker). Com o k8s, você pode implantar e administrar contêineres, garantindo que eles escalem em diferentes cargas. O Kubernetes garante que os contêineres sejam tolerantes a falhas e funcionem de maneira ideal, fazendo com que eles se autocorrigam, o que você não obterá no Docker Compose.

Kubernetes é uma ferramenta mais poderosa. É mais adequado para administrar contêineres para aplicações em larga escala na produção.

Docker Compose vs Docker Swarm

O Docker Compose também é frequentemente comparado ao Docker Swarm e é tão errado quanto a comparação do Kubernetes. Em vez disso, o Docker Swarm deve ser comparado ao Kubernetes.

O Docker Swarm é uma ferramenta de código aberto que permite realizar a orquestração de contêineres da mesma forma que faria com o Kubernetes. Ambos têm seus prós e contras, mas esse não é o tema da discussão. Você ficará bem sabendo que ambos são semelhantes e nenhum é uma alternativa ao Docker Compose.

Instalando Docker Compose

O Docker Compose é uma ferramenta oficial do Docker, mas não vem com a instalação do Docker. Então, você precisa instalá-lo como um pacote separado. O processo de instalação do Docker Compose para Windows e Mac está disponível no site oficial.

Para instalar o Docker Compose no Ubuntu, você pode usar o seguinte comando:

sudo apt-get install docker-compose

Para instalar o Docker Compose em outras distros Linux, você pode usar curl. Basta executar os seguintes comandos:

sudo curl -L
https: // github.com / docker / compose / releases / download / 1.18.0 / docker-compose-'uname
-s '-' uname -m '-o / usr / local / bin / docker-compose

Então:

sudo chmod + x / usr / local / bin / docker-compose

O primeiro comando baixa a versão mais recente do Docker Compose para o diretório dedicado para pacotes. O segundo define as permissões do arquivo, tornando-o executável.

O Docker-Compose.Arquivo yml

Não será muito errado dizer que um arquivo Docker Compose está para o Docker Compose, o que um Dockerfile está para o Docker. Dentro do arquivo Docker Compose, encontram-se todas as instruções que o Docker Compose segue ao gerenciar os contêineres. Aqui, você define os serviços que acabam sendo contêineres. Você também define as redes e os volumes dos quais os serviços dependem.

O arquivo Docker Compose usa a sintaxe YAML e você deve salvá-lo como docker-compose.yml. Você pode ter serviços de back-end, front-end, banco de dados e filas de mensagens em um aplicativo da web. Esses serviços precisarão de dependências específicas. Dependências como redes, portas, armazenamento para operação ideal. Tudo o que é necessário para todo o aplicativo será definido no arquivo Docker Compose.

Você precisa de um conhecimento básico da sintaxe YAML para escrever seu arquivo de composição. Se você não estiver familiarizado com isso, deve levar menos de uma hora para entender. Haverá muitos pares de valores-chave ou diretivas em seu arquivo. Os de nível superior são:

No entanto, apenas a versão e os serviços serão discutidos, pois você pode definir os outros dois na diretiva de serviços.

Versão

Ao escrever seu arquivo, você definirá a versão primeiro. No momento em que este artigo foi escrito, o Docker Compose só tem as versões 1, 2 e 3. Não é surpreendente que seja a versão recomendada para usar, pois tem certas diferenças das versões anteriores.

Você pode especificar a versão a ser usada para Docker Compose no arquivo, conforme mostrado abaixo:

Serviços

A chave de serviço é indiscutivelmente a chave mais importante em um arquivo Docker Compose. Aqui, você especifica os contêineres que deseja criar. Existem muitas opções e toneladas de combinações para configurar contêineres nesta seção do arquivo. Estas são algumas opções que você pode definir na chave de serviços:

No restante desta seção, você aprenderá como cada uma dessas opções afeta os contêineres.

Imagem

Esta opção define qual imagem como serviço usa. Ele usa a mesma convenção que você usa ao puxar uma imagem do Dockerhub em um Dockerfile. Aqui está um exemplo:

imagem: postgres: mais recente

No entanto, não há restrição ao uso de arquivos Dockerhub sozinhos. Você também pode criar imagens de sua máquina por meio do arquivo Docker Compose, usando um Dockerfile. Você pode usar as diretivas "build", "context" e "dockerfile" para fazer isso.

Aqui está um exemplo:

construir:
contexto: .
dockerfile: Dockerfile

“Contexto” deve conter o caminho para o diretório com o Dockerfile. Então, “dockerfile” contém o nome do Dockerfile a ser usado. É convencional sempre nomear seus Dockerfiles como “Dockerfile”, mas isso dá a oportunidade de usar algo diferente. Você deve observar que esta não é a única maneira de usar uma imagem por meio de um Dockerfile.

Container_name

Docker atribui nomes aleatórios a contêineres. Mas você pode desejar ter nomes personalizados para os contêineres. Com a chave “container_name”, você pode dar nomes específicos a contêineres, em vez de nomes gerados aleatoriamente por Dockers.

Aqui está um exemplo:

container_name: linuxhint-app

No entanto, há uma coisa com a qual você deve ter cuidado: não dê o mesmo nome a vários serviços. Os nomes dos contêineres devem ser exclusivos; fazer isso fará com que os serviços falhem.

Reiniciar

A infraestrutura de software está fadada ao fracasso. Com o conhecimento disso, é mais fácil planejar a recuperação desta falha. Há muitos motivos para a falha de um contêiner, então a chave de reinicialização diz ao contêiner para ativar ou não. Você tem as seguintes opções, não, sempre, em caso de falha e a menos que seja interrompido. Essas opções implicam que um contêiner nunca será reiniciado, sempre reiniciará, apenas reiniciará em caso de falha ou apenas quando for interrompido.

Aqui está um exemplo:

reiniciar: sempre

Depende de

Serviços executados isoladamente. Mas, na prática, os serviços não podem fazer muito isoladamente. Precisa haver uma dependência de outros serviços. Por exemplo, o serviço de back-end de um aplicativo da web dependerá de bancos de dados, serviços de cache, etc. Na chave “depends_on”, você pode adicionar as dependências.

Aqui está um exemplo:

depende de:
- db

Isso significa que o Docker Compose iniciará esses serviços antes do atual. No entanto, isso não garante que esses serviços estejam prontos para uso. A única garantia é que os contêineres começarão.

Meio Ambiente

Os aplicativos dependem de certas variáveis. Para segurança e facilidade de uso, você os extrai do código e os configura como variáveis ​​de ambiente. Exemplos de tais variáveis ​​são chaves de API, senhas e assim por diante. Esses são comuns em aplicativos da web. Observe que esta chave só funciona se não houver uma diretiva de "construção" nesse serviço. Portanto, crie a imagem com antecedência.

Veja isso:

meio Ambiente:
API-KEY: 'the-api-key'
CONFIG: 'desenvolvimento'
SESSION_SECRET: 'the-secret'

Se você pretende usar a diretiva "build" independentemente, você precisará definir as variáveis ​​de ambiente em uma diretiva "args". A diretiva “args” é uma sub-diretiva de “build”.

Aqui está um exemplo:

construir:
contexto: .
args:
api-key: 'the-api-key'
config: 'desenvolvimento'
session_secret: 'the-secret'

Ports

Nenhum contêiner funciona de forma isolada, apesar de funcionar separadamente dos outros. Para fornecer um link para se comunicar com o “mundo externo”, você precisa mapear as portas. Você mapeia a porta do contêiner do Docker para a porta do host real. No Docker, você pode ter encontrado o argumento “-p” que é usado para mapear portas. A diretiva de portas funciona de forma semelhante ao argumento “-p”.

portas:
- "5000: 8000"

Volumes

Os contêineres do Docker não têm meios de armazenar dados de forma persistente, então eles perdem dados ao reiniciar. Com volumes, você pode contornar isso. Volumes torna possível criar um armazenamento de dados persistente. Ele faz isso montando um diretório do host docker no diretório do contêiner docker. Você também pode configurar volumes como serviços de nível superior.

Aqui está um exemplo:

volumes:
- host-dir: / test / diretório

Existem muitas opções disponíveis ao configurar os volumes, você pode verificá-los.

Redes

As redes também podem ser criadas em serviços. Com a chave de rede, você pode configurar a rede para serviços individuais. Aqui, você pode configurar o driver que a rede usa, se permitir IPv6, etc. Você pode configurar redes como serviços também, assim como volumes.

Aqui está um exemplo:

redes:
- padrão

Existem muitas opções ao configurar redes, você pode verificá-las.

Ponto de entrada

Quando você inicia um contêiner, geralmente deve executar certos comandos. Por exemplo, se o serviço for um aplicativo da web, você deve iniciar o servidor. A chave do ponto de entrada permite que você faça isso. O Entrypoint funciona como ENTRYPOINT no Dockerfile. A única diferença neste caso é que tudo o que você definir aqui substitui as configurações ENTRYPOINT no Dockerfile.ponto de entrada: flask run

Aqui está um exemplo:

ponto de entrada: flask run

Comandos do Docker Compose

Depois de criar um arquivo Docker-Compose, você precisa executar certos comandos para fazer o Compose funcionar. Nesta seção, você aprenderá sobre alguns dos principais comandos do Docker Compose. Eles são:

Docker-compose up

Este comando Docker-compose ajuda a construir a imagem, em seguida, cria e inicia contêineres Docker. Os contêineres são dos serviços especificados no arquivo de composição. Se os contêineres já estiverem em execução e você executar docker-compose up, ele recria o contêiner. O comando é:

docker-compose up

Docker-compose start

Este comando Docker-compose inicia contêineres Docker, mas não cria imagens ou cria contêineres. Portanto, ele só inicia contêineres se eles tiverem sido criados antes.

Parada de composição do Docker

Freqüentemente, você precisará interromper os contêineres depois de criá-los e iniciá-los. É aqui que o comando de parada do Docker-compose é útil. Este comando basicamente interrompe os serviços em execução, mas os contêineres de configuração e as redes permanecem intactos.
O comando é:

parada docker-compose

Docker-compose down

O comando Docker-compose down também interrompe os contêineres do Docker como o comando stop. Mas vai além. Docker-compose down, não apenas para os contêineres, mas também os remove. As redes, volumes e imagens reais do Docker também podem ser removidos se você usar certos argumentos. O comando é:

docker-compose down

Se você pretende remover volumes, especifique adicionando -volumes. Por exemplo:

docker-compose down --volumes

Se você pretende remover imagens, especifique adicionando -rmi tudo ou -rmi local. Por exemplo:

docker-compose down --rmi all
docker-compose down --rmi local

Onde tudo faz com que o Docker Compose remova todas as imagens e local faz com que o Docker Compose remova apenas imagens sem uma tag personalizada definida pelo campo 'imagem'.

Pausa de composição do Docker

Existem cenários em que você tem que suspender um contêiner, sem matá-lo ou excluí-lo. Você pode conseguir isso com o comando Docker-compose pause. Ele pausa as atividades desse contêiner, para que você possa retomá-las quando quiser. O comando é:

pausa docker-compose

Docker-compose unpause

O docker-compose unpause é o oposto do comando docker-compose pause. Você pode usá-lo para retomar processos suspensos como resultado do uso de pausa do Docker-compose. O comando é:

docker-compose unpause

Docker-compose ps

Docker-compose ps lista todos os contêineres criados a partir dos serviços no arquivo Docker-Compose. É similar à docker ps que lista todos os contêineres em execução no host docker. No entanto, docker-compose ps é específico para os contêineres do arquivo Docker Compose. O comando é:

docker-compose ps

Juntando tudo

Agora que você viu alguns dos principais conceitos por trás de um arquivo Docker Compose, vamos juntar tudo. Abaixo está um exemplo de arquivo Docker-Compose para um aplicativo da web Python Django. Você verá uma análise de cada linha neste arquivo e verá o que eles fazem.

versão: '3'
Serviços:
db:
imagem: postgres
rede:
construir: .
comando: python manage.py runserver 0.0.0.0: 8000
volumes:
- .:/código
portas:
- "8000: 8000"
depende de:
- db

A história curta é que com este arquivo Docker-Compose, um banco de dados PostgreSQL é criado e um servidor django é iniciado.

A longa história é:

  1. Este arquivo usa a versão 3 do Docker-Compose.
  2. Ele cria dois serviços. O db e os serviços da web.
  3. O serviço db usa a imagem oficial do docker postgres.
  4. O serviço da web cria sua própria imagem a partir do diretório atual. Uma vez que não define o contexto e as chaves do Dockerfile, espera-se que o Dockerfile seja denominado "Dockerfile" por convenção.
  5. O comando que será executado após o início do contêiner é definido.
  6. O volume e as portas são definidos. Ambos usam a convenção de host: mapeamento de contêiner.
  7. Para volume, o diretório atual “.”É mapeado para o diretório“ / code ”dentro do contêiner. Isso ajuda os dados no contêiner a se tornarem persistentes, para que não sejam perdidos sempre que o contêiner for iniciado.
  8. Para a porta, a porta 8000 do host é mapeada para a porta 8000 do contêiner. Observe que o aplicativo da web é executado na porta 8000. Portanto, o aplicativo da web pode ser acessado no host por meio dessa porta.
  9. Finalmente, o serviço web depende do serviço db. Portanto, o serviço da web só será iniciado quando o contêiner db for iniciado.
  10. Mais sobre o Dockerfile para o aplicativo Django e o arquivo Docker Compose podem ser obtidos na documentação.

Conclusão

Você não precisa ser um especialista em Docker para usar o Docker Compose. Como um iniciante que não pretende dominar esta ferramenta, é bom aprender o que você precisa sozinho. Neste artigo, você aprendeu o básico do Docker Compose. Agora você entende porque o Docker Compose é necessário, as comparações erradas, como configurar um arquivo de configuração do Docker Compose e os comandos também. É emocionante saber dessas coisas, mas a verdadeira alegria vem de colocá-las em prática. É hora de trabalhar.

Controle e gerencie o movimento do mouse entre vários monitores no Windows 10
Gerenciador de mouse com tela dupla permite que você controle e configure o movimento do mouse entre vários monitores, diminuindo seus movimentos pert...
WinMouse permite que você personalize e melhore o movimento do ponteiro do mouse no PC com Windows
Se você quiser melhorar as funções padrão do ponteiro do mouse, use um freeware WinMouse. Ele adiciona mais recursos para ajudá-lo a obter o máximo do...
O botão esquerdo do mouse não funciona no Windows 10
Se você estiver usando um mouse dedicado com seu laptop ou computador desktop, mas o o botão esquerdo do mouse não funciona no Windows 10/8/7 por algu...