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
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
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
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
...podemos rodar o contêiner e acessar o sistema criado, utilizando o comando:
docker run -it debian0:vim_auto