Hoje vamos introduzir o Docker. Dessa forma, essa vai ser a primeira aula que vamos começar a falar da ferramenta Docker.
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
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
Ok Juliana, qual o próximo passo? Agora, vamos fazer o download da imagem utilizando o comando docker pull.
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.
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
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
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
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.
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.
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.
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.
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.
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.
Container Linux dentro de host Windows
Então vamos lá, e se eu precisar rodar um container de outro sistema operacional?
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.
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.
- Veja mais posts do nosso tutorial Docker
- Artigo 01 – Docker Instalação
- Artigo 02 – Docker: Manipulação de Containers
- Artigo 03 – Docker: Instalação de servidores em Docker
- Artigo 04 – Portainer: Instalação e Configuração
Leia mais:
- Portainer: Instalação e Configuração
- Blockchain – A tecnologia por trás da inovação
- NMAP: Scan avançado
Juliana Mascarenhas
Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer