A cada poucos anos, uma mudança de paradigma ocorre na indĂșstria de desenvolvimento de software. Um desses fenĂŽmenos Ă© o crescente interesse no conceito de microsserviços. Embora os microsserviços nĂŁo sejam a tecnologia mais recente, apenas recentemente sua popularidade disparou literalmente.Atualmente, grandes serviços monolĂticos sĂŁo substituĂdos por microsserviços autĂŽnomos independentes. Um microsserviço pode ser considerado como um aplicativo que serve a um propĂłsito Ășnico e muito especĂfico. Por exemplo, pode ser um DBMS relacional, aplicativo Express, serviço Solr. Hoje em dia Ă© difĂcil imaginar o desenvolvimento de um novo sistema de software sem o uso de microsserviços. E essa situação, por sua vez, nos leva Ă plataforma Docker.
Docker
A plataforma Docker , no desenvolvimento e implantação de microsserviços, tornou-se quase um padrĂŁo do setor. No site do projeto, vocĂȘ pode descobrir que o Docker Ă© a Ășnica plataforma de contĂȘiner independente que permite que as organizaçÔes criem sem esforço qualquer aplicativo, alĂ©m de distribuĂ-lo e executĂĄ-lo em qualquer ambiente - de nuvens hĂbridas a sistemas de fronteira.Docker compor
A
tecnologia Docker Compose foi projetada para configurar aplicativos com vĂĄrios contĂȘineres. Um projeto do Docker Compose pode incluir quantos contĂȘineres do Docker forem necessĂĄrios para o criador deste projeto.Ao trabalhar com o Docker Compose, um arquivo YAML Ă© usado para configurar serviços de aplicativos e organizar sua interação. O Docker Compose Ă©, portanto, uma ferramenta para descrever e executar aplicativos Docker com vĂĄrios contĂȘineres.Dois contĂȘineres em execução no sistema hostGNU Make
Um programa make
Ă© essencialmente uma ferramenta para automatizar a montagem de programas e bibliotecas a partir do cĂłdigo fonte. Em geral, podemos dizer que Ă© make
aplicåvel a qualquer processo que inclua a execução de comandos arbitrårios para converter determinados materiais de origem em uma determinada forma resultante, em um determinado objetivo. No nosso caso, as equipes docker-compose
serĂŁo convertidas em objetivos abstratos ( alvos falsos ).Para dizer ao programa make
o que queremos dele, precisamos de um arquivo Makefile
.Os nossos Makefile
conterĂŁo os comandos usuais docker
edocker-compose
que sĂŁo projetados para resolver muitos problemas. Ou seja, estamos falando sobre a montagem do contĂȘiner, sobre como iniciĂĄ-lo, parar, reiniciar, organizar o logon do usuĂĄrio no contĂȘiner, trabalhar com logs do contĂȘiner e resolver outros problemas semelhantes.Usos tĂpicos do Docker Compose
Imagine um aplicativo Web regular que possua os seguintes componentes:- Banco de dados TimescaleDB (Postgres).
- Aplicativo Express.js.
- Ping (apenas um contĂȘiner que nĂŁo faz nada de especial).
Esse aplicativo precisarĂĄ de trĂȘs contĂȘineres do Docker e um arquivo docker-compose
contendo instruçÔes para gerenciar esses contĂȘineres. Cada um dos contĂȘineres terĂĄ diferentes pontos de interação. Por exemplo, timescale
vocĂȘ pode trabalhar com um contĂȘiner da mesma maneira que trabalha com bancos de dados. Ou seja, permite executar as seguintes açÔes:- Entre no shell do Postgres.
- Importar e exportar tabelas.
- Crie uma
pg_dump
tabela ou banco de dados.
O contĂȘiner de um aplicativo Express.js ,, expressjs
pode ter os seguintes recursos:- A saĂda de dados atualizados do log do sistema.
- Digite o shell para executar determinados comandos.
Interação de contĂȘiner
Depois de configurar a conexĂŁo entre os contĂȘineres usando o Docker Compose, Ă© hora de estabelecer interação com esses contĂȘineres. Como parte do sistema Docker Compose, hĂĄ um comando docker-compose
que suporta uma opção -f
que permite transferir um arquivo para o sistema docker-compose.yml
.Usando os recursos desta opção, vocĂȘ pode limitar a interação com o sistema apenas para os contĂȘineres mencionados no arquivo docker-compose.yml
.Veja como sĂŁo as interaçÔes do contĂȘiner ao usar comandos docker-compose
. Se imaginarmos que precisamos entrar no shell psql
, os comandos correspondentes podem ser assim:docker-compose -f docker-compose.yml exec timescale psql -Upostgres
O mesmo comando para o qual nĂŁo docker-compose
, mas Ă© usado docker
, pode se parecer com isso:docker exec -it edp_timescale_1 psql -Upostgres
Observe que, nesses casos, Ă© sempre preferĂvel usar nĂŁo um comando docker
, mas um comando docker-compose
, pois isso elimina a necessidade de lembrar os nomes dos contĂȘineres.Ambos os comandos acima nĂŁo sĂŁo tĂŁo complicados. Mas se usĂĄssemos um "wrapper" de uma forma Makefile
que nos desse uma interface na forma de comandos simples e chamasse comandos tão longos, então os mesmos resultados poderiam ser alcançados assim:make db-shell
Ă Ăłbvio que o uso Makefile
simplifica bastante o trabalho com contĂȘineres!Exemplo de trabalho
Com base no diagrama do projeto acima, crie o seguinte arquivo docker-compose.yml
:version: '3.3'
services:
api:
build: .
image: mywebimage:0.0.1
ports:
- 8080:8080
volumes:
- /app/node_modules/
depends_on:
- timescale
command: npm run dev
networks:
- webappnetwork
timescale:
image: timescale/timescaledb-postgis:latest-pg11
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
networks:
- webappnetwork
ping:
image: willfarrell/ping
environment:
HOSTNAME: "localhost"
TIMEOUT: 300
networks:
webappnetwork:
driver: bridge
Para gerenciar a configuração do Docker Compose e interagir com os contĂȘineres descritos, crie o seguinte arquivo Makefile
:THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
make -pRrq -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
docker-compose -f docker-compose.yml build $(c)
up:
docker-compose -f docker-compose.yml up -d $(c)
start:
docker-compose -f docker-compose.yml start $(c)
down:
docker-compose -f docker-compose.yml down $(c)
destroy:
docker-compose -f docker-compose.yml down -v $(c)
stop:
docker-compose -f docker-compose.yml stop $(c)
restart:
docker-compose -f docker-compose.yml stop $(c)
docker-compose -f docker-compose.yml up -d $(c)
logs:
docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
docker-compose -f docker-compose.yml ps
login-timescale:
docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
A maioria dos comandos descritos aqui se aplica a todos os contĂȘineres, mas o uso da opção c=
permite limitar o escopo do comando a um contĂȘiner.Depois de Makefile
pronto, vocĂȘ pode usĂĄ-lo assim:make help
- emitindo uma lista de todos os comandos disponĂveis para make
.
Ajuda de comandos disponĂveismake build
- montagem da imagem de Dockerfile
. No nosso exemplo, usamos imagens timescale
e ping
. Mas api
queremos coletar a imagem localmente. Isso é exatamente o que serå feito após a execução deste comando.
Montagem de contĂȘiner do Dockermake start
- lançamento de todos os contĂȘineres. Para iniciar apenas um contĂȘiner, vocĂȘ pode usar o comando do formulĂĄrio make start c=timescale
.
Iniciar contĂȘiner de escala de tempoIniciar o contĂȘiner de pingmake login-timescale
- entrada na sessĂŁo bash do contĂȘiner timescale
.
Executando o bash no contĂȘiner de escala de tempomake db-shell
- Efetue login no psql
contĂȘiner timescale
para executar consultas SQL no banco de dados.
Executando psql no contĂȘiner timescaledbmake stop
- parar recipientes.
Parando o contĂȘiner da escala de tempomake down
- pare e remova os recipientes. Para excluir um contĂȘiner especĂfico, vocĂȘ pode usar este comando com o contĂȘiner especificado. Por exemplo - make down c=timescale
ou make down c=api
.
Pare e exclua todos os contĂȘineresSumĂĄrio
Apesar do sistema Docker Compose nos fornecer um conjunto extenso de comandos projetados para gerenciar contĂȘineres, algumas vezes esses comandos se tornam longos e, como resultado, podem ser difĂceis de lembrar.A metodologia de uso Makefile
nos ajudou a estabelecer uma interação rĂĄpida e fĂĄcil com os contĂȘineres do arquivo docker-compose.yml
. Ou seja, estamos falando sobre o seguinte:- ,
docker-compose.yml
, . - , ,
make help
. - , . ,
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
make db-shell
. Makefile
, , . , .Makefile
, .
PS No nosso mercado, hĂĄ uma imagem do Docker , instalada em um clique. VocĂȘ pode verificar a operação de contĂȘineres no VPS . Todos os novos clientes recebem 3 dias gratuitamente para testes.Queridos leitores! Como vocĂȘ automatiza o trabalho com o Docker Compose?