Um guia para iniciantes para compor Docker

Um guia para iniciantes para compor Docker
Docker Compose é uma das ferramentas mais úteis para desenvolvedores de software e administradores de sistemas. Muitos empregos exigem alguém com conhecimento dessa tecnologia, então o Docker e o Docker Compose estão quentes no espaço do DevOps. Sem dúvida, saber como usar essas tecnologias beneficiará sua carreira de TI.

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

  • O que é compor Docker?
  • Comparações populares
  • Docker Compose vs Kubernetes
  • Docker Compose vs Docker Swarm
  • Instalando o docker compor
  • O Docker-Compose.Arquivo YML
  • Comandos do Docker-Compose

Antes de mergulhar nas partes suculentas deste artigo, um pouco de experiência sobre a tecnologia deve ser incrível.

A contêinerização tornou-se uma parte essencial da infraestrutura de software, e isso se aplica a projetos grandes, médios ou em pequena escala. Embora os contêineres não sejam novos, o Docker os tornou populares. Com os contêineres, os problemas de dependência se tornam uma coisa do passado. Os contêineres também desempenham um papel enorme em tornar a arquitetura de micro-serviç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 comunicam.

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

O que é compor Docker?

Sem toda a complexidade, o Docker Compose é uma ferramenta que permite gerenciar vários contêineres do 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 um aplicativo da web possui alguns desses serviços:

  • Inscrever-se
  • Entrar
  • Redefinir senha
  • História
  • Gráfico

Após uma arquitetura semelhante a microsserviço, esses serviços serão divididos e executados em contêineres separados. 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 explicitamente imagens do Docker. O trabalho de construção de imagens é feito por Docker através do Dockerfile.

Comparações populares

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

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

  • Docker Compose vs Kubernetes
  • Docker Compose vs Docker Swarm

Docker Compose vs Kubernetes

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

Kubernetes popularmente conhecido como K8S é uma ferramenta de código aberto que pode ser usado para automatizar os contêineres (não restritos ao Docker). Com os K8s, você pode implantar e administrar recipientes, 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 afastem, que você não receberá do Docker Compose.

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

Docker Compose vs Docker Swarm

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

Docker Swarm é uma ferramenta de código aberto que permite executar a orquestração de contêineres, assim como você faria Kubernetes. Ambos têm seus prós e contras, mas esse não é o tópico de discussão. Você se sentirá bem, sabendo que ambos são semelhantes e também não é uma alternativa ao Docker Compose.

Instalando o docker compor

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 for 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 compor em outras distritos do Linux, você pode usar o CURL. Basta executar os seguintes comandos:

sudo curl -l
https: // github.com/docker/compor/liberações/download/1.18.0/Docker-compose-'UNOME
-s ' -' uname -m '-o/usr/local/bin/docker -comp

Então:

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

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

O Docker-Compose.Arquivo YML

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

O arquivo de composição do docker usa a sintaxe da YAML, e você deve salvar como Docker-Compose.yml. Você pode ter serviços para as filas de back -end, front -end, banco de dados e 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 necessário para todo o aplicativo será definido no arquivo de composição do docker.

Você precisa de um entendimento básico da sintaxe da 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 ou diretrizes de valor-chave em seu arquivo. Os de nível superior são:

  • Versão
  • Serviços
  • Rede
  • Volumes

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. Como no momento da redação deste artigo, o Docker Compose possui apenas as versões 1, 2 e 3. Não é de surpreender que seja a versão recomendada a ser usada, pois possui certas diferenças das versões mais antigas.

Você pode especificar a versão a ser usada para o Docker compor no arquivo, como visto abaixo:

  • Versão: “3”
  • Versão 2.4 ”
  • Versão 1.0 ”

Serviços

A chave de serviço é sem dúvida a chave mais importante em um arquivo de composição do docker. Aqui, você especifica os contêineres que deseja criar. Existem muitas opções e toneladas de combinações para configurar recipientes nesta seção do arquivo. Essas são algumas opções que você pode definir na chave dos serviços:

  • Imagem
  • Container_name
  • Reiniciar
  • Depende de
  • Ambiente
  • Portas
  • Volumes
  • Redes
  • Ponto de entrada

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 do DockerHub sozinho. Você também pode criar imagens a partir de sua máquina através do seu arquivo de composição do Docker, 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 oferece a oportunidade de usar algo diferente. Você deve observar que essa não é a única maneira de usar uma imagem através 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 tecla "container_name", você pode dar nomes específicos para contêineres, em vez de nomes gerados aleatoriamente dos 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 de contêineres devem ser únicos; Fazer isso fará com que os serviços falhem.

Reiniciar

A infraestrutura de software está fadada a falhar. Com o conhecimento disso, é mais fácil planejar se recuperar dessa falha. Há muitas razões para um contêiner falhar, então a chave de reinicialização diz ao contêiner para acordar ou não. Você tem as seguintes opções, não, sempre, em falha e a menos que seja parado. Essas opções sugerem que um contêiner nunca será reiniciado, sempre será reiniciado, apenas reiniciar o fracasso ou apenas quando interrompido.

Aqui está um exemplo:

Reinicie: sempre

Depende de

Serviços executados isoladamente. Mas praticamente, os serviços não podem fazer muito isoladamente. É preciso 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 tecla "depended_on", você pode adicionar as dependências.

Aqui está um exemplo:

depende de:
- dB

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

Ambiente

As aplicações dependem de determinadas variáveis. Para segurança e facilidade de uso, você as extrai do código e as configura como variáveis ​​de ambiente. Exemplos de tais variáveis ​​são chaves de API, senhas e assim por diante. Estes são comuns em aplicativos da web. Observe que esta chave funciona apenas se não houver diretiva "construir" nesse serviço. Portanto, crie a imagem de antemão.

Veja isso:

ambiente:
API-KEY: 'The-Api-Key'
Config: 'Desenvolvimento'
Session_secret: 'the-secret'

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

Aqui está um exemplo:

construir:
contexto: .
args:
API-KEY: 'The-Api-Key'
Config: 'Desenvolvimento'
session_secret: 'the-secret'

Portas

Nenhum recipiente trabalha isoladamente, apesar de correr separadamente dos outros. Para fornecer um link para se comunicar com o “mundo exterior”, você precisa mapear as portas. Você mapeia a porta do contêiner do docker para a porta de host real. Do Docker, você pode ter encontrado o argumento "-p" que é usado para mapear as portas. A diretiva portas funciona semelhante ao argumento "-p".

Portas:
- "5000: 8000"

Volumes

Os contêineres do Docker não têm meios de armazenar dados persistentemente, então eles perdem dados quando reiniciam. Com volumes, você pode contornar isso. Os volumes possibilitam a criação de um armazenamento de dados persistente. Faz isso montando um diretório do host do Docker no diretório do contêiner do 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 volumes, você pode conferi -los.

Redes

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

Aqui está um exemplo:

Redes:
- padrão

Existem muitas opções ao configurar redes, você pode conferi -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ê deverá iniciar o servidor. A chave de entrada permite fazer isso. A entrada funciona como a entrada no Dockerfile. A única diferença neste caso é que o que você definir aqui substitui as configurações de entrada no Dockerfile.Ponto de entrada: Flask Run

Aqui está um exemplo:

Ponto de entrada: Flask Run

Docker Compõe comandos

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

  • Docker-compor
  • Docker-compor para baixo
  • Docker-compose Start
  • Docker-compose Stop
  • Pausa do docker-composição
  • Docker-Compõe Unpause
  • Docker-Compor PS

Docker-compor

Este comando Docker-Compose ajuda a construir a imagem, depois cria e inicia os contêineres do 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 o Docker-Compose Up, ele recria o contêiner. O comando é:

Docker-compor

Docker-compose Start

Este comando Docker-Comppose inicia os contêineres do Docker, mas não cria imagens ou cria contêineres. Portanto, ele apenas inicia os contêineres se eles tiverem sido criados antes.

Docker-compose Stop

Muitas vezes você precisa parar os recipientes depois de criar e iniciá -los. Aqui é onde o comando Stop Docker-Compose Stop é útil. Este comando interrompe basicamente os serviços em execução, mas os contêineres e redes de configuração permanecem intactos.
O comando é:

Docker-compose Stop

Docker-compor para baixo

O comando do Docker-Compompose Down também impede os contêineres do Docker como o comando STOP. Mas vai a milha extra. Docker-Compose Down, não apenas para os recipientes, ele 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-compor para baixo

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

Docker-compor para baixo-volumes

Se você pretende remover as imagens, especificará adicionando -rmi tudo ou -RMI Local. Por exemplo:

Docker-compor para baixo--rmi tudo
Docker-Compose Down-RMI Local

Onde todos causa o docker compor para remover todas as imagens e local Causa o docker compor para remover apenas imagens sem uma tag personalizada definida pelo campo 'imagem'.

Pausa do docker-composição

Existem cenários em que você precisa suspender um recipiente, sem matar ou excluí -lo. Você pode conseguir isso com o comando de pausa do Docker-Compose. Ele faz uma pausa nas atividades desse contêiner, para que você possa retomá -las quando quiser. O comando é:

pausa do docker-composição

Docker-Compõe Unpause

O Docker-compose Unseause é o oposto do comando de pausa do Docker-Compose. Você pode usá-lo para retomar os processos suspensos como resultado do uso da pausa do Docker-Comppose. O comando é:

Docker-Compõe Unpause

Docker-Compor PS

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

Docker-Compor PS

Reunindo tudo

Agora que você viu alguns dos principais conceitos por trás de um arquivo de composição do Docker, vamos reunir tudo. Abaixo está um arquivo de amostra do Docker-Compose para um aplicativo da web python django. Você verá um colapso de todas as linhas deste arquivo e verá o que eles fazem.

Versão: '3'
Serviços:
DB:
Imagem: Postgres
rede:
construir: .
Comando: Python gerencia.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 banco de dados e os serviços da web.
  3. O serviço de banco de dados usa a imagem oficial do Docker Postgres.
  4. O serviço da web constrói sua própria imagem a partir do diretório atual. Como não define o contexto e as chaves do Dockerfile, espera -se que o Dockerfile seja nomeado "Dockerfile" pela 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 do host: mapeamento de contêineres.
  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, por isso não se perde toda vez que o contêiner inicia.
  8. Para Port, 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 através daquela porta.
  9. Finalmente, o serviço da web depende do serviço de banco de dados. Portanto, o serviço da web só começará quando o contêiner de banco de dados tiver começado.
  10. Mais sobre o dockerfile para o aplicativo Django e o arquivo de compôs do docker podem ser obtidos na documentação.

Conclusão

Você não precisa ser um especialista com o Docker para usar o Docker Compose. Como iniciante que não pretende dominar essa ferramenta, é bom aprender o que você precisa sozinho. Neste artigo, você aprendeu o básico do Docker Compose. Agora, você entende por que 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 essas coisas, mas a verdadeira alegria vem de colocá -las para praticar. É hora de começar a trabalhar.