Skip to content
Adam Wead edited this page Feb 2, 2021 · 15 revisions

We have dockerized a lot of the parts of the ScholarSphere stack. A developer can run the entire stack (presently postgres, minio, rails, and solr) or any combination of components via docker-compose

Setup (OS X)

If you don't have docker installed, you can install Docker via the following commands

brew cask install docker --appdir=~/Applications
open ~/Applications/Docker.app

Building Containers

Starting up the whole stack:

docker-compose up --build

Starting up bits of the stack (lets say you want to run rails locally, and run minio and solr in docker)

docker-compose up solr minio

docker-compose commands will run foregrounded, you can shoot them to the background by using the -d flag. For example:

docker-compose up -d solr

Running Commands

If you need to run commands in the context of the rails application, you can do so by running the following prefix

docker-compose exec web {{ command }}

Examples of things you might want to do

docker-compose exec web bundle install
docker-compose exec web rails c

RSpec

You can run the entire test suite within a container:

docker-compose exec web bash
bundle exec rake solr:init
export RAILS_ENV=test
bundle exec rspec

To run a specific test outside of the container:

docker-compose exec -e RAILS_ENV=test web bundle exec rspec path/to/spec

Note: you may need to run rake solr:init prior to this.

Logs

By default docker-compose will run foregrounded, and all the logs will be smashed together. I like to run in daemon mode, and then look at the logs on a service by service basis.

docker-compose logs solr 

and to follow the logs

docker-compose logs -f solr

Stopping running containers

Shut it all down!

docker-compose down

Shut only bits down

docker-compose down minio

Stateful data

Stateful data is handled via docker volumes. minio, solr, and postgres all house their data on named volumes. this allows a developer to maintain databases, indexes, and files between reboots of the application.

To delete all data for a component of the stack, for example, minio, make sure minio is turned off:

docker-compose down minio

then remove the volume

docker volume ls | grep minio # make note of the volume name. (this name should be deterministic)
docker volume rm scholarsphere-4_minio-data

If you just want to poke around at the data you can mount the volume in a container.

Get a listing of containers:

docker-compose images

Then use the name of the solr container to mount its data at the /data path:

docker run -it -v scholarsphere-4_solr-data:/data ubuntu bash

From within the new shell:

cd /data

Clone this wiki locally