Introdução e Utilização do Docker

Este artigo traz um estudo introdutório sobre a tecnologia de empacotamento de aplicações em forma de contêineres, rodando-os de maneira isolada do sistema, utilizando a ferramenta Docker. O texto e os exemplos aqui citados (DHCP e DNS server), tratarão como base o sistema operacional GNU/Linux instalados no host, especificamente, distribuições baseadas em Debian. Nas teorias, utilizamos o Debian Buster e nos exemplos de DHCP e DNS Server, utilizamos o Kali Linux, versão 2019.3.

[ Hits: 8.819 ]

Por: Hugo De Oliveira Santos em 26/09/2019 | Blog: https://www.linkedin.com/in/hugo-de-oliveira-santos-05910550/


Execução e Controle de Contêineres



Com o Docker instalado, você será capaz de rodar os contêineres. Para exemplificar o funcionamento, podemos utilizar o contêiner "Hello-World" do Docker Hub. Para executá-lo, utilize o comando:

docker run hello-world
Linux: Introdução e utilização do Docker
O docker fará o download da imagem, caso ela não exista no host, diretamente do seu repositório oficial, e executará o contêiner, que irá imprimir na tela a mensagem do "hello-world".

O docker oferece diversas opções de interatividade com os contêineres e as imagens. Os comandos podem ser verificados digitando-se "docker" no terminal, sem nenhum parâmetro adicional. Maiores informações sobre os comandos, estão disponíveis em:
Vamos criar um contêiner do Debian para executar novos testes e exemplificar o funcionamento de um contêiner. Utilizando o parâmetro "run", faremos o download e iniciaremos o contêiner com o sistema Debian.

Para maiores informações sobre a imagem utilizada, visite: Docker Hub

docker run -it debian:latest bash

Com os parâmetros "-it" e "bash", passamos a ter interatividade e controle do contêiner, estando agora dentro do terminal do Debian do contêiner.

Podemos comprovar isso pelo nome da nova máquina que aparecerá no terminal, ou mesmo acessando os diretórios do sistema no qual estamos. Para sair do contêiner sem parar sua execução, basta apertar as teclas Ctrl+p+q.

De volta ao terminal da máquina host, podemos ver os contêineres em execução com o seguinte comando:

docker ps
Linux: Introdução e utilização do Docker
Ou:

docker ps -a

...caso queira listar todo o histórico de processos do Docker. Para voltarmos ao contêiner, utilizamos:

docker exec -it contêiner-id bash

Para listarmos as imagens baixadas no host, podemos utilizar o comando:

docker images
Linux: Introdução e utilização do Docker
Caso queira atualizar alguma imagem com base no repositório oficial, basta executar o comando:

docker pull nome-da-imagem

Para remover imagens do host:

docker rmi nome-da-imagem

Para remover contêineres do host:

docker rm nome-do-contêiner

Criando Imagens Customizadas

O docker disponibiliza imagens oficiais básicas em seu repositório, possibilitando os usuários criarem suas próprias imagens a partir delas. Há duas formas de criar imagens customizadas, com commit e com Dockerfile.

Commit

É possível customizar imagens executando o comando commit, relacionado a um contêiner. Esse comando usa o status atual do contêiner escolhido e cria a imagem com base nele. Primeiro criamos um contêiner qualquer e acessamos ele via bash:

docker container run -it --name containerteste debian:latest bash

Agora que estamos no bash do contêiner, utilizaremos o terminal normalmente, como em um sistema Debian. Instalaremos o Vim, por exemplo:

# apt-get update
# apt-get install vim -y
# exit

Paramos o contêiner com o comando abaixo:

docker container stop containerteste

Agora, efetuamos o commit desse contêiner em uma imagem:

docker container commit containerteste debian-teste:vim

No exemplo feito, "containerteste" é o nome do contêiner, "debian-teste:vim" é a imagem resultante do commit e o estado do contêiner criado é armazenado em uma imagem chamada "debian-teste:vim".

Vale salientar que o método commit não é a melhor opção para criar imagens, pois, como verificamos, o processo de modificação da imagem é completamente manual e apresenta certa dificuldade para rastrear as mudanças efetuadas, uma vez que, o que foi modificado manualmente não é registrado automaticamente na estrutura do Docker.

Dockerfile

Quando utilizamos Dockerfile para gerar uma imagem, será apresentada uma lista de instruções que serão aplicadas em determinada imagem para que uma nova versão seja gerada com base nas modificações. Nesse modelo, temos total rastreabilidade sobre o que será modificado.

Utilizando novamente o exemplo da instalação do Vim no Debian, crie um arquivo qualquer para um teste futuro:

touch teste

Crie e edite um arquivo chamado "Dockerfile" e dentro dele o seguinte conteúdo:

   FROM debian:latest
   RUN apt-get update && apt-get install vim -y
   COPY teste /tmp/teste
   CMD bash

No arquivo acima, utilizamos quatro instruções:
  • FROM: para informar qual imagem será usada como base.
  • RUN: para informar quais comandos serão executados nesse ambiente para efetuar as mudanças necessárias na infraestrutura do sistema.
  • COPY: é usado para copiar arquivos da estação onde está executando a construção para dentro da imagem.
  • CMD: para informar qual comando será executado por padrão, caso nenhum seja informado na inicialização de um contêiner a partir dessa imagem. No exemplo, colocamos o comando bash, se essa imagem for usada para iniciar um contêiner e não informamos o comando, ele executará o bash.

Após construir seu "Dockerfile", execute o comando abaixo:

docker image build -t debian0:vim_auto .

A opção "-t" informa o nome da imagem a ser criada, e o "." ao final, informa qual o endereço do script do Dockerfile deve ser usado nessa construção de imagem, que neste caso, é no mesmo diretório.

Todos os arquivos da pasta atual serão enviados para o serviço do Docker e apenas eles podem ser usados para manipulações do "Dockerfile". É importante notar que o arquivo "Dockerfile" é uma sequência de instruções lidas do topo à base e cada linha é executada por vez.

Se alguma instrução depender de outra, essa dependência deve ser escrita mais acima no documento. O resultado de cada instrução do arquivo é armazenado em cache local. Caso o "Dockerfil"e não seja modificado na próxima criação da imagem (build), o processo não irá levar muito tempo, pois tudo estará no cache. Se houver alterações, apenas a instrução modificada e as posteriores serão executadas novamente.

Podemos conferir se a imagem foi gerada utilizando o comando:

docker images
Linux: Introdução e utilização do Docker
...podemos rodar o contêiner e acessar o sistema criado, utilizando o comando:

docker run -it debian0:vim_auto

Página anterior     Próxima página

Páginas do artigo
   1. Sobre o Docker
   2. Execução e Controle de Contêineres
   3. Utilizando volumes
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Docker: Uma abordagem didática para tempos obscuros

Inicializando servidor Ubuntu na AWS e rodando apache em Container

Rodando contêineres e aplicações Linux x86 no Raspberry Pi

Subindo o Zabbix e Grafana no Podman com Pod

Docker Swarm no CentOS 8

  
Comentários
[1] Comentário enviado por fabio em 26/09/2019 - 14:10h

Muito bem escrito o artigo, meus parabéns!

[2] Comentário enviado por olshugo em 26/09/2019 - 16:04h


[1] Comentário enviado por fabio em 26/09/2019 - 14:10h

Muito bem escrito o artigo, meus parabéns!


Muito obrigado!

[3] Comentário enviado por thomasddiego em 27/09/2019 - 02:20h

O artigo ficou excelente Hugo, parabéns!!!

[4] Comentário enviado por olshugo em 27/09/2019 - 08:13h


[3] Comentário enviado por thomasddiego em 27/09/2019 - 02:20h

O artigo ficou excelente Hugo, parabéns!!!


Obrigado Thomas, espero que tenha ajudado!

[5] Comentário enviado por CleyberSec em 30/09/2019 - 14:45h

Seu artigo me esclareceu em muitas dúvidas, valeu d+. Muito boas as referências. Parabéns!

[6] Comentário enviado por amaurybsouza em 30/09/2019 - 15:56h

Show de bola seu artigo, eu estou aprendendo Docker e ajudou muito.

[7] Comentário enviado por diegomrodrigues em 31/03/2020 - 22:18h

Parabéns!
A utilização de volumes ajuda muito no Docker.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts