Essa é uma visualização multi-página imprimível desta seção. Aperte aqui para imprimir a página.
Conceitos
- 1: Docker
- 2: Git
- 3: GitLab CI
- 4: Linters e formatadores
- 5: Testes de código
1 - Docker
Este é essencialmente um “TLDR” da documentação oficial1. A ideia é fazer com que o leitor tenha uma ideia básica do funcionamento e dos conceitos chave de Docker.
O que é Docker?
“Docker é uma plataforma aberta para desenvolver, transportar e executar aplicações. Docker permite separar aplicações de sua infraestrutura, o que viabiliza entregar software mais rápido. Com Docker é possível gerenciar a infraestrutura do mesmo jeito que se gerenciam as aplicações. Ao tirar vantagem das metodologias de transporte, teste e implantação de código do Docker é possível reduzir significativamente o atraso ente escrever código e executar ele em produção.”
Resumindo a sopa de palavras:
Docker permite criar “caixinhas” que contém tudo o que é necessário para executar a aplicação, o que deixa esse software independente do sistema em que ele deve executar.
Como Docker funciona?
Docker Engine
Docker vs. Máquina Virtual
Resumindo conceitos importantes
Contêiner
- Containers são pacotes de software leves, autônomos e executáveis que incluem tudo o que é necessário para executar um software, incluindo o código, ferramentas do sistema, bibliotecas do sistema e configurações.
- Eles isolam o software de seu ambiente, garantindo que ele seja executado consistentemente, independentemente de onde seja implantado.
- Os contêineres utilizam o kernel do sistema operacional hospedeiro e compartilham recursos com outros contêineres, tornando-os eficientes e portáteis.
- É criado com base em uma imagem;
Imagem
- Imagens são templates, somente leitura, que contém as instruções para criar um contêiner Docker.
- Elas encapsulam o código do aplicativo junto com suas dependências, bibliotecas e ambiente de execução.
- Uma imagem é criada utilizando um arquivo chamado
Dockerfile
, um arquivo de texto que especifica as etapas necessárias para construir um contêiner. - As imagens do Docker podem ser criadas a partir do zero ou podem ser baseadas em imagens existentes disponíveis no Docker Hub ou em outros registries
Registry
- Registries são repositórios onde as imagens Docker são armazenadas e distribuídas.
- O registry mais popular é o DockerHub2. Ele é público e o padrão para imagens Docker, onde os usuários podem encontrar e compartilhar imagens de contêineres.
- Organizações também podem configurar registries privados para armazenar imagens próprias dentro de sua infraestrutura de rede. O C3SL tem seu próprio Docker Registry.
- Registries permitem versionamento, colaboração e distribuição de imagens Docker em diferentes ambientes.
- Abusando do termo: registries como o DockerHub são para o imagens Docker o que serviços como GitHub são para repositórios Git. Veja o versionamento de imagens como commits em um repositório. (Lembre que estamos abusando do termo)
Volume
- Volumes são uma maneira de persistir dados gerados e usados por contêineres Docker. Sem volumes qualquer dado escrito no sistema de arquivos de um contêiner será perdido assim que o contêiner pare.
- Eles fornecem um mecanismo para armazenar e gerenciar dados separadamente do ciclo de vida do container.
- Os volumes podem ser compartilhados entre containers e também podem ser montados do sistema hospedeiro, permitindo que os dados persistam mesmo se o container for interrompido ou excluído.
Atenção
Em um determinado momento um contêiner contendo um pequeno serviço do C3SL foi configurado errado, o volume estava incorreto. Eventualmente esse contêiner foi parado e a imagem foi atualizada, o que acarretou na perda de tudo o que foi salvo nesse serviço.Rede
- As redes Docker permitem a comunicação entre contêineres em execução no mesmo host ou em vários hosts.
- Por padrão, o Docker cria uma rede de ponte para cada host, permitindo que os contêineres se comuniquem entre si e com o mundo externo, que já basta para a maioria dos casos de uso. Há no total 73 tipos de redes Docker (6 drivers distintos).
- Usuários podem criar redes personalizadas para isolar contêineres, controlar o tráfego e implementar políticas de rede.
- As redes Docker fornecem recursos como resolução DNS, descoberta de serviço e segmentação de rede, melhorando a flexibilidade e escalabilidade de aplicativos containerizados.
Por que utilizar Docker?
“Never install locally”
Nota
Isso é particularmente relevante quando lida com dois ou mais gerenciadores
de pacotes. Um bom exemplo disso são pip
do Python e apt
do Debian. É
frequente as instalações de um conflitarem com as do outro, e resolver esse
problema não é trivial.
Claro, no caso do pip
há ambientes virtuais para evitar isso, mas Docker também
é um ambiente virtual, e é mais fácil de fazer a aplicação funcionar caso
ela não seja inteiramente em Python, por exemplo. Além das vantagens de
ter uma imagem da aplicação para deploy facilitado.
Executar código legado
Um projeto dockarizado ficou parado por dois anos e voltou do nada?
Sem problemas! É só fazer o deploy da última imagem de produção! Agora para continuar o desenvolvimento basta que a documentação do projeto esteja em ordem (esse é um problema que sempre caberá ao projeto em si).Testes de integração
…
Por que não utilizar Docker?
Dependências complexas
…
Aplicações de altíssimo desempenho
…