Software Challenge : Entwicklungsumgebung

Voraussetzungen

Die Projekte liegen lokal in $HOME/development/socha, d.h. $HOME/development/socha/webapp fuer die Webanwendung und $HOME/development/socha/cs fuer Client/Server.

Alles wird in Container gemacht, so dass direkt auf dem Host nichts weiter installiert werden muss, ausser Docker selbst. Dazu: https://www.docker.io/gettingstarted/#h_installation

Web-Anwendung

  • Container Image mit Ruby 1.8 und libs fuer Datenbanken: docker pull octohost/ruby-1.8 (siehe https://github.com/octohost/ruby-1.8.7p352)
  • Container Image für MySQL erstellen. git clone git@github.com:SKoschnicke/docker-mysql.git && cd docker-mysql && docker build -t mysql_image . (siehe https://github.com/SKoschnicke/docker-mysql)
  • Mysql Container starten: docker run -v="$HOME/development/socha/db":"/var/lib/mysql" -d --name mysql -p 3306 mysql_image
  • Anwendung in Ruby Container starten: docker run -t -i -v="$HOME/development/socha/webapp":"/webapp" --link=mysql:mysql -p 3000 --name socha_webapp octohost/ruby-1.8 /bin/bash
  • Im Container Gems installieren: cd webapp && bundle
  • Datenbank-Config anlegen: cd config && cp database.yml.example database.yml
  • Aus dem Container wieder rausgehen per Ctrl-P, Ctrl-Q
  • Host und Port der Datenbank stehen in den Umgebungsvariablen MYSQL_PORT_3306_TCP_ADDR und MYSQL_PORT_3306_TCP_PORT, d.h. die database.yml sieht dann so aus:
development:                                                                                                                                                                                                                                                                     
  adapter: mysql                                                                                                                                                                                                                                                                
  host: <%= ENV['MYSQL_PORT_3306_TCP_ADDR'] %>                                                                                                                                                                                                                                         
  port: <%= ENV['MYSQL_PORT_3306_TCP_PORT'] %>                                                                                                                                                                                                                                        
  database: sc_development                                                                                                                                                                                                                                                      
  username: mysql                                                                                                                                                                                                                                                                
  password: ''
  encoding: utf8                                                                                                                                                                                                                                                                
  timeout: 5000
test:                                                                                                                                                                                                                                                                    
  adapter: mysql                                                                                                                                                                                                                                                                
  host: ENV['MYSQL_PORT_3306_TCP_ADDR']                                                                                                                                                                                                                                         
  port: ENV['MYSQL_PORT_3306_TCP_PORT']                                                                                                                                                                                                                                         
  database: sc_test                                                                                                                                                                                                                                                      
  username: mysql                                                                                                                                                                                                                                                                
  password: ''
  encoding: utf8                                                                                                                                                                                                                                                                
  timeout: 5000
  • Wieder mit Container verbinden mit docker attach socha_webapp
  • Datenbank im App-Container initialisieren: cd /webapp && bundle exec rake db:create && bundle exec rake db:schema:load
  • Dann im Container cd /webapp && bundle exec ./script/server
  • Jetzt sollte der Server laufen, mit docker ps kann man den Host-Port des socha_webapp-Containers herausfinden und dann im Browser per http://localhost:<host-port> zugreifen, z.B.:
 ~> docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED             STATUS              PORTS                     NAMES
cc2a61d28bf3        socha_webapp:latest   /bin/bash           12 seconds ago      Up 11 seconds       0.0.0.0:49153->3000/tcp   socha_webapp              
1c92f7bf5cb4        mysql_image:latest    /bin/sh -c /start   7 minutes ago       Up 7 minutes        3306/tcp                  mysql,socha_webapp/mysql  

Hier ist der Host-Port 49153.

Client/Server

Container mit Oracle JDK 7: https://index.docker.io/u/democracyworks/oracle-jdk-7/

docker pull democracyworks/oracle-jdk-7
docker run -t -i -v $HOME/development/socha/cs:/cs democracyworks/oracle-jdk-7 /bin/bash

Im Container Ant installieren: apt-get install -u ant

Jetzt kann man im Container die Anwendung mit dem Java-Compiler oder per Ant bauen, z.B. cd cs && ant