$ cd gameon
Running with Docker Compose
Starting game services locally
Obtain the source for the root project (gameontext/gameon)
git clone https://github.com/gameontext/gameon.git
git clone firstname.lastname@example.org:gameontext/gameon.git
Change to the gameon directory
Setup your environment (one time, see below).
$ ./go-admin.sh choose # choose Docker Compose $ eval $(./go-admin.sh env) # set script aliases $ alias go-run # confirm `docker/go-run.sh`
Set up core game services (repeatable):
$ go-run setup
This will ensure that you have an env file suitable for use with
docker-composeand pulls the initial images required for running the system.
When using Vagrant, this step is done as part of provisioning the VM.
Start core game services:
$ go-run up
Wait for the system warm up
$ go-run wait
or, to watch the logs stream by, try:
$ go-run logs
Carry on with building your room!
$ go-run down
Files supporting Docker Compose
docker subdirectory of the root project
contains the files required to make game services go:
docker-compose.ymldeclares core game and required backing services
docker-compose.override.yml.examplecan be copied to
docker-compose.override.ymland modified to support overlays for local development
go-run.shhelps with starting, stopping, and cleaning up Game On! core services.
docker-functionsis used by
go-run.shto generate the keystore volume and perform docker-specific, environment-appropriate commands.
When Game On! runs in the cloud, it uses etcd to obtain its configuration.
When running locally it expects all this to be fed to it via the environment.
gameon.env file defined in the docker directory provides this local
configuration for Docker Compose.
Some additional notes regarding environment-specific config:
When you run natively, the "host" for your containers is the OS itself, so 127.0.0.1 will work just fine (default url in
When you run in Docker Toolbox, there is a VirtualMachine acting as the host for your containers. This means that (for URLs and other things) you need to use the IP of the VM. A
gameon.<DOCKER_MACHINE_NAME>envfile will be created as a modified copy of
Similarly, if you are running with Vagrant, you need to use the Vagrant VM’s IP address. A
gameon.vagrantenvfile will be created in the docker directory as a modified copy of
SSH Keys and KeyStores
Because Game On! uses a Certificate for HTTPS and for JWT signing, we need to
generate one for local use. We create a special mapped volume (called
that provides a generated local keystore to containers.
Scripts will ensure that this volume exists.
Additional notes when running with Docker Compose:
docker-composestill requires sudo on linux platforms, even though
The Vagrant VM allows all
sudooperations with no password.
Rebuilding Core Game services with Docker Compose
The following instructions assume you’ve cloned the root repository,
and are interested in editing the
map service as an example:
Change to the gameon directory
$ cd gameon
Obtain the source for the project that you want to change.
$ git submodule init map $ git submodule update map
Make your changes from within the child directory
$ cd map $ git checkout -b newbranch
Edit source or docker/image files using your favorite IDE.Tip
If you plan to edit projects with Eclipse, run
./bin/eclipse.shto generate eclipse project files.
Compile the source and rebuild docker image
To rebuild and restart the map service:
$ go-run rebuild map
To rebuild the image without recreating the container:
$ go-run rebuild_only map
If the service argument is left off, it will attempt to rebuild all of the core services (auth, map, mediator, player, room, webapp). If those submodules haven’t been checked out, there is no harm. The image from dockerhub will be used instead.NoteTop-down vs. incremental updates
If you want to try using incremental publish, where your changes are live inside the container without requiring the container to be stopped, started, rebuilt or otherwise messed with, you’ll need to create and/or add some lines to
./docker/docker-compose.override.ymlto create overlay volumes.
./docker/docker-compose.override.yml.exampleprovides examples of how to map expected github subrepository paths to volumes. Copy snippets from that file for the services you’re interested in into
./docker/go-run.shwill accommodate the creation of the
docker-compose.override.ymlfile, but you may need to run
eval $(./docker/go-run.sh env)to update your aliases.
Push your changes to a new branch. From the map directory:
$ git add -u $ git commit -s
Once you make your commit, if you go back to the root directory, you will see a pending change for map. This indicates that the submodule is different than the version from the current branch of the root project.
Do not check in changes to submodule versions
+ Care must be taken to avoid staging these files if you otherwise end up making changes to files in the root project itself.
Iterative development of Java applications with WDT
If you’re using Eclipse for development, and have opted for the iterative
docker-compose.override.yml for volumes, e.g.),
we recommend using WebSphere Developer Tools (WDT) to work with the Java
services contained in the sample. There is some (one time) configuration
required to make WDT happy with the docker-hosted applications,
but you are then free to use eclipse to make changes to the project that will
be immediately picked up by the running server without having to rebuild
or restart anything.
Determining the host IP address (Docker Toolbox)
After you have Docker Toolbox installed, verify the host machine name:
docker-machine ls. The default name is
default, but if you’re a former
Boot2Docker user, it may be
dev instead. Substitute this value appropriately
in what follows.
If you aren’t using the docker quick-start terminal, you’ll need to set the
docker environment variables in your command shell using
eval "$(docker-machine env default)".
Get the IP address for your host using
docker-machine ip default.
./docker/go-run.sh will create a
gameon.<DOCKER_MACHINE_NAME>env file to account for the IP address