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