Cap. 2 - Exercício1: Gerenciamento e utilização de Volumes

Para aplicar os conhecimentos explanados nesta aula, será necessário atualizar a aplicação criando uma nova imagem e verificando o impacto da (não) utilização de volumes em conjunto com um contêiner do docker. Siga as seguintes instruções:

  1. Atualize o código da aplicação, para que inclua agora o suporte a criação de um arquivo de log, conforme abaixo:
import logging
from flask import Flask, request
from logging.handlers import RotatingFileHandler

app = Flask(__name__)

handler = RotatingFileHandler('/tmp/foo.log', maxBytes=10000, backupCount=1)
handler.setLevel(logging.INFO)
app.logger.addHandler(handler)

@app.route("/")
def hello():
    app.logger.error(('The referrer was {}'.format(request.referrer)))
    return "Hello World!"
  1. Realize a criação de uma imagem, cuja nome será oficina-docker e etiqueta será aula2-volumes através do comando ``docker build -t oficina-docker:aula2-volumes . ``;
  2. Crie um contêiner com o nome aula-2 a partir da imagem com um vínculo da porta 5000 do host para a porta 5000 do contêiner para facilitar a visualização através do um browser, através do comando docker run -d --name aula-2 -p 5000:5000 oficina-docker:aula2-volumes;
  3. Acesse a aplicação a partir de um browser no endereço http://localhost:5000 e realize algumas requisições para que estas possam ser inseridas pela aplicação no arquivo ‘foo.log’ dentro do contêiner;
  4. Visualize o conteúdo do arquivo através do comando docker exec -it aula-2 cat /tmp/foo.log;
  5. Remova o contêiner através do comando docker rm -f aula-2;
  6. Repita os passos 3 e 5 (sem passar pelo passo 4) e tente visualizar possíveis diferenças no arquivo foo.log;
  7. Crie um volume chamado aula2-logs através do comando: docker volume create aula2-logs;
  8. Remova o contêiner através do comando docker rm -f aula-2;
  9. Recrie o contêiner agora com suporte ao named volume ‘aula2-logs’ através do seguinte comando docker run -d --name aula-2 -p 5000:5000 -v aula2-logs:/tmp oficina-docker:aula2-volumes;
  10. Repita os passos 4, 5, 6 e tente visualizar as possíveis diferenças no uso dos volumes.

Informações e/ou questões adicionais

Que outros efeitos colaterais temos ao utilizar um arquivo com alto nível de mudança de conteúdo fora de um volume?

Considerando que o objetivo atual é auxiliar no desenvolvimento da aplicação, existe alguma maneira mais simples de manter o arquivo de log ativo e acessível para o desenvolvedor?

Se removermos o contêiner o que acontecerá com o volume?

Se removermos o volume o que acontecerá o arquivo foo.log?

Salvando os trabalhos

Após a realização das atividades, salve o resultado do trabalho no github, através dos seguintes comandos (a partir da pasta onde os trabalhos se encontram):

# Adicionar os arquivos atuais ao repositório
git add .
# Realizar o 'Commit' das mudanças no repositório local.
git commit -m "Aula 2 - Exercicio 1"
# Criar uma etiqueta para esta aula.
git tag -a aula2_1 -m "Aula 2 - Exercicio 1"
# Enviar as mudanças para o repositório remoto.
git push -u origin master aula2_1