O básico de containers Docker

5 minutos de leitura

Atualizado em:

Nesse post a ideia é apresentar conceitos básicos de containers docker, não do ponto de vista teórico, mas do ponto de vista prático para aplicações no desenvolvimento de software realizado pelos times de pesquisa do nosso laboratório.

Em poucas palavras, containers são uma tecnologia fantástica! É como se você conseguisse executar várias maquinas virtuais ao mesmo tempo no seu sistema operacional, mas sem a sobrecarga que isso poderia gerar. Isso só é possível por conta da forma como os containers são executados, utilizando boa parte do kernel que já está em execução pelo sistema operacional hospedeiro. Dessa forma, além de ser uma tecnologia fantástica para reprodutibilidade de ambiente de desenvolvimento, os containers docker são uma ferramenta poderosa para desenvolvimento e gerenciamento de aplicações distribuídas.

Nesse artigo irei assumir que o docker já está instalado na sua máquina e que o comando sudo antes do comando docker já não é necessário, pois um configuração extra já foi realizada. Isso pode ser feito seguindo as instruções presentes na documentação do próprio docker.

Recomendo fortemente a utilização de um ambiente de desenvolvimento de software baseado no sistema operacional Linux. Especificamente, iremos utilizar um ambiente desenvolvimento baseado no Ubuntu 24.04, que é a útima versão LTS, longo tempo de suporte, do sistema, o que nos ofere um pouco mais de estabilidade e confiabilidade.

A utilização do Linux em um computador convencional pode ser realizada de duas formas principais, são elas:

  • Dual Boot, executando o SO diretamente no hardware da máquina.
  • Virtualizado com WSL, rodando via máquina virtual otimizada para Windows.

A escolha de uma das opções indicadas acima vai depender das preferências particulares de cada um. Eu, por exemplo, já uso Linux como SO principal da minha máquina há mais de 10 anos, estão fico com a primeira opção.

A documentação para instalação do ecossistema de desenvolvimento de execução de containers Docker de no Linux pode ser acessada por esse link.

Começando a utilizar

o comando docker run geralmente é utilizado em tutoriais para iniciantes, pois ele na verdade agrega vários comandos docker em um único comando. Então é comum você encontrar esse tipo de comando para inciar um container com o sistema operacional ubuntu 24.04, por exemplo:

docker container run -it ubuntu:24.04 bash 

É um comando bem útil pois permite inciar com um container já sendo executado com apenas um comando, mas ele esconde um pouco como as coisas funcionam. E como o objetivo aqui é ser didático, vamos fazer as coisas uma de cada vez:

O primeiro passo é fazer o pull de uma imagem de container. Geralmente isso é possível de ser feito por meio de uma consulta fácil no principal repositório de imagens docker da internet, que é mantido pela própria Docker Inc. Chama-se dockerhub.

Assim, por exemplo, para obtermos uma imagem do ubuntu 24.04 LTS via dockerhub, basta digitar no terminal:

docker image pull ubuntu:24.04

Para visualizar se o download da imagem foi realizado com sucesso, basta então digitar:

docker image ls --all

Uma saída semelhante a essa será exibida na saída do terminal:

REPOSITORY                       TAG       IMAGE ID       CREATED         SIZE
ubuntu                           24.04     a04dc4851cbc   7 months ago    78.1MB
scadalts/scadalts                latest    40c1d6ddcf50   14 months ago   587MB
mysql/mysql-server               8.0.32    1d9c2219ff69   2 years ago     496MB

Pronto, agora já temos nossa imagem de ubuntu para utilizar como base para nossos desenvolvimentos.

Agora queremos transformar essa imagem em um container. É um processo semelhante a instanciar um classe em um objeto. Para fazer isso o comando que iremos utilizar é o docker create é com ele que iremos criar o container, mas ainda não iremos executá-lo. Para criar o container o comando a ser inserido no terminal é:

docker container create --name opentes-c1 -it ubuntu:24.04 /bin/bash

Esse comando cria o container que queremos a partir de uma imagem e associa um nome e um comando a ser executado sempre que o container for ativado, nesse caso o comando é a chamada de um terminal de comandos, /bin/bash.

Criado o container, agora podemos visualizá-lo dessa forma:

docker container ls --all

A saída produzida será algo parecido com:

CONTAINER ID   IMAGE         COMMAND      CREATED      STATUS      NAMES
c243ff4c7708   ubuntu:24.04  "/bin/bash"  5 hours ago  Exited (0)  goofy_shockley
bea59eaae5e0   ubuntu:24.04  "/bin/bash"  7 hours ago  Exited (0)  opentes1
f21cc17a52d3   ubuntu:24.04  "/bin/bash"  6 months ago Exited (0)  sleepy_mahavira

Com o container sendo criado, é possível agora inciá-lo. Para isto precisamos utilizar o comando docker start da seguinte forma:

docker container start -ai opentes-c1

Pronto, temos um container de ubuntu 24.04 funcionando e pronto para receber comandos. Vá em frentem, teste algum deles: ls, cd /home, apt update, etc.

Existem agora duas formas de se conectar a esse container que já está em execução para executar qualquer tipo de comando. A primeira forma é utilizando o comando docker attach e a segunda é executando o comando docker exec.

Para se pendurar em um container, basta digitar o seguinte comando no terminal:

docker container attach opentes-c1

Agora, para executar um comando qualquer no container, o comando a ser digitado é esse:

docker container exec -it opentes-c1 /bin/bash

No caso de execução de comando estamos executando o comando de um terminal, com a opção de uma execução persistente, por isso o resultado dos dois comandos, attach e exec são os mesmos.

Esses são os procedimentos mais básicos para iniciar um aprendizado de manipulação de containers docker. O próximo passo é a criação de containers personalizados utilizando arquivos com uma sintaxe especial para descrição de containers, o Dockerfile.

Docker Files