Exemplo de uma aplicação WSGI no Docker e comandos para gerenciá-la
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Dockerfile
Readme.md
app.py

Readme.md

Exemplo de Docker com WSGI

Este é um exemplo de aplicação WSGI rodando com uma imagem do CentOS no Docker.

Baixando a imagem do CentOS

Executar esse passo manualmente é opcional, será executado automaticamente ao montar a imagem, se não for feito.

Neste exemplo estou utilizando a imagem centos:latest, que sempre apontará para a última imagem do CentOS presente em https://index.docker.io/. Para fazer o download execute o comando:

docker pull centos:latest

Caso não seja informado o :latest no final do comando, todas as versões do CentOS presente em https://index.docker.io/ serão baixadas.

Criando o aplicativo WSGI

O arquivo app.py é um aplicativo WSGI simples para esse teste, seu conteúdo é:

def application(environ, start_response):
    status = '200 OK'
    headers = [('Content-type', 'text/plain')]
    start_response(status, headers)
    return ['Teste']

Criando o Dockerfile

Depois de criar o aplicativo basta criar no mesmo diretório um arquivo chamado Dockerfile conforme o exemplo:

FROM centos:latest

MAINTAINER Eduardo Klosowski <eduardo_klosowski@yahoo.com>

RUN yum install -y python-gunicorn

ADD app.py /root/app.py

EXPOSE 80

CMD ["gunicorn", "-b", "0.0.0.0:80", "--pythonpath", "/root", "app"]

Os parâmetros utilizados são:

  • FROM: indica a imagem que será utilizada como base.
  • MAINTAINER: nome e email de quem criou esta imagem.
  • RUN: comandos que serão executados dentro de container.
  • ADD: copia arquivos do computador para dentro do container.
  • EXPOSE: indica portas do container que serão expostas.
  • CMD: comando para executar o container caso não seja informado outro.

Basicamente esse arquivo diz para utilizar a imagem centos:latest, instalar o python-gunicorn pelo yum, copiar o arquivo app.py para dentro do container, deixar a porta 80 do container acessível e se for executar o container e não for informado um comando executa o gunicorn.

Montando a imagem

Para montar a imagem basta ir no diretório do Dockerfile e executar o comando:

docker build -t app .

Onde -t é o nome dado ao container e o ponto (.) indica para utilizar os arquivos do diretório atual.

Iniciando imagem

Para iniciar o aplicativo WSGI basta executar o comando:

docker run -d -p 80 app

O gunicorn será executado em segundo plano e a porta 80 do container será mapeado para uma porta do computador, que pode se ver na coluna "PORTS" do comando:

docker ps

Caso queria especificar uma porta basta informar no parâmetro -p:

docker run -d -p 8080:80 app

Neste caso o aplicativo pode ser acessado pela url http://localhost:8080/.

Se o run for executado mais de uma vez, cada vez será criado e iniciado um container diferente.

Parando o aplicativo

Para parar um container do Docker é necessário seu "CONTAINER ID" ou "NAME" que podem ser obtidos pelo comando:

docker ps

Com essa informação, basta executar o comando:

docker stop 89601446c392

Onde 89601446c392 é o "CONTAINER ID" no meu caso.

Reiniciando containers

Para reiniciar um container basta ter o seu "CONTAINER ID" ou "NAME", porém os container que não estão em execução não aparecem no ps, então é necessário utilizar a opção -a:

docker ps -a

Com essa informação, basta executar o comando:

docker start 89601446c392

Apagando containers

Para apagar um container, é necessário pará-lo primeiro, depois executar o comando:

docker rm 89601446c392

Apagando imagens

Para apagar uma imagem é necessário sua "IMAGE ID" ou "REPOSITORY" e "TAG" é opcional, que podem ser obtidos com:

docker images

Com essa informação, basta executar:

docker rmi app

Neste caso estou apagando todas as imagens app. app:latest poderia set utilizado para apagar uma imagem específica.