gocha124の日記

ごちゃごちゃ書きます

Dockerfileからshellを使ってビルド

Dockerfileを記述する。

[centos@ip-172-31-39-215 build_rails]$ vi Dockerfile


FROM enakai00/fedora:21
MAINTAINER txcdb738

RUN rpm --rebuilddb; yum install -y make gcc gcc-c++ ruby-devel rubygem-rails \
                   rubygem-therubyracer libsqlite3x-devel
ADD create_app.sh /usr/local/bin/create_app.sh
RUN chmod u+x /usr/local/bin/create_app.sh && /usr/local/bin/create_app.sh
ADD init.sh /usr/local/bin/init.sh
RUN chomd u+x /usr/local/bin/init.sh
CMD ["/usr/local/bin/init.sh"]

Dockerfileから呼び出すcreate_app.sh

[centos@ip-172-31-39-215 build_rails]$ vi create_app.sh
#!/bin/bash -x

mkdir /root/rails
cd /root/rails
rails new dengonban
cd dengonban
echo "gem 'therubyracer', platforms: :ruby" >> Gemfile
sed -i "s/# \(config.time_zone\) =.*/\1 = 'Tokyo' /" \
       config/application.rb
sed -i "s/\(config.serve_static_assets\) =.*/\1 = true/" \
       config/environments/production.rb
RAILS_ENV=production bundle exec rake assets:precompile
rails generate scaffold Message name:string content:text date:datetime
rake db:migrate RAILS_ENV="production"

Dockerfileから呼び出されるinit.sh

[centos@ip-172-31-39-215 build_rails]$ vi init.sh 

#!/bin/bash

export SECRET_KEY_BASE=\
$(ruby -e 'require "securerandom"; print SecureRandom.hex(64)')
cd /root/rails/dengonban
rails s -e production -p 80 -d

cat <<EOF >>~/.bashrc
trap 'pkill -TERM ruby-rmi; sleep 3;exit0' TERM
EOF
exec /bin/bash
docker run -itd -p 8000:80 --name rails01 txcdb738/rails:ver1.0
docker ps -l
docker top rails01 ax | unexpand -t20

docker stop rails01
docker rm rails01