ArangoDB, NodeJS and Docker

Problem

I'm looking for a head start in using the ArangoDB docker image.

Solution

We will use the guesser game for ArangoDB from

https://github.com/arangodb/guesser

This is a simple game guessing animals or things. It learns while playing and stores the learned information in an ArangoDB instance. The game is written using the express framework.

Note: You need to switch to the docker branch.

The game has the two components

  • front-end with node.js and express
  • back-end with ArangoDB and Foxx

Therefore the guesser game needs two docker containers, one container for the node.js server to run the front-end code and one container for ArangoDB for the storage back-end.

Node Server

The game is itself can be install via NPM or from github. There is an image available from dockerhub called arangodb/example-guesser which is based on the Dockerfile from github.

You can either build the docker container locally or simply use the available one from docker hub.

unix> docker run -p 8000:8000 -e nolink=1 arangodb/example-guesser
Starting without a database link
Using DB-Server http://localhost:8529
Guesser app server listening at http://0.0.0.0:8000

This will start-up node and the guesser game is available on port 8000. Now point your browser to port 8000. You should see the start-up screen. However, without a storage backend it will be pretty useless. Therefore, stop the container and proceed with the next step.

If you want to build the container locally, check out the guesser game from

https://github.com/arangodb/example-guesser

Switch into the docker/node subdirectory and execute docker build ..

ArangoDB

ArangoDB is already available on docker, so we start an instance

unix> docker run --name arangodb-guesser arangodb/arangodb
show all options:
  docker run -e help=1 arangodb

starting ArangoDB in stand-alone mode

That's it. Note that in an productive environment you would need to attach a storage container to it. We ignore this here for the sake of simplicity.

Guesser Game

Some Testing

Use the guesser game image to start the ArangoDB shell and link the ArangoDB instance to it.

unix> docker run --link arangodb-guesser:db-link -it arangodb/example-guesser arangosh --server.endpoint @DB_LINK_PORT_8529_TCP@

The parameter --link arangodb-guesser:db-link links the running ArangoDB into the application container and sets an environment variable DB_LINK_PORT_8529_TCP which points to the exposed port of the ArangoDB container:

DB_LINK_PORT_8529_TCP=tcp://172.17.0.17:8529

Your IP may vary. The command arangosh ... at the end of docker command executes the ArangoDB shell instead of the default node command.

Welcome to arangosh 2.3.1 [linux]. Copyright (c) ArangoDB GmbH
Using Google V8 3.16.14 JavaScript engine, READLINE 6.3, ICU 52.1

Pretty printing values.
Connected to ArangoDB 'tcp://172.17.0.17:8529' version: 2.3.1, database: '_system', username: 'root'

Type 'tutorial' for a tutorial or 'help' to see common examples
arangosh [_system]>

The important line is

Connected to ArangoDB 'tcp://172.17.0.17:8529' version: 2.3.1, database: '_system', username: 'root'

It tells you that the application container was able to connect to the database back-end. Press Control-D to exit.

Start Up The Game

Ready to play? Start the front-end container with the database link and initialize the database.

unix> docker run --link arangodb-guesser:db-link -p 8000:8000 -e init=1 arangodb/example-guesser

Use your browser to play the game at the address http://127.0.0.1:8000/. The

-e init=1

is only need the first time you start-up the front-end and only once. The next time you run the front-end or if you start a second front-end server use

unix> docker run --link arangodb-guesser:db-link -p 8000:8000 arangodb/example-guesser

Author: Frank Celler

Tags: #docker