FusionForge

Difference between revisions of "Docker"

From FusionForge Wiki
Jump to: navigation, search
(Creating an image containing a Debian sid + PostgreSQL + Apache 2: Get rid of all the manual stuuf and document only the debian variant of baseimage-docker)
(Dockerfile for fusionforge-minimal: The Dockerfile is now in Git in obergix repo)
Line 31: Line 31:
 
  sudo docker build -t=YOURUSER/baseimage-docker-debian:wheezy .
 
  sudo docker build -t=YOURUSER/baseimage-docker-debian:wheezy .
  
== Dockerfile for fusionforge-minimal ==
+
== Build a Docker image for the fusionforge test suite ==
  
Copy this to Dockerfile.sid_fusionforge-minimal and follow the instructions in the comments:
+
We will build a fusionforge image containing a similar setup as the one of the development VM.
<nowiki>
 
#
 
# Simple dockerfile for Debian sid/unstable image running a fusionforge-minimal installation.
 
#
 
# Build it like so:
 
#
 
#  root@host~# docker build -t=myfusionforge/sid_fusionforge-minimal - < Dockerfile.sid_fusionforge-minimal
 
#
 
# Launch the generated image like so:
 
#
 
#  root@host~# docker run -t -d -p 2222:22 -p 8080:80 -p 4443:443 myfusionforge/sid_fusionforge-minimal
 
#
 
# Connect like so, with the root password being "whatever123".
 
#
 
#  $ ssh -p 2222 root@localhost
 
#
 
# Adapted from http://www.debian-administration.org/article/698/Automating_the_creation_of_docker_images by Olivier Berger
 
#
 
  
 +
=== Prepare the test suite image ===
  
 +
Get a copy of the Dockerfile in obergix's repo and build the image
  
#
+
  git clone -b docker https://fusionforge.org/anonscm/git/fusionforge/users/olberger.git
# From this base-image / starting-point
+
cd fusionforge/vm/docker
#
+
cp ../packer/scripts/fusionforge-source.sh ./
FROM myfusionforge/sid_postgresql
+
docker build -t=YOURUSER/fusionforge .
 
 
#
 
#  Authorship
 
#
 
MAINTAINER olivier.berger@telecom-sudparis.eu
 
 
 
#ENV DEBIAN_FRONTEND noninteractive
 
#ENV DEBIAN_PRIORITY critical
 
#ENV DEBCONF_NOWARNINGS yes
 
 
 
RUN echo "deb http://http.debian.net/debian sid main" > /etc/apt/sources.list
 
 
 
#
 
# Update apt
 
#
 
RUN apt-get update -q -q
 
RUN apt-get upgrade --yes --force-yes
 
 
 
# Fusionforge installation involves modifying files shipped by other
 
# packages, and we need to choose the default UCF option which erases
 
# previous configuration by installing maintainer's version.
 
ENV UCF_FORCE_CONFFNEW yes
 
 
 
# Start PostgreSQL whose database is needed for fusionforge installation, right before installing
 
RUN /etc/init.d/postgresql start ; apt install fusionforge-minimal --yes --force-yes
 
 
 
#
 
# Finally launch runit.
 
#
 
ENTRYPOINT ["/usr/sbin/runsvdir-start"]
 
</nowiki>
 
  
 
=== Creating a container ===
 
=== Creating a container ===
Line 95: Line 48:
 
Use the dockerfile to create a container with something like :
 
Use the dockerfile to create a container with something like :
 
<code>
 
<code>
: $ docker run -t -d -p 2222:22 -p 8080:80 -p 4443:443 myfusionforge/sid_fusionforge-minimal
+
: $ docker run -t -d -p 2222:22 -p 8080:80 -p 4443:443 YOURUSER/fusionforge
 
</code>
 
</code>
  

Revision as of 15:49, 2 May 2014

Creating a FusionForge development/tests environment using Docker containers

This HOWTO is meant to illustrate how Docker lightweight containers can be used to set-up a development and test environment for FusionForge, when it is complete.

This document is work in progress and is probably misleading in the current state, sorry.

The principle is to prepare an image of a Debian distribution containing an installation of PostgreSQL and Apache2 which can be used to create a container where FusionForge will be installed.

A similar setup can probably be achieved using other distribution packages.

Installing Docker on Debian testing/sid

Install the package (note that the 'docker' command is renamed in 'docker.io' to avoid conflict with a pre-existing package):

apt-get install docker.io
ln -s /usr/bin/docker.io /usr/local/bin/docker

If you already played with LXC/cgroups, make sure you remove your /sys/fs/cgroup entry from /etc/fstab, and let the cgroupfs-mount package take care of it, otherwise you'll get clear and informative errors such as:

[error] client.go:2329 Error getting size: bad file descriptor


Creating a base Debian stable image containing OpenSSH and runit

It is possible to achieve the same goal using different manual steps, but we will directly reuse a Debian variant of baseimage-docker, which provides all the necessary bits, in order to simulate a VM in a docker container.

Create Debian stable baseimage-docker image

See : https://github.com/olberger/baseimage-docker/tree/wheezy which contains a modified version of baseimage-docker for Debian. We'll use the stable/wheezy version.

git clone -b wheezy https://github.com/olberger/baseimage-docker 
cd baseimage-docker/image
sudo docker build -t=YOURUSER/baseimage-docker-debian:wheezy .

Build a Docker image for the fusionforge test suite

We will build a fusionforge image containing a similar setup as the one of the development VM.

Prepare the test suite image

Get a copy of the Dockerfile in obergix's repo and build the image

git clone -b docker https://fusionforge.org/anonscm/git/fusionforge/users/olberger.git
cd fusionforge/vm/docker
cp ../packer/scripts/fusionforge-source.sh ./
docker build -t=YOURUSER/fusionforge .

Creating a container

Use the dockerfile to create a container with something like :

$ docker run -t -d -p 2222:22 -p 8080:80 -p 4443:443 YOURUSER/fusionforge

Voilà, FusionForge should then be installed and available at: https://localhost:4443/.

Forge configuration

Modify the host by editing /etc/gforge/config.ini.d/zzzz-local.ini to add :

[core]
web_host = localhost
https_port = 4443

The admin user's password can then be reset using:

root@2eebbd24093c:/usr/share/gforge# bin/forge_set_password admin whatever123

allowing you to login at https://localhost:4443/account/login.php?return_to=/ with user admin and password whatever123.


Saving the installation in a Docker image

At any time, the container which contains an installation of FusionForge can be saved as an image with the following (where 5.2.3-1 is the tag set to the value of the Debian package version in unstable):

$ docker commit 9060bc9d0b94 myfusionforge/ff-minimal:5.2.3-1

Note: it may be advisable to first stop apache2 and postgresql before saving the image... TO BE TESTED

A new container can then be created from that image, using something like:

$ docker run -t -d -p 2222:22 -p 8080:80 -p 4443:443 myfusionforge/ff-minimal:5.2.3-1 /usr/sbin/runsvdir-start

Sharing files between host and guest

To ease the process of testing changes on the guest, by directly modifying files from the host, it may be useful to share the contents of /usr/share/gforge between the host and guest.

This can be done, before installing fusionforge, by launching the PostgreSQL + Apache 2 container with something like :

$ docker run -v ~/docker/usr-share-gforge:/usr/share/gforge -t -d -p 2222:22 -p 8080:80 -p 4443:443 myfusionforge/sid_postgresql

This will install all fusionforge files so that they can be edited (sudo helps) directly from the host in ~/docker/usr-share-gforge

Troubleshootings / FIXME

Things to fix:

  • need to regen SSH keys, workaround:
sudo chroot /var/lib/docker/containers/6cf...gnagnagna.../root/
dpkg-reconfigure openssh-server
  • SSH key access is replaced by a password (why not), but sshd_config not updated (duh!), so comment out and restart openssh (how?) or commit/restart the container:
#PermitRootLogin without-password
  • gforge-db-postgresql failing during SQL initial replay, at first glance due to missing:
DEBIAN_FRONTEND=noninteractive