Docker Instalação

Hoje vamos introduzir o Docker. Dessa forma, essa vai ser a primeira aula que vamos começar a falar da ferramenta Docker.

English version: click HERE

Inicialmente, vamos apresentar um pouco de teoria e depois vamos demonstrar a instalação. 

Dessa forma, vamos levantar uma máquina Docker em uma imagem. 

Em seguida, vamos discutindo e comparando com máquinas virtuais e as respectivas diferenças entre Docker e máquinas virtuais.

Assim, poderemos apresentar o correto entendimento e possibilitar a identificação da usabilidade do Docker para diferentes projetos. 

Instalando o Docker

Para a instalação, apresentaremos algumas formas de instalação. O Docker pode ser instalado em Mac,Windows e diversas distribuições do Linux. 

Consequentemente, a instalação do Docker é fácil e rápida. O site do docker também apresenta um modelo de instalação para cada sistema operacional.

Neste post, apresentaremos a instalação do Docker no Linux. Temos um vídeo de instalação, clique AQUI.

Para aqueles que desejam instalar o Docker no Windows ou Mac , deixamos os Links no final desse Post . 

Instalando Docker no Linux 

 Inicialmente, precisamos verificar se já instalamos o Docker anteriormente. Dessa forma, caso já tenha instalado, vamos remover a instalação antiga com o comando abaixo. 

sudo apt-get remove docker docker-engine docker.io containerd runc 

Alternativamente você pode optar por utilizar o Portainer, clique AQUI.

Então vamos remover a qualquer reminiscência de Docker que tenha na sua máquina usando o comando acima. Supondo que você já instalou. 

Depois usaremos o comando abaixo  para atualizar os repositórios. 

sudo apt-get update

 Depois disso, vamos começar a instalar os pacotes necessários e apontar para o novo repositório. 

sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release 

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null 

Depois disso, vamos atualizar os repositórios novamente e depois instalar os pacotes do Docker. 

sudo apt-get update 

sudo apt-get install docker-ce docker-ce-cli containerd.io 

Agora o Docker está instalado em sua máquina. 

Uma forma alternativa de instalação do Docker 

Essa segunda forma de instalação utiliza o repositório padrão do Ubuntu.

Dessa forma, alguns usuários preferem essa forma de instalação, pois argumentam que tende a ser mais estável.

Entretanto outros usuários preferem a primeira forma de instalação pois podemos adquirir a versão mais recente do Docker.

Então, cabe ao usuário decidir qual forma de instalação vai usar. 

Para essa segunda forma de instalação vamos usar o comando para atualizar o repositório e em seguida instalar o pacote docker.io. 

sudo apt-get update 

sudo apt-get install docker.io 

Testando a instalação do Docker 

Vamos agora iniciar um container chamado Hello-World. Dessa forma, vamos saber se a instalação ocorreu de forma satisfatória. 

Assim, vamos usar o comando abaixo e veremos uma tela semelhante a figura abaixo. 

sudo docker run hello-world 
Docker hello-world
Docker hello-world

Download de uma imagem Docker 

Agora vamos procurar uma imagem no repositório do Docker. Em seguida, vamos fazer o Download da imagem. 

Usamos o comando docker search  para procurar imagens. Vale ressaltar que devemos dar prioridade as imagens oficiais.

Dessa forma, para encontrar as imagens oficiais podemos verificar a coluna OFFICIAL e verificar se a imagem possui um “OK”. 

Vamos utilizar uma imagem debian. 

sudo docker search debian 
sudo docker search debian 
dsudo docker search debian 

Ok Juliana, qual o próximo passo? Agora, vamos fazer o download da imagem utilizando o comando docker pull. 

sudo docker pull debian 
sudo docker pull debian 
sudo docker pull debian 

Executar o container Docker 

Agora vamos executar um container usando a imagem que fizemos o Download. Para isso, vamos usar o comando docker run.  

sudo docker run -it debian 

“-it” = A opção “it” indica que vamos usar um terminal interativo. 

“debian” = A imagem que fizemos o download. 

Vamos ver uma tela semelhante a essa da figura abaixo. 

sudo docker run -it debian 
sudo docker run -it debian 

Em seguida, vamos fazer um update dos repositórios dentro do container e depois instalar o net-tools para podemos ter acesso a alguns comandos como o ifconfig. 

apt-get update

apt-get install net-tools
apt-get update
apt-get update
apt-get install net-tools

Verificando a rede dentro do container 

Agora vamos verificar o IP do container utilizando o comando ifconfig ( dentro do container). 

Para isso, devemos ter instalado o pacote net-tools dentro do container. 

Em seguida, vamos verificar a tabela de rotas utilizando o comando netstat. Assim, podemos verificar o IP do nosso container e a tabela de rotas.  

Vale ressaltar que, neste modelo de rede, o container tem acesso à internet porque envia para a máquina host e essa faz uma tradução de endereços para poder encaminhar o tráfego para a internet.  

ifconfig 

netstat -rn 
ifconfig
ifconfig
netstat -an
netstat -an

Visualizando os containers Docker 

Podemos verificar os containers usados e quais estão sendo executados utilizando o comando docker ps  -a

sudo docker ps  -a 
sudo docker ps  -a 
sudo docker ps  -a 

Para desligar um container, podemos usar o comando sudo docker stop e em seguida o ID do container. Vejamos o exemplo abaixo. 

sudo docker stop 0bc339cfeb67 

Alternativamente, podemos usar o comando exit dentro do container. 

exit 

Instalar o Docker no Windows ou MAC 

https://docs.docker.com/desktop/windows/install/

https://docs.docker.com/desktop/mac/install/

Deseja pular a teoria? Vá para a sessão: Instalando Docker!!!

O que é Docker ? O que é Container?

Vale destacar que sou um entusiasta da ferramenta. Isso porque o Docker permite que projetos de redes e de programação sejam iniciados em uma configuração específica e posteriormente replicados de forma fácil. 

Docker container
Docker container

Ok Juliana, você tem falado muito sobre o Docker. Mas o que é Docker? Além disso, o que é container?

Primeiramente, devemos ter em mente que se formos falar de Docker, devemos falar de container.

O que é um container Docker?

De uma forma simplificada podemos pensar em um módulo que empacota dependências e aplicativos permitindo que estes sejam executados em diferentes ambientes. 

Nesse caso estamos descrevendo um pouco da teoria. 

Consequentemente, a imagem Docker contém todo o conjunto de ferramentas, bibliotecas e configurações necessárias para os aplicativos.

Então, quais seriam os casos em que o Docker seria interessante? 

Vamos pegar um exemplo de um programador. Em seguida, vamos assumir que o programador está fazendo uma aplicação em Python.

Consequentemente, esse programador incluiu diversas bibliotecas e preparou todo o ambiente para aquela aplicação. Agora, o programador pode gerar uma imagem Docker com todo o ambiente configurado. 

Dessa forma, se o programador desejar que outras pessoas tenham acesso a sua aplicação, pode simplesmente passar a imagem Docker correspondente.

Esse exemplo pode ficar mais fácil de ser percebido se imaginarmos que você trabalha com o conjunto de desenvolvedores.

Consequentemente, você pode passar essa imagem Docker e eles vão usar a imagem em seus próprios ambientes sem precisar se preocupar com as dependências e bibliotecas. 

 Agora, vamos usar um exemplo de Docker na área de redes de computadores.

Dessa forma, poderíamos executar um ambiente diferenciado e incluir diferentes servidores de aplicações.

Além disso, o Docker é interessante para a área de segurança. Assim, podemos utilizar o Docker para criar uma camada a mais de segurança.  

Outro exemplo de utilização do Docker é para Pentest.

Alguns usuários gostam de utilizar Docker também para pentest devido a facilidade de instalação de ferramentas de análise de segurança.

Além disso, após inicializar o container Docker e realizar a análise de segurança, o usuário pode simplesmente apagar o container e descartar informações coletadas. 

Diferença entre imagem Docker e container Docker 

Container basicamente é a imagem do Docker em execução. Então, a partir do momento que você pega uma imagem Docker e executa, essa se transforma em um container.

Logo mais veremos isso tudo na prática. 

O container Docker trabalha de forma isolada e independente da infraestrutura. Dessa forma, esse isolamento do container proporciona resultados interessantes para atender a diferentes aplicações. 

Comparando containers Docker e Máquinas Virtuais 

Apresentamos aqui uma comparação entre containers do Docker e máquinas virtuais. Então, vamos comparar e falar sobre cada uma das diferenças.

Basicamente vamos verificar a infraestrutura de máquinas virtuais e containers Docker.  

As máquinas virtuais podem atuar diretamente em cima do Hypervisor. Dessa forma, em alguns casos podemos como exemplo usar o VirtualBox. 

Assim, em máquinas virtuais temos a como primeira camada a infraestrutura, em seguida temos o sistema operacional e depois temos Hypervisor. 

Docker container Vs. Máquinas virtuais
Docker container Vs. Máquinas virtuais

Primeira comparação Docker e máquina virtual  

Diferença do container Docker para máquina virtual?

No caso do Docker, esta roda acima do sistema operacional. Consequentemente, é o Docker que vai hospedar os containers. Então, no container Docker, temos o compartilhamento do kernel do sistema host. 

Consequentemente, isso significa que se estou usando um Linux, então eu vou criar um container baseado no kernel do Linux.  

Alternativamente, se estou usando Windows, vou criar containers com base no Windows. 

No entanto existem aplicações para emular diferentes ambientes operacionais. Dessa forma utilizando tais aplicações podemos utilizar um container Linux em uma máquina Windows. 

Em contrapartida, no caso das máquinas virtuais, cada máquina virtual pode ter seu próprio sistema operacional.

Então, você pode estar com um sistema host que é por exemplo Linux e levantar uma máquina Windows ou uma máquina Linux máquina …..BSD. 

Enfim, podemos levantar diversas máquinas diferentes.Então, podemos afirmar que essa foi a primeira comparação. 

Comparação do Docker  em relação ao kernel
Comparação do Docker em relação ao kernel

Containers Docker são leves e rápidos de inicializar 

 Containers Docker são mais leves e menores. Além disso, possuem uma inicialização rápida. 

Então, por exemplo quando você gera uma imagem Docker esta é muito menor do que você gerar uma imagem de máquina virtual. Consequentemente, em relação ao consumo de recursos o Docker é excelente. 

Containers docker são leves
Containers docker são leves

Dessa forma, um container Docker apresenta um baixo consumo de recursos e uma rápida inicialização quando comparado com máquinas virtuais. 

Assim, se eu quero levantar um APACHE2 em um servidor próprio. Rapidamente você pode inicializar o container com o APACHE2.  

Containers Docker são mais fáceis de configurar 

A facilidade na configuração chama a atenção quando comparamos containers e máquinas virtuais.

Além disso, podemos automatizar determinadas tarefas de configuração com menor probabilidade de erro nessas configurações. Então, o container Docker tem sido muito utilizado também devido a sua facilidade de configuração.  

Container Docker são mais fáceis de configurar
Container Docker são mais fáceis de configurar

Containers Docker têm menor isolamento

Por outro lado, nem tudo é perfeito em relação ao Docker container. Isso porque, usando as máquinas virtuais podemos prover um maior isolamento. 

Então, podemos assumir que como a máquina virtual não compartilha o kernel da máquina hospedeira, temos um maior isolamento entre as duas máquinas.

Dessa forma, temos um maior isolamento se analisarmos também o consumo de recursos. Ou seja, você consegue isolar mais os recursos utilizando a máquina virtual. 

Containers Docker têm menor isolamento em relação ao host físico
Containers Docker têm menor isolamento em relação ao host físico

Container Linux dentro de host Windows 

Então vamos lá, e se eu precisar rodar um container de outro sistema operacional? 

Posso rodar um container com sistema operacional diferente do sistema operacional da máquina hospedeira?
Posso rodar um container com sistema operacional diferente do sistema operacional da máquina hospedeira?

Nosso amigo Cacs está com essa dúvida: Eu estou usando uma máquina Windows e quero rodar um container Linux, como é que eu faço? 

Uma das formas de fazer isso é utilizar Hypervisor e usar uma máquina virtual e dentro dessa máquina virtual você pode utilizar o Docker. 

Alternativamente você também pode usar aplicações alternativas como o WSL (Subsistema do Windows para Linux). 

Então, vamos supor o seguinte exemplo: Estou usando Windows e estou usando a máquina virtual que tem Linux e instalo o Docker. E a partir desse Docker eu posso levantar containers dentro dessa máquina virtual Linux. Ou seja, é possível ok. 

Container Docker dentro de uma VM
Container Docker dentro de uma VM

Não existe problemas do tipo “estou usando o Windows e só posso levantar um container Docker com Windows?”.

Não, se você utilizar essa forma híbrida com máquinas virtuais ou aplicações como o WSL conseguirá trabalhar com diferentes sistemas operacionais. 

Leia mais:

Juliana Mascarenhas

Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer