Docker container pour application Rails

Docker permet la création de container linux via un Dockerfile. Etant sur OSX, j'utilise boot2docker pour avoir accès au LXC. Vous pouvez le trouver ici: boot2docker

On crée notre vm et on la start:

$ boot2docker init
$ boot2docker up

N'oubliez pas d'exporter le DOCKER_HOST. Vérifiez que tout est fonctionnel avec un docker version.

Placez-vous dans un nouveau dossier et créez un fichier Dockerfile:

FROM ubuntu

# On update le container
RUN apt-get -y update  
# On upgrade
RUN apt-get upgrade -y

# Install wget et git
RUN apt-get -yq install wget git

# Install deps
RUN apt-get -yq install libcurl4-openssl-dev nodejs openssh-server python-setuptools

RUN easy_install supervisor

RUN apt-get install -yq zlib1g zlib1g-dev build-essential sqlite3 libsqlite3-dev openssl libssl-dev libyaml-dev libreadline-dev libxml2-dev libxslt1-dev npm

# Install ruby
RUN git clone https://github.com/sstephenson/rbenv.git ~/.rbenv  
RUN git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build  
RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile  
RUN echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

ENV PATH /.rbenv/bin:/.rbenv/shims:$PATH

RUN echo PATH=$PATH  
RUN rbenv init -

RUN rbenv install 2.1.2 && rbenv global 2.1.2

# On install pas les ruby docs
RUN echo "gem: --no-rdoc --no-ri" >> ~/.gemrc

# Install bundler
RUN gem install bundler && rbenv rehash

# Install Rails
RUN gem install rails && rbenv rehash

# On bind le dossier local ./app sur /rails
ADD ./app /rails

WORKDIR /rails

RUN bundle install

# On init notre ssh et notre supervisor
RUN mkdir /var/run/sshd  
RUN mkdir /var/log/supervisor

# On bind notre fichier de supervisord pour une config plus facile
ADD supervisord.conf /usr/local/etc/supervisord.conf

# On défini les identifiants ssh root
RUN echo 'root:root' |chpasswd

RUN sed --in-place=.bak 's/without-password/yes/' /etc/ssh/sshd_config

EXPOSE 22 3000

CMD ["supervisord", "-n"]  

Il faut donc créer notre app dans le dossier app, soit faire un git clone d'une app existante, soit faire un rails new.

On va créer notre fichier supervisord.conf:

[supervisord]
nodaemon=true

[program:sshd]
command=/usr/sbin/sshd -D

[program:rails]
command=rails server  
directory=/rails  

On build notre image:

$ docker build -t fskd/rails .

On run notre container:

$ docker run -d -P --name rails fskd/rails

Pour voir si votre container est lancé:

$ docker ps

Pour voir votre app rails dans le navigateur:

# récupération du port 3000 lié à notre host-only
$ docker port rails 3000
0.0.0.0:49154  

Votre app est dispo sur localhost:49154

Pour vous connectez en ssh:

$ docker port rails 22
0.0.0.0:49155

$ ssh root@$(boot2docker ip) -p 49155
a11afe9b1a16#  
a11afe9b1a16#  

Enjoy!

comments powered by Disqus