O que vamos fazer
Vamos criar um simples app em python. Mas no lugar de instalar dependências no seu PC, vamos jogar tudo isso dentro de um container com o Docker.
Requisitos
Tenha certeza de que está tudo azul com bolinhas brancas. Dê uma olhada em como obter o Docker para seu sistema operacional. E o segredo é rodar o comando abaixo pra saber se está tudo funcionado como esperado.
# Execute
$ docker run hello-world
# Parte do resultado esperado
Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
Como fazer…
…o Container
O container é definido pelo Dockerfile. E pra colocar de forma simples, imagine que está montando um PC, instalando o sistema operacional e conectando à uma rede. O Dockerfile é basicamente isso, ele vai dizer como montar o container.
Então aqui vai os primeiros passos para nosso experimento:
# Crie e acesse um repositório
$ mkdir meu_app ; cd meu_app
$ touch Dockerfile
Agora dentro do arquivo criado, coloque o código abaixo, que ele vai dizer para o Docker o que fazer:
# "Herde" da imagem oficial do python
FROM python:2.7-slim
# Defina o diretório de trabalho
WORKDIR /app
# Copie o conteúdo do diretório corrente, para /app (dentro do container)
ADD . /app
# Instale as dependências com o pip (requirements a gente escreve mais a frente)
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Deixe a porta 80 disponível
EXPOSE 80
# Variáveis de ambiente...
ENV NAME Mundo
# E agora execute meu app.py com o python.
CMD ["python", "app.py"]
…o app em Python
Vamos precisar de mais dois arquivos. O requirements.txt que diz as dependências que o pip vai instalar e o código do app em si, que fica no arquivo app.py.
Abaixo só confie, copie e cole o código abaixo na mesma pasta em que está o Dockerfile.
requirements.txt
Flask
Redis
app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Olá {name}! Estou vivo!</h3>" \
"<b>Nome do host:</b> {hostname}<br/>" \
"<b>Visitas:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
…construir o container
Nesse ponto você deve ter o seguinte:
$ ls
app.py Dockerfile requirements.txt
Se você seguiu os passos direitinho até agora, e eu não escrevi nada errado, é só executar esse comando:
docker build -t meu_container .
Explicação do comando
- -t : parametro para definir a tag (um nome pro nosso container)
- . : um ponto no final de tudo, diz pra montar o container com base no Dockerfile do diretório corrente. Então, lembre-se de estar dentro do repositório.
…executar o container
Primeiro vamos ver se o container foi criado, depois executamos (não é obriado testar, é só pra ver se existe, afinal estamos aprendendo…):
$ docker image ls
$ docker run -p 4000:80 meu_container
Explicação do comando
- -p : Associa a posta 4000 no host com a 80 do Container
- meu_container : é o nome do nosso container :)
Conclusão
Os comandos do docker são simples, e explicados em maiores detalhes aqui.
- Criamos 3 arquivos:
- Dockerfile : Descreve como construir o container
- app.py : um app em python usando Redis e Flask
- requirements.txt : Os requerimentos do ambiente python
- Construimos o container:
- Tendo como base o Dockerfile
- Executamos o Container
- E ele estava vivo!
Comentários