Trabalhar com Microservices é algo extremamente produtivo, você pode ter cada parte da sua aplicação em projetos/repositórios separados, utilizar a melhor linguagem para aquela funcionalidade e ainda fazer o deploy de cada Microservice isoladamente, sem afetar o restante da sua aplicação.
Nesse tutorial vamos demonstrar com exemplos como mapear cada docker container nas configurações do Nginx, sendo tanto para sub-domínios quanto para uma pasta em um domínio específico.
Estrutura de diretório
Nesse projeto de exemplo, para efeito de simplicidade, teremos 2 microservices, 1 nginx como nosso proxy e 1 database noSQL. Claro que você pode depois alterar essa arquitetura para usar quantos microservices você quiser, em qualquer linguagem que quiser e utilizar database tanto SQL quanto noSQL.
accounts/
|_ Dockerfile
pagerduty/
|_ Dockerfile
nginx/
|_ conf/
|_ sites.conf
|_ .htpasswd
|_ Dockerfile
docker-compose.yml
Configuração do Docker Compose para microservices
web:
build: nginx/
ports:
- "80:80"
links:
- pagerduty
- accounts
- db
pagerduty:
build: pagerduty/
environment:
- PAGERDUTY_TOKEN
accounts:
build: accounts/
links:
- db
db:
image: rethinkdb
volumes_from:
- dbData
# It is recommended to use a separate container for data volumes.
# This provides some benefits, for e.g., the db container can be upgraded without affecting the data
dbData:
image: busybox
volumes:
- /data
command: echo Data Volume for db
Dockerfile do microservice “accounts”
FROM dockerfile/nodejs # Bundle app source COPY . /repo WORKDIR /repo # Install app dependencies RUN npm install # Build the web app RUN npm run build ENV PORT 3000 ENV NODE_ENV production EXPOSE 3000 CMD ["npm", "start"]
Dockerfile do microservice “pageduty”
FROM iojs ADD . /repo WORKDIR /repo RUN npm install ENV PORT 4000 ENV NODE_ENV production EXPOSE 4000 CMD iojs bin/www
Dockerfile do Nginx
FROM nginx ADD conf/sites.conf /etc/nginx/conf.d/sites.conf ADD .htpasswd /etc/nginx/.htpasswd # For htpasswd generation help, follow this tutorial # https://www.digitalocean.com/community/tutorials/how-to-set-up-http-authentication-with-nginx-on-ubuntu-12-10
Configurando o Nginx
server {
listen 80;
server_name accounts.example.com;
location / {
proxy_pass http://accounts:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name pagerduty.example.com;
location / {
proxy_pass http://pagerduty:4000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
server {
listen 80;
server_name db.example.com;
location / {
proxy_pass http://db:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Criando as imagens e subindo os containers com o docker-compose
# You can start your service with
PAGERDUTY_TOKEN={TOKEN} docker-compose up -d
# Stop services
docker-compose stop
# Rebuild service(s)
docker-compose build
docker-compose build accounts
Comentários