Primeiros passos com Docker

Primeiros passos com Docker

Introdução

Na abordagem dos primeiros passos com Dokcer, incluiremos a parte teórica e prática, subindo containers e manipulando-os com comandos básicos, mas antes disso, vamos entender o que é o docker.
Docker é uma ferramenta de virtualização e está presente em pequenas e grandes empresas para facilitar o  fluxo de deploy de aplicações e facilitar a implementação da cultura ágil. A grande vantagem em sua utilização é a rapidez no provisionamento e versionamento, e ao invés de trabalhar com máquinas virtuais como os hypervisors, a ferramenta utiliza uma arquitetura de containers que compartilham binários e bibliotecas de um mesmo sistema operacional, sem necessitar de um sistema convidado,  o que economiza muitos recursos do host. Os containers podem ser organizados em diversas aplicações diferentes convivendo no mesmo host ou partes de uma única aplicação que funciona com seus serviços segmentados em containers, ou seja, uma arquitetura de microserviços. O docker foi programado em Go, com sua primeira versão publicada em 2013 e é uma tendência na área de TI.

Muito melhor que os HyperVisors!

Como já foi dito, o Docker é uma ferramenta de virtualização, mas não pode ser comparada aos hypervisors, já que opera com uma arquitetura simples, mais leve e poderosa, veja:

O Hypervisor precisa de um sistema operacional convidado, além de criar novas libs e bibliotecas para cada aplicação, o uso de containers possibilita o compartilhamento dos binários, bibliotecas e kernel do sistema operacional hospedeiro, economizando espaço e recursos do hardware, além disso, o gerenciamento de containers é muito mais ágil quando comparamos com o uso de máquinas virtuais, acompanhe nosso Hands on!

Hands On !

Para os primeiros passos com docker, iremos realizar a instalação do docker em um host linux, subir um container e configurar um servidor WEB com apache.

Instalando o Docker

Escolha uma distribuição Linux de sua preferência e rode o comando abaixo, neste exemplo utilizarei o Ubuntu Server 18.10, que já possui o CURL instalado.

curl -sSL https://get.docker.com | sh

Agora o docker está instalado e pronto para uso!

Subindo o primeiro container**

Para subir o nosso primeiro container, utilize:

docker run -i --name=container01 -p 8080:80 -t debian:10 /bin/bash

O comando acima solicita um novo container com o docker run, utilizando o nome container01, com a imagem do debian 10, expondo a porta 8080 da minha máquina local e redirecionando todo o tráfego desta para a porta 80 dentro do container, desse modo poderemos instalar um servidore WEB Apache no container e realizar requisições para a porta 8080 requisitando uma página web dentro do container!

O terminal será jogado para dentro do container após esse comando, utilize as teclas CTRL + P + Q para sair do container.

Atenção, as teclas CTRL+D matam o container.

Para visualizar todos os containers que estão ativos no sistema, utilize:

docker ps

A seguinte tabela será exibida, com as colunas informativas sobre cada container, observe:

Para criar os pacotes do apt dentro do container (os arquivos do apt ficam vazios após a subida do container) e possibilitar instalação de pacotes, utilize o comando:

docker exec container01 apt update

Em seguida, instale o apache com:

docker exec container01 apt install apache2 -y

Inicie o processo do servidor web usando:

docker exec container04 service apache2 start

Confirme se o apache está ativo no container:

docker top container01

Agora realize um teste de curl, se a index padrão do apache2 for exibida no terminal, está tudo ok !

curl localhost:8080

Você também pode validar pelo navegador, caso não tenha bloqueios de firewall:

Resumo do manuseio dos containers

Após esse pequeno lab, confira mais detalhes dos comandos já utilizados e outros que são úteis para o dia a dia!

Iniciar um novo container

docker run -i -t <imagem> -p <portas> <comando>

Entrar no container

docker attach <container ID/name>

Sair do Container

CTRL + P + Q

Parar um container

docker stop <container ID/name>

Iniciar um container parado

docker start <container ID/name>

Commitar um container

docker commit <Container ID/Name>:version (ex 1.3.2)

O Commit de container cria uma nova imagem do container em operação, desse modo você pode subir outros containers com o mesmo conteúdo de um container commitado anteriormente ou versionar uma aplicação em desenvolvimento.

Executar comandos no container

Não é necessário entrar no container para executar comandos, o docker exec irá rodar os comandos que você precisa e trazer o resultado em seu terminal na máquina local.

docker exec <Containers ID/Name> *COMANDO*

Renomear um Container

docker rename <container ID> *novo nome*

Migrando um container

Uma função útil para quando houver a necessidade de migrar containers entre servidores que possuem docker!

Salvar um container em um arquivo .tar

docker save -o bkp-container.tar <nome da imagem>

Subir um container a partir de um arquivo .tar

docker load < bkp-container.tar

Análise de processos e estatísticas de recursos

Verificar o consumo de todos os containers ativos

docker stats

Verificar o consumo de um container específico

docker stats <Containers ID/Name>

Verificar processos em curso dentro de um container

docker top <container ID/name>

Docker kill vs docker remove

Precisamos ficar atentos quanto a função de dois comandos, um deles é o docker kill que mata o processo do container, e é possível iniciá-lo novamente quando necessário. O docker rm remove o container, portanto não poderá inciar o mesmo container novamente.

matar um container

docker kill <container ID/name>

_remover um container _

docker rm -f <container ID/name>

Procurando imagens no Docker

Todos os containers que criamos com o docker são baseados em imagens, e é possível encontrar diversas imagens em hub.docker.com

Para verificar as imagens disponíveis na máquina local:

Docker images

Para procurar imagens disponíveis no hub.docker.com , podemos pesquisar por uma string.

docker search *string*

Por exemplo, para utilizar imagens com o zabbix já instalado:

Todas essas imagens que já possuem uma aplicação, como zabbix, nagios, ou até um framework como django e laravel, tem configurações específicas para serem usadas com o docker, como liberação de portas, uso de comandos e outras variáveis, portanto é sempre bom ler as instruções de quem postou a imagem no próprio site da hub.docker.com para seguir o processo correto!

Agora você já sabe sobre a arquitetura dos containers docker, como subir um container, configurar um serviço dentro do container e gerenciar as portas conforme necessidade, além de entender o conceito de commit, imagens e operações básicas com containers !

Por fim, agradecemos a leitura e esperamos que este post tenha te ajudado de alguma maneira! Caso tenha alguma dúvida, entre em contato conosco pelo Telegram , Facebook ou Instagram ! Veja mais posts no IronLinux !