Because of my current job, the last few years I have become more interested on virtualization and cloud computing technologies like OpenStack, but during the last month I have been playing with a new and disrupting technology called docker. So, as an exercise to learn about it I started working on a docker container for BigBlueButton online web conferencing platform. The focus of this article is about setting up the docker image for this software, but lets talk first about what’s docker is and what it can do.
What’s docker and what’s so disruptive about it ?
docker leverages LxC (linux containers) and kernel cgroups to create application containers that are much more efficient than running separate virtual machines in a cloud computing environment. The media is calling this type of technology “lightweight virtualization”. Why this terminology ? unlike virtual machines that run a complete operating system and applications on top of it, docker containers are composed of just a base linux operating system, your application and its dependencies, and reuses the host’s kernel. This make docker containers much more efficient, fast and with little overhead, a container can be started in a few seconds, or less.
The advantages of docker compared with current virtualization technologies are many, these are some of them:
- Lightweight: as a docker container only includes your application and needed dependencies and reuses the host’s kernel, they have a very small footprint and boot in seconds with little overhead.
- Isolation: a docker container running on the same host than others will not be able to negatively affect other containers.
- Management of applications with conflicting dependencies: You can have different docker containers that may have conflicting dependencies for your application: two applications that rely on different versions of the same package, no problem, create two different docker images from the same base image and add the different dependencies versions with your app.
- Portability: Use the same container for the complete development pipeline of your application: from the developers laptop, to the QA server and to production, goodbye to developers saying: “it works on my machine” when a problem arises on one of the other environments.
- Repeatability of deployments: create exact docker containers from the same docker image every time from an already exiting image, or build them from a Dockerfile.
It’s important to mention that docker isn’t a good fit for all cases. The use of linux only technologies like lxc and cgroups, means that docker can only run on Linux hosts, and can only run linux based containers. So, if you need to run another operating system like for example MS Windows, you will need to use traditional virtualization instead.
There are already tons of docker images at docker Hub, you can find more than 15,000 already “dockerized” applications and base operating systems, like CentOS, Ubuntu, Debian, OpenSuSE (and soon Mageia), and applications and services like wordpress, MySQL, PosgreSQL, nginx, MongoDB. etc, the catalog is huge.
We have included docker in mageia cauldron (the development version), and it will be available in mageia 5. You can install mageia 5 alpha1 and follow the wiki instructions to change the repositories to point to cauldron if you want to try it out. Soon we will also have mageia 3, 4 and cauldron base images available on docker hub, I will be posting when they’re available.
Ok, enough introduction, lets get down to business.
What is BigBlueButton ?
BigBlueButton is an open source web conferencing system for online e-learning with many of the features of commercial propietary products like Citrix Gotomeeting. You can visit BigBlueButton website to learn more about it.
About this image and the Dockerfile
This image is based on Ubuntu 10.04 x86_64, which is the officially supported O.S. for BigBlueButton 0.81. The Dockerfile follows the official installation instructions found on BigblueButton’s documentation, plus some fixes needed to successfully boot the container (see the scripts folder at github). To run docker you need to do it as root or use sudo.
You can find a prebuilt docker image from Docker Hub. To be able to use it, first it has to be pulled off from the Hub:
# docker pull juanluisbaptiste/bigbluebutton:latest
And then you can run a container from it, see instructions below on how to do it.
This is still an alpha version use it at your own risk. There is still some stuff about how to handle the different services that compose the BigBlueButton app inside the docker container that I need to improve.
After you clone this repository you need to build the image with the docker command like this:
# cd docker-bigbluebutton
# docker build -t bbb_0.81 .
How to launch the container
This docker command will launch a new BigBlueButton container:
# docker run -d –name bbb bbb_0.81
You can attach to the container while it starts and wait for it to finish, then take the IP address from the end of the output. To attach to the container run the following docker command:
# docker attach –sig-proxy=false bbb
How to access the container
For now it’s only possible to access the BigBlueButton container using the private IP address docker has assigned to it. after you attach to the container you will see an output like the following one telling you the IP address:
Use this IP address to locally access your
Access that address from your browser and you will get to the demo page like this one:
NOTE: If you try to use the exposed ports, the bundled nginx server will show the default page instead of BigBlueButton’s demo page. I’m working on this.
In a second part I will describe how to link this container to a WordPress container with the BigBlueButton plugin already installed and configured, and a MySQL container for the WordPress installation, stay tuned.
Go to Part2.
Installed latest docker on ubuntu14.04 server in AWS, was able to pull everything down successfully, but not sure how to get to "cd docker-bigbluebutton" directory from main os system prompt. When I cloned it all doenloaded, where is it?
thanks for getting this going.
I'm not sure I'm understanding what you are talking about. With docker you don't do a "checkout" like in git, when you run docker pull you are pulling a docker image from the Hub's remote repository into your docker local repository, and then start a container using that image like explained on the article. You don't interact directly with the images files, everything is done through the docker command as explained.