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