revelとはGo言語で作られたWebアプリケーションフレームワークです。
Go言語自体はC++の代用を試みて開発されている言語なので高速で処理を行えます。
さらに、スクリプト言語に近い形で記述することができて並列処理も得意としています。
そんなGo言語を使って作られたフレームワークは当然のごとく爆速らしいです。
そんなGo言語+revelを最近流行りのDockerを使って開発環境を作りたいと考えました。
イメージとしては、こんな感じにしたいと思います。
1,「Go言語+revel」のイメージ
2,「MySQLなどのデータベース」のイメージ
2, ソースコードやデータベースファイルなどを管理する環境
※ 取りあえず、今回は(1)のみを作成します。
CentOS7.0にDockerのインストールを行う場合は特にリポジトリの追加も必要なく以下のような感じに行う事ができます。
# yum -y update
# yum -y install docker
# systemctl enable docker
# systemctl start docker
※ SELinuxやファイアウォールは各自で設定を行ってください。
雛形となるDockerイメージを作成します。
Dockerfileと呼ばれるファイルにコンテナの構成内容をガリガリ書いていきます。
# vi Dockerfile
FROM centos
RUN useradd revel
RUN yum -y update
RUN yum -y install golang git mercurial sqlite sqlite-devel
ENV GOPATH /var/gocode/
RUN echo 'export GOPATH="$GOPATH"' >> /etc/profile
RUN echo 'export PATH="$PATH:$GOPATH/bin"' >> /etc/profile
RUN mkdir /var/gocode/
RUN go get github.com/revel/revel
RUN go get github.com/revel/cmd/revel
RUN go get github.com/mattn/go-sqlite3
RUN source /etc/profile; revel help
USER revel
ENV HOME /home/revel/
ENV GOPATH /home/revel/gocode/
RUN mkdir -p /home/revel/gocode/{bin,pkg,src}
RUN echo 'export GOPATH="$GOPATH"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.bash_profile
RUN echo 'yes no | cp -ripf /var/gocode /home/revel/ > /dev/null 2>&1' >> ~/.bash_profile
EXPOSE 9000
VOLUME /home/revel/gocode/src/
# docker run -it -p 9000:9000 revel bash --login
# docker run -it -p 9000:9000 --volume /root/src:/home/revel/gocode/src revel bash --login
# docker run -it -p 9000:9000 --volume /root/src:/home/revel/gocode/src revel bash --login -c 'revel run sample'
※ revelの実行は原則的にrevelユーザが行います。
※ revelの雛形は/var/gocode/の中に存在していてそれを元にログインのたびに初期化して使用します。
※ revelのソースコードはホスト側や別のコンテナなど外部のボリュームで管理できるようにします。
Dockerfileを元にイメージをビルドします。
イメージにはrevelというイメージ名を付けました。
# docker build --no-cache -t revel .
※ キャッシュを使用しないオプションをつけていますが必要なければ外してしまっても問題ありません。
イメージ一覧はこのように確認できます。
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
revel latest fb1a981ee328 About an hour ago 753.7 MB
centos 7 88f9454e60dd 2 weeks ago 223.9 MB
centos centos7 88f9454e60dd 2 weeks ago 223.9 MB
centos latest 88f9454e60dd 2 weeks ago 223.9 MB
ホストOS側にソースコードを格納するディレクトリを作成します。
# mkdir /root/src
# chmod 777 /root/src
イメージを元にコンテナを作成してシェルを起動し、フレームワークのサンプルを生成してみます。
# docker run -it -p 9000:9000 -v /root/src:/home/revel/gocode/src revel bash --login
$ revel new sample
$ revel run sample
ブラウザからアクセスできる事を確認します。
URLの例) http://127.0.0.1:9000
このような画面が表示できたら一度終了して、ホスト側にソースコードが保存されている事を確認します。
# ls -al /root/src
合計 4
drwxrwxrwx 6 root root 74 3月 20 21:56 .
dr-xr-x---. 3 root root 4096 3月 20 22:19 ..
drwxr-xr-x 3 1000 1000 14 3月 20 21:56 code.google.com
drwxr-xr-x 5 1000 1000 45 3月 20 21:56 github.com
drwxr-xr-x 3 1000 1000 24 3月 20 21:56 gopkg.in
drwxrwxr-x 7 1000 1000 100 3月 20 21:56 sample # <-- これ
新たにコンテナを作成して今度は直接フレームワークを起動します。
# docker run -it -p 9000:9000 -v /root/src:/home/revel/gocode/src \
revel bash --login -c 'revel run sample'
これで先ほどと同じようにブラウザでアクセスできるはずです。
取りあえず、イメージを作成してみて・・・
予想以上に試行錯誤したので中々大変でしたが、今後の開発に大きく影響を及ぼすような可能性を感じました。
参考サイト
» Docker上でRailsアプリケーション開発 TECHSCORE BLOG
Go – 「最速」フルスタックWebフレームワーク「revel」の紹介 – Qiita
最近のコメント