-
Notifications
You must be signed in to change notification settings - Fork 0
/
IntroduçãoDocker.txt
91 lines (58 loc) · 9.88 KB
/
IntroduçãoDocker.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
-------------------------------------------------------------------------------------------------------------
# Introdução ao Docker
O Docker é uma plataforma que possibilita a criação e administração de ambientes isolados, permitindo o empacotamento de aplicações ou ambientes inteiros em contêineres. Essa abordagem torna as aplicações portáteis para qualquer host que possua o Docker instalado.
Na máquina em que você o implantou, é possível executar diversas aplicações, e o uso do Docker apresenta uma utilização menor de memória quando comparado à virtualização convencional.
Ao contrário das máquinas virtuais, que exigem mais de um sistema operacional para executar a aplicação, os contêineres são mais leves.
## Características dos Contêineres
Os contêineres são ambientes isolados e leves, semelhantes a ambientes virtuais, que contêm todos os elementos necessários para a execução de uma aplicação, incluindo código, bibliotecas e configurações, enquanto consomem poucos recursos do computador.
### Compartilhamento do Kernel
É importante destacar que os contêineres compartilham o kernel do sistema operacional hospedeiro. Em outras palavras, os contêineres Docker utilizam o kernel do sistema operacional do host, que é o sistema operacional na máquina em que os contêineres estão sendo executados.
O kernel é a parte central do sistema operacional responsável por gerenciar os recursos de hardware e fornecer serviços aos processos do sistema.
Ao mencionar que os contêineres compartilham o kernel, significa que não é necessário um sistema operacional completo para cada instância, como ocorre com as máquinas virtuais.
Em vez disso, vários contêineres podem ser executados em uma única instância do sistema operacional, compartilhando o mesmo kernel, mas isolando o ambiente da aplicação.
## Benefícios do Uso do Docker
Essa abordagem oferece eficiência, pois os contêineres são mais leves e inicializam mais rapidamente em comparação com máquinas virtuais completas, que precisam de seu próprio kernel e sistema operacional.
Isso resulta em um uso mais eficiente dos recursos do sistema, permitindo que os contêineres sejam mais ágeis e portáteis.
## Sobre os Containers
Namespace é conceito que que permite isolar os recursos e processos entre diferentes ambientes ou conteneires em um sistema operacional. Este conceito é importante pois garante a segurança, o isolamento e a consistência no gerenciamento de contêneires.
Namespaces no linux: No contexto do Linux, os namespaces são um recurso do kernel que permite a criação de ambientes isolados. Cada namespace isola um conjunto específico de recursos do sistema operacional, como processos, redes, sistemas de arquivos, IDs de usuário, entre outros. Isso é fundamental para garantir que os processos em um contêiner não vejam ou interfiram nos processos de outros contêineres ou do host.
Principais namespaces do Linux usados em containers:
PID Namespace: Isola o espaço de processos, permitindo que os processos em um contêiner tenham sua própria visualização de processos.
Network Namespace: Isola a pilha de rede, fornecendo interfaces de rede independentes para cada contêiner.
Mount Namespace: Isola o sistema de arquivos, permitindo que cada contêiner tenha seu próprio sistema de arquivos raiz.
UTS Namespace: Isola o hostname e o domínio NIS, permitindo que cada contêiner tenha seu próprio nome de host.
IPC Namespace: Isola a comunicação entre processos, fornecendo segmentos de IPC independentes.
Namespaces do Docker:
O Docker, que é uma plataforma de contêineres, utiliza os namespaces do Linux para isolar os contêineres. Ao executar um contêiner, o Docker cria instâncias desses namespaces para garantir o isolamento. Cada contêiner, portanto, tem seus próprios processos, sistema de arquivos, interfaces de rede, etc.
Além dos namespaces do Linux, o Docker introduziu o conceito de "namespace de usuário" (User Namespace), permitindo que um contêiner execute processos como um usuário não privilegiado dentro do contêiner, mas esses processos podem ser mapeados para um usuário privilegiado fora do contêiner.
cgroups: Os cgroups servem para gerenciar o consumo de memória e cpu dos containers.
Para saber mais sobre o Docker, consulte [a documentação oficial](https://docs.docker.com/).
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
-------------------------------------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
--> Termos importantes <--:
*Orquestrar contêineres*: Significa administrar e coordenar a execução de contêneires em ambientes distribuidos;
*Escalabilidade de aplicações*: O Docker simplifica a escalabilidade de aplicações, o que significa que é fácil ajustar a quantidade de recursos destinados a uma aplicação para atender à demanda. Isso é feito por meio da replicação de contêineres. Se a carga de trabalho aumentar, é possível adicionar mais contêineres para lidar com o aumento de tráfego. Se a demanda diminuir, alguns contêineres podem ser removidos para economizar recursos.
Benefícios: Essa abordagem fornece flexibilidade para lidar com variações na demanda, garantindo eficiência na utilização de recursos. A escalabilidade automática dos contêineres Docker facilita a resposta dinâmica às mudanças nas condições de uso da aplicação;
*Versionamento e Rollback*: Os contêineres Docker podem ser versionados, o que significa que diferentes versões de uma aplicação podem ser controladas e gerenciadas. Isso permite que os DevOps mantenham o controle sobre as alterações e atualizações de cada aplicação ao longo do tempo. Além disso, se uma atualização causar problemas ou falhas, é possível reverter rapidamente para uma versão anterior, realizando um rollback.
Benefícios: O versionamento facilita o rastreamento das mudanças em uma aplicação e a implementação de estratégias de deploy mais seguras. A capacidade de realizar rollbacks rápidos minimiza o impacto de problemas que podem ocorrer após uma atualização, garantindo a estabilidade da aplicação;
*Integração Contínua e Entrega Contínua (CI/CD)*:O Docker é integrado de forma ampla em pipelines de Integração Contínua e Entrega Contínua (CI/CD). CI/CD é uma prática que envolve automação do processo de construção, teste e implantação de código. O Docker é usado nesses pipelines para criar ambientes de desenvolvimento e teste consistentes, garantindo que a aplicação funcione conforme esperado em diferentes estágios do processo de desenvolvimento.
Benefícios: A integração do Docker no CI/CD automatiza o ciclo de vida da aplicação, acelerando a entrega de novas funcionalidades. A consistência entre os ambientes de desenvolvimento, teste e produção assegura que a aplicação se comporte de maneira uniforme em todas as fases do desenvolvimento e implantação.
*Imagem Docker*: contém código de aplicativo, bibliotecas, ferramentas, dependências e outros arquivos necessários para executar um aplicativo. Quando alguém executa uma imagem, ela pode se tornar uma ou várias instâncias de um contêiner.
*Docker File*: Arquivo de texto que possue instruções para construir uma IMAGEM docker; Descreve passo a passo para configurar e executar uma aplicação dentro de um contêiner.
*Docker Compose*: Ferramenta que possibilita configuração de vários serviços, redes e volumes em um único arquivo, além de executar aplicações multi-container em Docker.
*Docker Swarm*: Ferramenta que possibilita a orquestração do Docker, permitindo criar e gerenciar clusters de contêineres Docker (Clusters são a união de máquinas (nós) conectadas a fim de realizar operações comuns). Em um cluster Docker Swarm, vários nós Docker (máquinas físicas ou virtuais) são agrupadas para formar um ambiente unificado
*Kubernetes*: Sistema, de código aberto, utilizado para orquestrar os contêineres (escalabilidade e aplicações).
*Registry Docker (Docker Hub)*: Serviço que possibilita armazenar e compartilhar imagens Docker publicamente ou de forma privada.
*Docker Volumes*: Mecanismo utilizado para armazenamento dos dados mesmo quando os contêineres são destruídos ou substituídos
*Docker Network*: Definição: Um recurso que permite que contêineres se comuniquem entre si em uma rede isolada, permitindo a interação entre diferentes serviços em contêineres.
*Compose File*: Definição: Arquivo YAML usado para definir configurações para serviços, redes e volumes usando o Docker Compose.
*Swarm Mode*: Definição: Modo no Docker Swarm que permite transformar um conjunto de nós Docker em um cluster orquestrado.
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
-------------------------------------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
Resumindo..
O Docker é um gerenciador de contêineres que oferece uma plataforma completa com ferramentas e interface para criar, distribuir e executar contêineres.
Esta tecnologia proporciona uma abordagem padronizada para empacotar aplicativos e suas dependências, simplificando o desenvolvimento, distribuição e execução de aplicações em ambientes diversos.
Um contêiner é uma unidade de software que encapsula uma aplicação e todas as suas dependências, como bibliotecas, binários e configurações.
Esse ambiente isolado permite a execução consistente da aplicação, independentemente do ambiente de hospedagem. Os contêineres compartilham o kernel do sistema operacional hospedeiro, tornando-os mais leves e eficientes em comparação com alternativas, como as máquinas virtuais.