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](https://github.com/fceller) **Tags**: #docker