developing and testing microservices with docker
JavaScript HTML Shell CSS
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
services updated blog post Apr 17, 2017
tests
web updated blog post Apr 17, 2017
.gitignore removed all docker files Apr 17, 2017
.jshintrc added v2 boilerplate, added user service Apr 4, 2017
.travis.yml added tests Apr 10, 2017
README.md Update README.md Jul 14, 2017
docker-compose.yml updated docker compose Apr 17, 2017
migrate.sh

README.md

Developing and Testing Microservices with Docker

Build Status

Want to learn how to build this project?

Check out the blog post.

Want to use this project?

Setup

  1. Fork/Clone this repo

  2. Download Docker (if necessary)

  3. Make sure you are using a Docker version >= 17:

    $ docker -v
    Docker version 17.03.0-ce, build 60ccb22

Build and Run the App

Set the Environment variables

$ export NODE_ENV=development

Register with the OpenWeatherMap API, and add the key as an environment variable:

$ export OPENWEATHERMAP_API_KEY=YOUR_KEY_HERE

Fire up the Containers

Build the images:

$ docker-compose build

Run the containers:

$ docker-compose up -d

Migrate and Seed

With the apps up, run:

$ sh migrate.sh

Sanity Check

Test out the following services...

(1) Users - http://localhost:3000
Endpoint HTTP Method CRUD Method Result
/users/ping GET READ pong
/users/register POST CREATE add a user
/users/login POST CREATE log in a user
/users/user GET READ get user info
(2) Locations - http://localhost:3001
Endpoint HTTP Method CRUD Method Result
/locations/ping GET READ pong
/locations GET READ get all locations
/locations/user GET READ get all locations by user
/locations/:id GET READ get a single location
/locations POST CREATE add a single location
/locations/:id PUT UPDATE update a single location
/locations/:id DELETE DELETE delete a single location
(3) Web - http://localhost:3003
Endpoint HTTP Method CRUD Method Result
/ GET READ render main page
/login GET READ render login page
/login POST CREATE log in a user
/register GET READ render register page
/register POST CREATE register a new user
/logout GET READ log a user out
/add POST CREATE add a new location
/user GET READ get user info
(4) Locations Database and (5) Users Database

To access, get the container id from docker ps and then open psql:

$ docker exec -ti <container-id> psql -U postgres
(6) Functional Tests

With the app running, update the NODE_ENV environment variable and then run the tests:

$ export NODE_ENV=test
$ docker-compose up -d
$ docker-compose run tests npm test

Update NODE_ENV when you're ready to develop again:

$ export NODE_ENV=development
$ docker-compose up -d

Commands

To stop the containers:

$ docker-compose stop

To bring down the containers:

$ docker-compose down

Want to force a build?

$ docker-compose build --no-cache

Remove images:

$ docker rmi $(docker images -q)

Run unit and integration tests:

$ export NODE_ENV=test
$ docker-compose up -d
$ docker-compose run users-service npm test
$ docker-compose run locations-service npm test