Projeto

Geral

Perfil

33 - Conteinerização das aplicações » Histórico » Versão 1

Redmine Admin, 11/05/2019 22:36

1 1 Redmine Admin
{{>toc}}
2
3
h1. 3.3 - Conteinerização das aplicações
4
5
De maneira geral, containers podem ser comparados com pequenas VMs que permitem que códigos e aplicações rodem isoladamente de outros containers de forma muito rápida, compartilhando os mesmos recursos de hardware de forma segura e sem um hypervisor. Conteinerização das aplicações é um padrão de container, que pode ser usado em todas as distribuições Linux. Como um Linux Container Engine, utiliza Linux Containers (lxc) ao invés de métodos de virtualização tradicionais. O lxc utiliza o mesmo kernel do servidor host, tornando tudo muito rápido. Um container é um processo isolado através de namespaces + chroot. 
6
7
h2. 3.3.1 - Docker
8
9
Docker é um projeto de código aberto que automatiza a implantação de aplicativos dentro de recipientes de software, fornecendo uma camada adicional de abstração e automação de virtualização de sistema de nível operacional em Linux, Mac OS e Windows.
10
11
h3. 3.3.1.1 - Repositório de imagens docker privado
12
13
Para armazenar as imagens docker customizadas das aplicações, o Ministério do Planejamento possui um repositório de imagens docker privado que possui integração com o repositório de código-fonte Git permitindo visualizar de forma amigável no git as imagens docker criadas para cada aplicação.
14
15
16
h2. 3.3.2  Docker-compose
17
18
O Docker-compose é uma ferramenta de Orquestração de conteiners docker que permite de forma sucinta, explicar como os vários serviços devem conversar entre si, através do arquivo docker-compose é possível explicar as relações de dependências de um serviço com o outro, explicar arquivos que são importantes aos serviços, a relação dos serviços de rede, etc...
19
20
<pre>
21
services:
22
23
  mpog-banco-exemplo:
24
25
    build: postgresql
26
27
   # O comando 'ports' abaixo, explica que por exemplo, a porta tcp 5432 precisa/estará acessível externamente, neste caso, será possível acessar o banco de dados por esta porta
28
29
    ports:
30
31
      - "5432:5432"
32
33
   # O comando 'volumes' abaixo, demonstra que a pasta /var/lib/postgresql/data é importante e deve ser persistida pois possui como no exemplo abaixo, os dados do banco da aplicação
34
35
    volumes:
36
37
      - ./data:/var/lib/postgresql/data
38
39
  mpog-backend-exemplo:
40
41
    image: registry.planejamento.gov.br/mp/mpog-backend-exemplo
42
43
   # O comando 'links' abaixo, demonstra que o container de backend precisa ter acesso ao container de banco de dados
44
45
    links:
46
47
      - mpog-banco-exemplo
48
49
    volumes:
50
51
      - ./spring/config:/config
52
53
  mpog-frontend-exemplo:
54
55
    image: registry.planejamento.gov.br/mp/mpog-frontend-exemplo
56
57
    build: nginx
58
59
    links:
60
61
      - mpog-backend-exemplo
62
63
    ports:
64
65
      - "80:80"
66
</pre>
67
68
69
h3. Executando a orquestração
70
71
Para executar a orquestração basta digitar o seguinte comando na pasta `docker`:
72
73
    <pre>docker-compose up -d</pre>
74
    
75
Para parar os containeres basta executar:
76
77
    <pre>docker-compose stop</pre>
78
79
Para remover os containeres basta executar:
80
81
    <pre>docker-compose rm</pre>
82
83
Para visualizar logs dos containeres basta executar:
84
85
    <pre>docker-compose logs -f</pre>
86
87
88
h2. 3.3.3 - Regras gerais para conteinerização das aplicações
89
90
No contexto utilizado pelo Ministério do Planejamento para a geração das imagens docker das aplicações, algumas das premissas utilizadas são que:
91
# As receitas Dockerfile devem estar organizadas dentro da pasta "docker" do respectivo projeto no Git.
92
# O build destas imagens deve ser obrigatoriamente gerado por meio de rotina automatizada (Job) na ferramenta de integração contínua (Jenkins em nosso caso), gravando esta imagem em nosso repositório privado de imagens Docker.
93
# A premissa anterior garante que seja possível rastrear e fazer a engenharia reversa, conseguindo verificar como aquela imagem foi criada e quais scripts/comandos foram necessários para completar o processo de build da imagem;
94
# É importante disponibilizar um arquivo docker-compose.yml como o do exemplo acima dentro da pasta docker do projeto Git para que seja utilizado como referência para a criação de ambientes dessa aplicação
95
96
Abaixo citamos _%{color:red}algumas falhas%_ muito comuns que podem ocorrer ao implementar a Arquitetura e Configuração da aplicação:
97
98
* Parâmetros importantes como variáveis que definem credenciais de acesso a bases de dados, endereços de integração com serviços externos como Provedores de Autenticação, WebServices, ficarem fixos dentro do código fonte da aplicação sem a devida preparação para que sejam alterados de acordo com o ambiente;
99
* Mapear o código-fonte da aplicação em volumes, desta forma para implantar novas versões, além de atualizar a imagem docker seria necessário acessar a máquina hospedeira e copiar manualmente os novos arquivos de código do sistema;
100
* O endereços de dns aonde a aplicação deve rodar ficar fixo também sem a possibilidade de fácil alteração ao criar novo ambiente;
101
* A criação e subida do banco de dados da aplicação não estar automatizado por completo utilizando um versionador de base de dados, conforme [[2.4.3 - Scripts de Banco de Dados]], necessitando de intervenções manuais não documentadas;
102
103
104
105
A leitura do [[3.1 - Pipeline de Entrega]] é complementar ao assunto.