by shigemk2

当面は技術的なことしか書かない

DockerでPlay Frameworkの環境をつくってみる for CentOS

概要

これから始める「DockerでかんたんLAMP環境 for CentOS」 - さくらのナレッジ

基本的にDockerはUbuntuベースで作られているらしく、Dockerの開発者もUbuntuでコンテナを作っているそうです。

なので、CentOSのコンテナをごにょごにょしているのがあんまりない気がしたけど、 そんなことは関係なくCentOSでPlay Frameworkの環境が構築されているDockerfileを書いてみました。

Githubにあげました

shigemk2/docker-play · GitHub

参考にしました

Dockerfileの書き方や、monitの使い方などは、↓のページを参考にしています。

これから始める「DockerでかんたんLAMP環境 for CentOS」 - さくらのナレッジ

イメージは、monitというサーバープロセスの監視ツールを使って、Apache、fluentd、sshdを実行するものです。
これで、Docker経由でmonitさえ起動させてしまえば、普通のサーバーと同じようにssh経由でログインの出来るウェブサーバが完成します。

sshログインしたいなあとか思ったので、monitでsshdが動くようにして、ssh経由でログインできるサーバーを作りました。

でも、yumではScalaもPlay Frameworkもインストール出来ないので、

  1. wgetでソースコードを落とす
  2. 解答する(まずunzipとかtarとか入っていないので事前にyumで入れる)
  3. 解答したやつの所有者を変更する
  4. ユーザーを作り、ホームディレクトリに突っ込み、パスを通す

という作業をScalaやPlay Frameworkでやっています。

DockerfileではRUNとかADDとかはroot権限で、かつルートディレクトリで実行されるので、 適当に所有者やパーミッションを変更してやる必要はあります。

Dockerfile一部抜粋

書き直すところ

IPとパスワードですね。IPは何を書けばいいんだろうって四苦八苦した覚えがある。

FROM centos
MAINTAINER shigemk2

ENV IP 自分のPCのグローバルIP
ENV PW sshログイン時に必要なパスワードなど。これは適当でいい。

RUN useradd play && echo "play:$PW" | chpasswd

まずsudoも入っていないからsudoを入れて…

RUN yum --enablerepo=remi,epel install sudo openssh-server syslog monit java-1.7.0-openjdk java-1.7.0-openjdk-devel git -y

# play
ENV PLAY_VERSION 2.2.1
RUN wget http://downloads.typesafe.com/play/$PLAY_VERSION/play-$PLAY_VERSION.zip 

RUN unzip play-$PLAY_VERSION.zip -d /usr/local
RUN chown -R play.play /usr/local/play-$PLAY_VERSION 
RUN cd /usr/local/bin/ && ln -s /usr/local/play-$PLAY_VERSION/play

# play port
EXPOSE 9000 

# play debug port
EXPOSE 9999

# scala
ENV SCALA_VERSION 2.11.0
RUN wget http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz
RUN tar xzvf scala-$SCALA_VERSION.tgz
RUN mv scala-$SCALA_VERSION /home/play/
RUN chown -R play.play /home/play/scala-$SCALA_VERSION

RUN echo "PATH=$PATH:/home/play/bin:/home/play/scala-$SCALA_VERSION/bin" >> /home/play/.bashrc
RUN source /home/play/.bashrc
RUN chown play.play /home/play/.bashrc

実行

$ sudo docker build -t centos-play -rm=true .
$ sudo docker run -d -t -p 12812:2812 -p 9000:9000-p 10022:22 centos-play /usr/bin/monit -I

これでコンテナが出来上がるので、あとはplay newで適当にアプリを作成してplay runしたら動きます。

f:id:shigemk2:20140506014338p:plain

Githubにあげました

shigemk2/docker-play · GitHub

あ、イメージをコミットしてない。