Construção da API do treinamento para rodar com o Docker Compose Nesse tutorial iremos colocar um certificado SSL no Apache Rodando dentro do container.
# docker-machine rm default
# docker-machine create --driver virtualbox default
# docker-machine env default
# eval $(docker-machine env default)
Pegar o IP que é usado pela VM do Docker para rodar as aplicações
# docker build -t <your username>/redis .
# docker run -d --name redis -p 6379:6379 <your username>/redis
# docker run -d --name redis -p 6379:6379 jonathanbaraldi/redis
Com isso temos o container do Redis rodando na porta 6379.
Ir no diretório /node onde tem o Dockerfile da aplicação, e rodar o build. Fazendo a imagem # docker build -t /node .
Rodando a imagem do node, fazendo a ligação com o container do Redis
# docker run -d --name node -p 8080:8080 --link <redis name> <your username>/node
# docker run -d --name node -p 8080:8080 --link redis jonathanbaraldi/node
Com isso já temos a aplicação rodando, conectada no Redis
Ir no diretório /nginx onde tem o Dockerfile da aplicação, e rodar o build. Fazendo a imagem:
# docker build -t <your username>/nginx .
Criando o container do nginx a partir da imagem e fazendo a ligação com o container do Node
# docker run -d --name nginx -p 80:80 --link <app running> <your username>/nginx
# docker run -d --name nginx -p 80:80 --link node jonathanbaraldi/nginx
Feito isso, colocando os containers para rodar, e interligando eles, podemos ver como funciona nossa aplicação que tem um contador de acessos. Para rodar nosso docker-compose, precisamos remover todos os containers que estão rodando e ir na raiz do diretório para rodar.
# docker-compose up -d
# curl <ip>:80
----------------------------------
This page has been viewed 29 times
----------------------------------
# docker-compose -f docker-compose.yml -f production.yml up -d
E após isso acessar no IP:80, pegando usando
# docker-machine env default
Criar o volume e dar o nome e a ele. # docker volume create --name
Depois de criando, adicionar ele na criação do docker-compose. Com isso ele não irá conter dados. O que é preciso e levantar um container, atachar esse volume e então rodar o comando de copia dos dados do host para dentro do container.
# /Library/WebServer/Documents/jon/api-treinamento-docker-compose
Copiar a pasta volumeteste para a pasta tmp dentro do container. E isso se replicará, pois o volume está montado em todos containers.
# docker cp volumeteste e8d0ef878dd8:/tmp/
# docker cp arquivo.txt <id do container>:/arquivo.txt
# docker cp <id do container>:/arquivo.txt arquivo.txt
Com isso, o volume começa a ser populado com os arquivo necessários locais, ou pode-se rodar um script para popular o volume com dados vindos da internet. Para entrar dentro do container e ver os arquivos que foram copiados executar o shell de dentro do container:
# docker exec -it <id container> /bin/bash
# cd /tmp/volumeteste
# ls
Modificando seu Compose para produção. É muito importante você fazer as adaptações necessárias que são mais apropriadas para o ambiente de produção. Estas alterações podem incluir:
- Remover qualquer ligação de volumes com código de aplicação, para que o código que está dentro do container não possa ser alterado de fora.
- Usar portas diferentes no host
- Setar variáveis de ambiente diferentes (Exemplo: restart: always)
- Adicionar serviços extras (Agregador de LOG)
Para estas razões, você irá provavelmente querer definir um arquivo Comple adicional, digamos producao.yml, que irá especificar a configuração apropriada para produção. Este arquivo de configuração APENAS precisa incluir as mudanças que você gostaria de fazer do arquivo original. O arquivo adicional pode ser aplicado sobre o original docker-compose.yml para criar a nova configuração.
Uma vez que você fez o segundo arquivo de configuração, diga para o compose usar o segundo arquivo com a opção -f:
Fazer o deploy das mudanças
Quando você faz as mudanças no seu código da aplicação e precisa fazer o rebuild da sua imagem e recriar os seus containers. O Docker faz isso sem parar seu serviço, e irá trocar somente os que mudaram. Para fazer o redeploy dos seus containers:
Ou, na pasta do docker-compose.yml
Para gerar os certificados para esse exercício, é só rodar os comandos abaixo dentro da pasta /nginx/certificado.