Commit ba30039b authored by Clenimar Souza's avatar Clenimar Souza
Browse files

add instructions for container exercises

parents
# 2 - Contêineres
- [ ] Questionário sobre contêineres, docker e docker-compose.
## Atividade prática
Nestes repositórios temos dois serviços em Python que se comunicam entre si: [server](https://git.lsd.ufcg.edu.br/clenimar/dummy-server), [client](https://git.lsd.ufcg.edu.br/clenimar/dummy-client). Os repositórios contêm instruções de como fazer o deploy dos dois serviços na sua máquina.
### 1 - Crie imagens para cada serviço
Crie uma Dockerfile para cada serviço e construa as imagens a partir disso (`docker build`). Rode os contêineres (`docker run`) e tenha certeza de que estão funcionando como esperado.
Dicas:
- Para a criação da Dockerfile, pense nos passos para executar a aplicação localmente na sua máquina.
- `docker build` aceita dois parâmetros obrigatórios: um é o contexto da build, que é o diretório a partir de onde você constrói a imagem. Por padrão esse contexto é o mesmo diretório onde estão a Dockerfile e os arquivos, logo se usa `.`. O segundo é a tag, ou nome da imagem, `-t`.
- Dê nomes que façam sentido aos seus contêineres. O padrão a ser seguido é: `registro/usuario/app:versão`. O Dockerhub (`docker.io`) é o registro padrão do Docker, e por esse motivo pode ser omitido no nome da imagem. Por exemplo, `docker.io/clenimar/myapp:v0.1` e `clenimar/myapp:v0.1` são equivalentes. Se você quiser outro registro, isso precisa estar explícito no nome da imagem.
- Crie uma conta no Dockerhub para que você consiga enviar suas imagens para a nuvem.
- A `versão` (ou tag) padrão é `latest`. Procure evitar utilizar a tag `latest` e passe a versionar suas tags de forma explícita (assim você sabe exatamente que versão do código está no ar). O recomendado é utilizar versionamento semântico para sua aplicação.
Após ter certeza de que suas imagens funcionam corretamente faça push para o seu registro (Dockerhub).
> **Entregável**
> 1. As duas Dockerfiles que você criou.
> 2. O nome das duas imagens que você gerou (públicas no Dockerhub).
Extras:
* Liste seus contêineres ativos: `docker ps`.
* Veja o log dos seus dois contêineres: `docker logs <container>`. `<container>` pode ser o ID do contêiner ou seu nome, ambos são mostrados no `docker ps`.
### 2 - Usando docker-compose para orquestrar seus serviços
Agora, crie uma compose file para que seus dois serviços sejam implantados ao mesmo tempo (`docker-compose up`).
Dicas:
* `docker-compose` aceita o parâmetro `-f` com o caminho da compose file. Se você está no mesmo diretório da compose file E ela se chama `docker-compose.yml`, você pode omitir esse parâmetro. Caso contrário, ele é necessário.
* Quando dois ou mais serviços estão numa compose file, eles fazem parte da mesma rede, e você pode contactá-los através de dois endereços: `172.17.0.1:PORTA`, que é através da interface padrão do Docker; ou através do nome do serviço na compose file.
* Problemas com ordem em que os serviços sobem? A opção `depends_on` do docker-compose pode te ajudar.
> **Entregável**
> 1. A compose file que você criou.
Extras:
* Rode seus serviços em background: `docker-compose up -d` e vejas os logs individualmente com `docker-compose logs <container>`, onde `<container>` é o nome do serviço na compose file.
* Derrube seus contêineres: `docker-compose down`.
### 3 - Flickor replicado e HAProxy
Agora que você já testou com duas aplicações simples, é hora de colocar o Flickor replicado numa compose file. Crie uma compose file que define 2 instâncias de Flickor e um HAProxy.
* Construa a imagem do Flickor a partir do repositório. Envie essa imagem pra seu Dockerhub (público).
* Para haproxy, utilize a imagem padrão: `haproxy:latest`.
* Ambos os Flickor devem usar o mesmo volume para guardar as imagens no host.
* Crie um arquivo de configuração de HAProxy que faça o balanceamento de carga entre as duas instâncias.
* Utilize um volume para mapear esse arquivo de configuração do HAProxy no contêiner. Exemplo: `-v $PWD/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg`.
> **Entregável**
> 1. A configuração do HAProxy que você criou.
> 2. A compose file que você criou.
Extras:
* Por que usamos `$PWD` no exemplo anterior de volume? Exemplo: `-v $PWD/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg`.
### Entregáveis
Todos os entregáveis devem ser enviados através deste formulário.
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment