0

CONTAINER - Docker em teoria

William Silva
William Silva

Você tem em sua máquina toda a estrutura operacional necessária organizada a sua maneira para desenvolver e rodar suas aplicações.

Assim como você todos os demais, DEV´s também tem sua estrutura individual personalizada onde cria e usa suas aplicações.

A questão é como trabalhar em equipe em um universo tão grande e de tantas possibilidades de configurações, frameworks, sistemas operacionais, Linux, Windows, Mac e vai.

Pensando nisto a solução é o container.

Um container é um espaço ou área destinado ao uso comum.  Você cria sua aplicação e deposita em um container. O administrador do container se encarrega de dar a sua aplicação um formato que outro possa usar sem a necessidade de reconfigurar todo o ambiente.

Ele torna a aplicação Plug and Play. Pegue e use.

O DOCKER é um software que fornece container virtuais que empacota sua aplicação e suas dependências para dentro de um container.

A partir desse momento, o container se torna portável para você utilizar em qualquer outro lugar que tenha o docker instalado, seja na máquina de outras pessoas ou em servidores.

Ou seja, podemos transferir os containers.

Onde quer que a sua aplicação esteja em qualquer sistema operacional sem a necessidade de instalar dependência ela vai rodar da mesma forma.

Como isto sua aplicação sempre funciona da mesma fora em qualquer lugar.

Essa é a proposta do DOCKER

.

Ele trabalha com o conceito de contêineres, onde ele consegue isolar a sua aplicação através de um container virtual como se fosse um host, que é o sistema operacional hospedeiro, o seu principal sistema no computador.

Nesses containers, você diz exatamente tudo que ele vai ter, como as bibliotecas que a linguagem que você está sendo desenvolvido, o sistema operacional que melhor se adequa, de preferência distribuição Linux.

Todas as dependências ficam isoladas, apenas no seu container, não afetando os outros containers. São processos totalmente isolados.

O Node está instalado apenas no container do node, ele não existe no container do MySQL, por exemplo.

Agora sua aplicação vai rodar sempre da mesma forma em qualquer lugar, basta este outro lugar ter o DOCKER instalado.

Todas essas configurações que sua aplicação precisa, você define uma vez, no universo Docker, ela se chama imagem.

Com uma imagem Docker, você pode passar ela para qualquer outra pessoa e executar em diversos ambientes sem precisar configurar mais nada.

Uma imagem é como um template/modelo, onde você define o sistema operacional, dependências e regras e disponibiliza para uso nos containers.

Você usa uma imagem Docker dentro de um container e você pode ter a mesma imagem.

Você e pode ter a mesma imagem Docker sendo executada em vários containers, que falam entre si, se precisar.

Isso se assemelha muito com máquinas virtuais tipo virtual box e VMWare.

Tem diferença?

Posso usar elas no lugar de Docker?

De fato, se assemelha, porém, o Docker traz algumas vantagens.

Vamos a estrutura de cada um.

Na base temos a infraestrutura, que no caso é o hardware. Em cima temos o sistema operacional principal, que pode ser qualquer um, vamos supor que seja um Ubuntu.

Em cima temos o Hypervisor que é o principal componente nessa estrutura, é ele o responsável, nas VM´s, ´por disponibilizar recursos de hardware para os sistemas operacionais visitantes, que são as maquinas virtuais.

Resumindo o Hypervisor é uma camada de software que fica entre o hardware e as máquinas virtuais, sendo responsável por fornecer recursos como armazenamento, CPU, memória, rede e etc., na máquina física (desktop, notebook) para a virtual.

Ele permite que vários sistemas operacionais possam ser executados em um mesmo host, que é o sistema operacional hospedeiro.

Em cima dele, temos as máquinas virtuais, os sistemas operacionais visitantes, que em cima tem seus binários, bibliotecas e finalmente, por último, sua aplicação.

Então nesse exemplo, temos 3 aplicações rodando em um host.

Qual o problema aqui?

Utilizar VM´s se torna custoso devido ao uso do Hypervisor, há muito desperdícios de recursos nesse cenário. Todo o sistema operacional é reproduzido nessa camada de cima e ainda dependemos do Hypervisor para conseguir utilizar as VMs

Já o Docker consegue reaproveitar muito melhor os recursos. Aqui na base também temos a nossa infraestrutura/hardware, em cima o sistema operacional, o host e daí para cima temos o Docker e seus containers.

O Docker não depende de um software como Hypervisor para rodar os containers, ele simplesmente utiliza features (características) do próprio kernel do sistema operacional hospedeiro para gera os containers.

Com isso o Docker consegue inicializar mais rápido e utilizar menos memória e armazenamento.

Para você ter reaproveitamento de Kernel você precisa que seu sistema operacional hospedeiro seja distribuição Linux.

Com isso, havendo compartilhamento de recursos.

Ah. Eu tenho Windows ou Mac, não consigo utilizar docker para desenvolver?

Consegue! Neste caso você precisa instalar a versão do docker desktop para o Windows e Mac, e ele se encarrega do Hypervisor (para Mac) ou Hyper-V para Windows para você utilizar.

Mas se o docker é totalmente baseado em Linux, e se a minha aplicação for dotnet e eu precisar rodar em uma imagem de Windows, não consigo utilizar o docker?

Consegue sim!

Para utilizar o máximo e tirar proveito de compartilhamento de features do kernel, etc. Como tem no Linux, você precisa que a versão do sistema operacional hospedeiro seja a mesma do container, ou seja, ambos devem ter o Windows server na mesma versão. Caso não, Hiper-V será utilizado

Eu já comentei sobre imagens Docker, muitas vezes não precisamos criar nossa imagem ou pelo menos não do zero. Existe repositório oficial do próprio Docker com diversas imagens prontas para uso.

La tem imagens oficiais e da comunidade que podemos utilizar diretamente pois já vem toda pré-configurada e pronta para rodar nossas aplicações.

Para treinar sem instalar o DOCKER em sua máquina e diretamente pela internet use o:

https://labs.play-with-docker.com/

Faça seu cadastro e experimente.

Principais comandos do Docker

docker --help // Lista todos os comandos e a sintaxes para execução


run // executa um novo comando em um novo container- De fato é o que cria um container

create // cria um novo container

 

Ps // Lista os containers

pwd // mostra a partição ou partições no terminal

info // lista as informações do nosso docker

images // lista as imagens, são as imagens utilizadas para criar os nossos containers

exec // executar um outro binário do nosso container, vai fazer a execução do nosso SSH para nos estarmos conectando o container. Podemos rodar também comandos específicos com o docker exec dentro do nosso container.

stop // para a execução de um container

start // inicia um ou mais containers

logs // para instalar o output e os logs de nosso container e o expect onde a poderemos estar listando todas as configurações que está sendo utilizada em nosso container como mapeamento de volume ou outra configuração habilitada nele.

inspect // retorna as informações de baixo nível do docker objeto

pull // puxa uma imagem ou repositório para gravar na máquina. Vamos baixar as imagens do nosso repositório privado ou nosso repositório público do docker hub.

help // lista todos os comandos

commit // cria e comenta as modificações em nosso container

tag // Cria uma tag para melhorar o versionamento.

login // Log para um Docker registrado. Logar nosso repositório privado ou público

logout // Encerra uma operação que esteja logado em um docker

push // empurra uma imagem ou repositório para gravar na nuvem. Após a gente Buildar uma imagem nós podemos compartilhar ela no nosso repositório.

search // procura no docter hub por uma imagem

rm // remove um ou mais containers

rmi // remove uma ou mais imagens

rename // renomeia um container

export // exporta uns containers

import // importa um container

save // salva uma ou mais imagens de docker, ele vai salvar em arquivo texto

 load // lê uma imagem para uma tarefa

clear // limpa a tela

version // mostra a versão do docker instalado

Praticando no https://labs.play-with-docker.com/

Depois de entrar crie uma New Instance (Nova Instância)

Criando um container no docker

docker --help

docker ps

ls

docker run –name meuprimeirocontainer –p 80:80 –d nginx

docker images

docker ps

Veja se a porta está funcionando, clique em PORT OPEN

Para remover o container use o comando abaixo

docker rm meuprimeirocontainer

Para remover o container não pode estar rodando se estiver você pode força usando a flag –f

docker rm –f meuprimeirocontainer

No lugar do nome você pode usar os quatros primeiro números ou letras que identifica o container.

docker rm –f 7d704

docker --version

0
0

Comentários (1)

0
Leandro Henrique

Leandro Henrique

14/07/2021 15:12

Muito massa!

Tudo que deve ser feito, merece ser bem feito. Discord #4673

Brasil