Docker - Containers em Linux

Este artigo aborda a parte prática, para iniciarmos nesse tema. Toda a parte teórica de containers pode ser encontrada facilmente com uma "googleada" rápida. Até aqui no VOL, tem um ótimo material abordando o tema e a comparação inevitável que é feita em relação VMs e Containers. Como a intenção aqui é abordar na prática, mãos à obra.

[ Hits: 13.744 ]

Por: Bruno Bueno da Silva em 27/06/2016


Pré requisitos / Instalação / Administração



Pré requisitos

  • CPU 64bits
  • Kernel acima do 3.8

Obs.: no meu caso, estou utilizando o Debian 8. Isso não é pré requisito, apenas os dois itens acima.

Instalação

Instalando o Docker:

# curl -fsSl https://get.docker.com/ | sh

Aguarde o download e após a instalação, rode o comando:

# docker --version
Docker version 1.11.1, build 5604cbe

Obs.: o comando docker é apenas uma CLI (Command-line), que é utilizado para interagir/intermediar com o daemon Docker.

Administrando Containers

Vamos começar nossa administração de containers, porém, vamos adotar desde o início a seguinte nomenclatura "DockerHost". Toda vez que for citado DockerHost, eu estou me referindo a máquina Host, máquina matriz por assim dizer. Então, guarde isso.

Rode o comando abaixo para visualizar containers em execução:

# docker ps

Neste exemplo não mostra nenhum container rodando, obviamente, pois acabamos de instalar o Docker. Porém, é importante entendermos a saída desse comando antes de iniciar nosso primeiro container.

A seguir, vou detalhar essas opções:
  • CONTAINER ID => ID de identificação do container em execução (você vai entender melhor ao decorrer, apenas grave isso)
  • IMAGE => Imagem utilizada pelo container.
  • COMMAND => Comando em execução.
  • CREATED => Data de criação do container
  • STATUS => Por quanto tempo esta UP.
  • PORTS => Porta e protocolo em que o container esta executando.
  • NAMES => Nome do container em execução.

Agora vamos subir nosso primeiro container:

# docker run -ti debian /bin/bash

Entendendo o comando:
  • docker => CLI;
  • run => executar um container;
  • -ti => terminal interativo;
  • debian => imagem utilizada pelo container.

Note que, ao executar esse comando, o docker vai buscar a imagem especificada lá no DockerHub (depois veremos quem é esse cara), no caso "debian", poderia ser qualquer outra distro, Ubuntu, CentOS, enfim...

Baixe essa imagem para o seu DockerHost e execute um container com essa imagem. Ao fim do comando, você deve estar em um terminal com alguns caracteres embaralhados, mais ou menos como no exemplo abaixo:

root@623424074d6e:/#

Isso significa que você já está dentro do container. Rode comandos como:

# ip addr show
Ou:
# apt-get update

... e veja que a saída de IP não corresponde ao IP utilizado pelo seu DockerHost, pois esse é o IP utilizado pelo container.

Agora vamos sair do container. Para isso utilize a seguinte combinação de teclas: Ctrl+p+q

Pronto, agora você voltou para o seu DockerHost. Não saia do container com "logout", "exit", "Crtl+c"... Isso vai fazer com que o container "morra". Para sair do container e ele permanecer ativo, rodando, utilize a combinação de teclas acima.

Para saber se o container está mesmo executando, rode o comando:

# docker ps

A saída vai ser a mesma utilizada anteriormente, porém, com as informações que detalhei no inicio preenchidas, veja no meu caso como ficou:

CONTAINER ID  |  IMAGE  |  COMMAND    |   CREATED       |  STATUS       | PORTS | NAMES
623424074d6e  |  debian |"/bin/bash"  |   7 minutes ago |  Up 7 minutes |       | berserk_saha

Agora vamos imaginar que por algum motivo, eu preciso voltar para o meu container:

# docker attach container-id
# docker attach 623424074d6e

Após rodar o comando, veja que você voltou para o container, seu terminal voltou a ficar com os caracteres embaralhados, que geralmente corresponde ao seu container-id.

Observe que, se você instalou algum pacote ou simplesmente testou o ping contra algum site, a internet funcionou normalmente. Para entender isso, saia do seu container sem matar ele (Crtl+p+q).

Agora, no seu DockerHost, rode o comando:

# ifconfig

... e verifique se na saída do comando apareceu uma interface chamada: docker0

Com certeza apareceu e é essa interface que faz um bridge entre o seu DockerHost e os containers, e vice-versa. Por isso, você consegue pingar do seu DockerHost no IP do seu container, e do seu container consegue pingar no IP do seu DockerHost.

Seguindo com a administração de containers, não é preciso estar dentro de um container para rodar alguns comandos, você consegue executar comandos sem entrar no container através do "docker exec".

Veja um exemplo:

# docker exec container-id ip addr show

É possível também parar um container sem entrar nele e rodar um "exit". Por exemplo, para isso utilize o "docker stop":

# docker stop container-id

Após parar o container rode o comando:

# docker ps

... e veja que não há mais nenhum container em execução.

Mas, e se você precisa ou quer subir o container novamente, por algum motivo você se apegou a ele e após para-lo se arrependeu, e pra completar, não lembra mais o container-id do container?

Para isso, rode o comando abaixo, esse comando vai mostrar todos os container que você tem na sua máquina DockerHost. Segue exemplo:

# docker ps -a

Veja a saída, pegue o seu container-id novamente e o reinicie, o container, e entre nele:

# docker start container-id
# docker attach container-id

Caso você tenha instalado o vim, veja que ao iniciar o container novamente, ele inicia de onde você parou, rode um history e veja os comandos que você tinha rodado. Instale outros pacotes, enfim.

Agora, saia do container, mas deixe ele executando. Após voltar para o seu DockerHost, vamos verificar o quanto esse container está consumindo da minha máquina.

# docker stats container-id

CONTAINER    | CPU % | MEM USAGE / LIMIT |  MEM % |  NET I/O            | BLOCK I/O           | PIDS
623424074d6e | 0.00% |  0 B / 0 B        | 0.00%  |  2.756 MB / 86.9 kB | 2.179 MB / 7.627 MB |  0

A saída do comando é bem intuitiva, mostrando quanto esse container utiliza de CPU, quantidade de memória utilizada, volume de tráfego, mensura consumo de I/O e quantos processos existem executando dentro do container. Esse comando é bem importante para mensurar o consumo de seu container no seu DockerHost.

Agora, vamos ver dois comandos, o "pause" e o "unpause":

# docker pause container-id
# docker unpause container-id

Neste caso, acredito que nem preciso especificar o que cada um faz. Rode novamente o comando "docker ps" e veja que na saida "NAMES", vem algum nome pré-definido pelo próprio docker. Porém, caso você queira especificar o nome de um container, utilize o "--name".

Exemplo:

# docker run -ti --name bob debian

Saia do container sem fechá-lo e no seu DockerHost, rode o comando "docker ps", veja que no campo "NAMES", do novo container o nome "bob", especificado no comando anterior aparece:

# docker ps

Agora, imagine que você não gostou do container, esse nome "bob" não te agradou ou simplesmente você quer remover um container da sua máquina. Para isso, use:

# docker rm container-id

Rode o comando "docker ps" e veja se o container continua na sua máquina. Se continua, provavelmente é porque você executou o comando com o container em execução. Para forçar a remoção de um container, mesmo com ele em execução, rode o comando:

# docker rm -f container-id

Para levantar mais informações sobre o seu container utilize o inspect;

# docker inspect container-id

Obs.: um detalhe interessante, é que no segundo container que executamos, utilizamos a mesma imagem, porém, ao entrar no novo container e rodar o comando "vim", você vai ver que apesar de usar a mesma imagem, não temos as mesmas coisas que já configuramos no container anterior, para isso devemos salvar a imagem do primeiro container de forma que possa ser utilizada por futuros containers.

Assim, poderíamos continuar de onde paramos (se essa for sua intenção). Mas isso é uma tarefa para gerenciamento de imagens em Docker e essa tarefa vai ficar para um próximo artigo.

Por hora, se você, ainda não conhece o serviço, pratique com esses comandos para ir se familiarizando com o essa ferramenta que certamente facilitará muito seu dia a dia.

No mínimo, seus lab's vão ficar mais interessantes pois, compare o consumo de um container comparado com o de uma VM e tire suas próprias conclusões.

Página anterior    

Páginas do artigo
   1. O que é um Container
   2. Pré requisitos / Instalação / Administração
Outros artigos deste autor

Docker - Containers em Linux (parte 2)

Utilizando criptografia LUKS em discos externos

Leitura recomendada

A ferramenta Nagios aplicada a IPv6

Problemas encontrados na adoção do IPv6

GNU/Linux no mundo corporativo

A camada de enlace de dados

TurnKey Linux - Instale e configure serviços de rede facilmente

  
Comentários
[1] Comentário enviado por Lisandro em 28/06/2016 - 09:25h

Excelente artigo Bruno. Meus parabéns!
Espero ver a continuação em breve.
Abraço

[2] Comentário enviado por ederpaulopereira em 30/06/2016 - 14:56h

Cara, sempre quis aprender, agora não tenho mais desculpas, tudo pronto aqui. Parabéns pela iniciativa.

[3] Comentário enviado por removido em 07/07/2016 - 13:52h

Uso servidor de aplicação JEE e tinha ouvido falar de container, mas não sabia o que era, agora já sei.
Excelente artigo.

[4] Comentário enviado por baptista em 21/07/2016 - 19:08h

Quem quiser aprender mais sobre o Docker, temos um treinamento online em nosso site:

http://cursos.escolalinux.com.br/curso/introducao-ao-docker-16-horas


[5] Comentário enviado por hauck em 07/10/2017 - 16:46h

Boa tarde amigo, não sei se escreveu certo ou não, mas acho que na linha "Existem outros serviços de containers no mundo NIX, porém o que mais vem se destacando é o Docker." está escrito errado, o correto não seria UNIX em vez de NIX?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts