Redmineプラグインもくもく会 山梨 #003回 開発環境
前回、plugin開発用のRedmineが起動できる様になりました。
こちらのページで、akikoさんが丁寧に説明されているので、説明は不要と思いますが、もくもくの覚え書きとして、僕なりの解釈で説明を書いてみようと思います。
と言いましても、結局Dockerfileを初めて読みまして、ちんぷんかんぷん。でしたので、
Dockerfile 少し勉強しました。
だいたい写経で勉強した次の日には、忘れてしまいます。(^_^;)
なので、ひとまず、もくもくで自分用に書き換えたDockerfileから説明を書いていきます。
その前に、
注意すること
がありました。皆さんはご存知と思いますが。。。
Dockerfileの中で、RUN でコマンドを実行するたびにイメージがコミットされて、 次回、Dockerfileを実行した時は、そのキャッシュが使われる。
つまり、Dockerfileを書き換えても、前のRUN行は再実行されない。
例で説明しますと、
1回目。updateとinstallは実行される。
FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y curl ★この行を修正する
書き換え後、
2回目。updateはキャッシュが使われ古いupdate結果が使われる。(updateは再実行されない)
FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y curl nginx ★この行を修正した
キャッシュを使わないでDockerfile実行する設定にすれば、良いですが時間がかかる。
こう書くのがおすすめっぽい。
FROM ubuntu:14.04 RUN apt-get update && apt-get install -y curl nginx
皆さん、Dockerをどういう用途で使っているのか気になりますが、
もくもくの説明に入りたいと思います。
.-------.
★が説明
.-------.
------------------------------------------ ★ruby:2.1.10のイメージをベースにして作成 ------------------------------------------ FROM ruby:2.1.10 ------------------------------------------ ★ラベル(説明省略) ------------------------------------------ LABEL maintainer="K.SUZUKI / (Twitter: @KuniSioaji)" \ description="Image to run Redmine simply with sqlite to try/review plugin." ------------------------------------------ ★コメント(説明省略) ------------------------------------------ # # You can run target version of Redmine. # If you use this Dockerfile only, try this: # $ docker build -t redmine_stable . # $ docker run -d -p 3000:3000 redmine_stable # # You can change Redmine version with arg # $ docker build --rm --build-arg REDMINE_VERSION=master -t redmine_master . # $ docker run -d -p 3000:3000 redmine_master # ------------------------------------------ ★構築(build)時の引数(変数)を指定しなかった時のデフォルト値 ★引数でRedmineのバージョンを渡す事で、 構築するRedmineのバージョンを指定可能にしている。 ------------------------------------------ ### get Redmine source ARG REDMINE_VERSION=3.4-stable ------------------------------------------ ★Dockerfileのビルドはbashではなくshで実行されるためエラーが出る。 shをbashへのシンボリックリンクで置き換えることで対応する。 ★echo :引数の表示 ------------------------------------------ ### Replace shell with bash so we can source files ### RUN rm /bin/sh && ln -s /bin/bash /bin/sh && echo "REDMINE_VERSION: ${REDMINE_VERSION}" ------------------------------------------ ★最低限必要なパッケージを追加 ------------------------------------------ ### install default sys packeges ### RUN apt-get update && apt-get install -qq -y \ git vim \ sqlite3 ------------------------------------------ ★Redmineのソースを /tmp/ ディレクトリにgit cloneする (引数でタグバージョン指定してバージョン変更) ★コメント文の方は、安定版(ブランチ)をcloneする場合の記述 ★clone先は、/tmp/redmine_coディレクトリとなる。 ------------------------------------------ #RUN cd /tmp && git clone --depth 1 -b ${REDMINE_VERSION} https://github.com/redmine/redmine redmine RUN cd /tmp && git clone --depth 1 -b ${REDMINE_VERSION} --single-branch https://github.com/redmine/redmine redmine_co ------------------------------------------ ★引数の表示? ------------------------------------------ RUN echo "REDMINE_VERSION: ${REDMINE_VERSION}" ------------------------------------------ ★ WORKDIR 作業ディレクトリ(/tmp/redmine_coに、cloneしたソースがある) 以後、このディレクトリでRUN実行されていく。 ------------------------------------------ WORKDIR /tmp/redmine_co ------------------------------------------ ★SQLite3用のdatabase.ymlをconfig/に作成する ------------------------------------------ RUN echo $'test:\n\ adapter: sqlite3\n\ database: /tmp/data_co/redmine_test.sqlite3\n\ encoding: utf8mb4\n\ \n\ development:\n\ adapter: sqlite3\n\ database: /tmp/data_co/redmine_development.sqlite3\n\ encoding: utf8mb4\n'\ >> config/database.yml ------------------------------------------ ★bundle installする ------------------------------------------ RUN gem update bundler RUN bundle install --without mysql postgresql rmagick test ------------------------------------------ ★Redmine本体のマイグレーションをする ------------------------------------------ RUN bundle exec rake db:migrate RUN bundle exec rake generate_secret_token ------------------------------------------ ★CMD:ここまでに作成したイメージで実行するコマンド (構築(build)時には、実行しない) port 3000で起動する ------------------------------------------ CMD bundle exec rails s -p 3000 -b '0.0.0.0' EXPOSE 3000
リファレンスより。
※RUN と CMD を混同しないでください。
RUN が実際に行っているのは、コマンドの実行と結果のコミットです。
一方の CMD は構築時には何もしませんが、イメージで実行するコマンドを指定します。
今日は、ここまで。 次回は、docker-compose.ymlと、起動などやっていく予定です。