とりあえず d というスクリプトから確認を。
基本的には
- vagrant ssh で接続して
- docker/scripts 配下のスクリプトを実行
という形になってます。つうか restore-db.sh とか見るに再起動は rm しなくて良いのか。つうかこれ、docker
を sudo docker.io
に置換すれば今の環境で使えますね、
使途を以下に控えておきます。
- rdbm.sh は rake db:migrate 用
- cmd.sh は任意のコマンド (rake assets:precompile とか) 用
- restore-db.sh は setup_database.sh を実行 (コンテナを止めて再起動している)
- rc.sh は rails c 用
- rebuild.sh はコンテナを削除して build して再起動
- restart.sh はコンテナを削除して再起動
む、rebuild.sh と restart.sh の差を理解できてないぞ。あとコマンド手で入力したところによれば docker stop rails
は効かない模様。
Dockerfile 見てみます
redis は以下のみ、です。
FROM johncosta/redis
ただ、container 起動時にポートなどの情報を付与してあげる必要があります。
$ sudo docker.io run -d --name redis -p 6379 redis:latest
次は postgres ですが、こちらは以下。
FROM stackbrew/ubuntu:12.04
MAINTAINER Ben Firshman "ben@orchardup.com"
RUN locale-gen en_US.UTF-8
RUN apt-get -qq update && LC_ALL=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive apt-get install -y -q postgresql-9.1 postgresql-contrib-9.1 postgresql-9.1-postgis libpq-dev sudo
# /etc/ssl/private can't be accessed from within container for some reason
# (@andrewgodwin says it's something AUFS related)
RUN mkdir /etc/ssl/private-copy; mv /etc/ssl/private/* /etc/ssl/private-copy/; rm -r /etc/ssl/private; mv /etc/ssl/private-copy /etc/ssl/private; chmod -R 0700 /etc/ssl/private; chown -R postgres /etc/ssl/private
ADD postgresql.conf /etc/postgresql/9.1/main/postgresql.conf
ADD pg_hba.conf /etc/postgresql/9.1/main/pg_hba.conf
ADD run /usr/local/bin/run
RUN chmod +x /usr/local/bin/run
VOLUME ["/var/lib/postgresql"]
EXPOSE 5432
CMD ["/usr/local/bin/run"]
そういえば DB は -v 使ってデータ領域共有した方が良いのかどうか。postgresql.conf によればデータの格納領域は以下なのかどうか。
data_directory = '/var/lib/postgresql/9.1/main'
もひとつ、某所に deploy した版な rails 向け Dockerfile が以下。
FROM ubuntu:12.04
MAINTAINER talkingquickly.co.uk <ben@talkingquickly.co.uk>
ENV DEBIAN_FRONTEND noninteractive
# REPOS
RUN apt-get -y update
RUN apt-get install -y -q python-software-properties
RUN add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) universe"
RUN add-apt-repository -y ppa:chris-lea/node.js
RUN apt-get -y update
# INSTALL
RUN apt-get install -y -q build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config libmysqlclient-dev libpq-dev make wget unzip git vim nano nodejs mysql-client mysql-server gawk libgdbm-dev libffi-dev
RUN git clone https://github.com/sstephenson/ruby-build.git /tmp/ruby-build && \
cd /tmp/ruby-build && \
./install.sh && \
cd / && \
rm -rf /tmp/ruby-build
# Install ruby
RUN ruby-build -v 2.0.0-p481 /usr/local
# Install base gems
RUN gem install bundler rubygems-bundler --no-rdoc --no-ri
# Regenerate binstubs
RUN gem regenerate_binstubs
RUN apt-get install -y -q postgresql-client
# Rails app
ADD docker/rails/start-server.sh /start-server.sh
RUN chmod +x /start-server.sh
# RUN mkdir /app
# Preinstall majority of gems
WORKDIR /tmp
ADD ./Gemfile Gemfile
ADD ./Gemfile.lock Gemfile.lock
RUN bundle install
RUN mkdir /app
# ADD . /app
ENV RAILS_ENV production
ADD ./docker/rails/setup_database.sh /setup_database.sh
RUN chmod +x /setup_database.sh
EXPOSE 3000
CMD ["/start-server.sh"]
setup_database.sh ってどこで実行してるんだろ。
とりあえず
ぺちぴーな開発環境向けなソレを、という話があったりするのですが、そのあたりは次回の #okidevops あたりになるのかどうか。