Docker, Canvas

& LTI App Testing

Docker Overview

  • Platform for building & running lightweight, isolated application containers.

  • Reliably deploy pretty much anything, pretty much anywhere.

  • Two primary components:

    • Docker Engine: local, client/server software

    • Docker Registry: public or private image repository

Docker Engine

  • docker daemon - manages building, running and distributing of containers

  • docker client - command line UI for interacting with the docker daemon
  • communication via socket or tcp

Under the Hood

  • UnionFS: docker images consist of transparently overlaid "layers". Base images are built upon using instructions defined in a Dockerfile.
  • libcontainer: container execution driver allows docker to manipulate:
    • namespaces for isolating the container workspace
    • cgroups for isolating hardware resources

Client, e.g.

%> docker ps

Show list of running containers

%> docker build -t myapp/ngnix dockerfiles/ngnix

Build an image

%> docker pull foo/postgres

Pull an image from a central repo

%> docker run -d -t --name ngnix myapp/ngnix
%> docker run -d -t --name postgres foo/postgres

Run some containers

%> docker stop ngnix
%> docker rm ngnix

Stop & remove running containers

Docker Registry

Docker Hub: centralized, public image repository

Dockerfile example

FROM phusion/baseimage:latest
MAINTAINER Jay Luker <lbjay@reallywow.com>

# Download latest package lists
RUN apt-get update

# Install dependencies
RUN apt-get install -yq \
    openjdk-7-jre-headless \
    wget

# Download version 1.4.2 of logstash
RUN cd /tmp && \
    wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz && \
    tar -xzvf ./logstash-1.4.2.tar.gz && \
    mv ./logstash-1.4.2 /opt/logstash && \
    rm ./logstash-1.4.2.tar.gz

# Copy assets to their prospective locations
ADD ./assets/logstash.conf /opt/logstash.conf
ADD ./assets/run.sh /opt/run.sh
ADD ./assets/dashboard.json /opt/logstash/vendor/kibana/app/dashboards/default.json
RUN chmod 755 /opt/run.sh

# Kibana
EXPOSE 9292

# Start logstash
CMD ["/opt/run.sh"]

mh-userstats/docker/logstash/Dockerfile

Fig

Wrapper to simplify orchestration of

application services and components

redis:
  image: dockerfile/redis
  ports:
    - "6379:6379"
  volumes_from:
    - shareddata
  command: redis-server /etc/redis/redis.conf --dir /shareddata
 
elasticsearch:
  build: ./docker/elasticsearch
  ports:
    - "9200:9200"
    - "9300:9300"
  volumes_from:
    - shareddata

logstash:
  build: ./docker/logstash
  ports:
    - "9292:9292"
  links:
    - redis
    - elasticsearch
    
shareddata:
  image: ventz/dataos
  volumes: 
    - "/shareddata"
  command: /bin/true

mh-userstats/fig.yml

%> fig up
%> fig ps
%> fig stop

canvas-docker

Containerized Canvas instances for dev/testing

https://github.com/harvard-dce/canvas-docker

canvas-docker image

https://registry.hub.docker.com/u/lbjay/canvas-docker

%> docker pull lbjay/canvas-docker
%> docker run -t -i -p "3000:3000" --name=canvas lbjay/canvas-docker

Demo!

Canvas/LTI & Docker

By James Luker

Canvas/LTI & Docker

  • 1,109