Dockerことはじめ 2

前の投稿の続き。
Linking containers togetherに従い、PlayframeworkアプリとDBを別のコンテナイメージで作成。
link を使用してコンテナ間で、セキュアな情報のやり取りに挑戦。
前回と同じく、Dockerfileからimageを作成。前回と違うのは、アプリとDBを別コンテナにするので、それぞれDockerfileを作成。
DB用Dockerfile

# This is a comment
FROM ubuntu:14.10
MAINTAINER Yuichiro Uyama <yuichiro.uyama@gmail.com>
# mysql install
RUN apt-get -y install mysql-server
RUN /usr/bin/mysqld_safe & \
        sleep 10s && \
        mysqladmin -u root password genesis
RUN echo "CREATE DATABASE play_db character set utf8" > /tmp/createDataBase.sql
RUN /usr/bin/mysqld_safe & \
        sleep 10s && \
        mysql -u root -p --password='genesis' < /tmp/createDataBase.sql
# 権限の追加
RUN echo 'GRANT ALL PRIVILEGES ON play_db.* to root@"%" identified by "genesis";' > /tmp/createUser.sql
RUN echo "FLUSH PRIVILEGES;" >> /tmp/createUser.sql
RUN /usr/bin/mysqld_safe & \
        sleep 10s && \
        mysql -u root -p --password='genesis' < /tmp/createUser.sql
# 外部からmysqlサーバにアクセスできるように
RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
# ポート番号 3306 を外部に公開
#EXPOSE 3306
ADD playdb.sql /tmp/playdb.sql
RUN /usr/bin/mysqld_safe & \
        sleep 20s && \
        mysql -u root -p play_db --password='genesis' <  /tmp/playdb.sql
CMD ["/usr/bin/mysqld_safe"]

アプリ用Dockerfile

# This is a comment
FROM ubuntu:14.10
MAINTAINER Yuichiro Uyama <yuichiro.uyama@gmail.com>
# java install
RUN apt-get update
RUN apt-get install software-properties-common -y
RUN add-apt-repository ppa:webupd8team/java -y
RUN apt-get update
RUN echo debconf shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
RUN apt-get install oracle-jdk7-installer -y
# scala install
RUN cd /usr/local/src/
RUN wget http://downloads.typesafe.com/scala/2.11.0/scala-2.11.0.tgz
RUN tar zxvf scala-2.11.0.tgz
RUN mv scala-2.11.0 /usr/local/
RUN ln -s /usr/local/scala-2.11.0 /usr/local/scala
ENV PATH=$PATH:/usr/local/scala/bin
# git install
RUN add-apt-repository ppa:git-core/ppa
RUN apt-get update
RUN apt-get -y install git
# playframework! install
RUN cd /usr/local/src/
RUN wget http://downloads.typesafe.com/play/2.1.1/play-2.1.1.zip
RUN apt-get -y install unzip 
RUN unzip play-2.1.1.zip
RUN mv play-2.1.1 /usr/local
ENV PATH=$PATH:/usr/local/play-2.1.1
# PartList install
RUN cd /usr/local
RUN git clone git://git.sourceforge.jp/gitroot/open-pdm-light/PartList.git
RUN mv /PartList /usr/local
RUN echo "#!/bin/bash" > ./run.sh
Run echo "cd /usr/local/PartList/PartsList/PartsList" >> ./run.sh
Run echo "play start" >> ./run.sh
RUN chmod 777 ./run.sh
ADD AuthAction.scala /usr/local/PartList/PartsList/PartsList/app/mvc/AuthAction.scala
ADD application.conf /usr/local/PartList/PartsList/PartsList/conf/application.conf
CMD ["./run.sh"]

それぞれ、buildコマンドにてイメージを作成。

# sudo docker build -t yuichiro/db:v1 .
# sudo docker build -t yuichiro/partslist_exdb:devel .

イメージが作成できたら、起動。
まず、DBを以下のコマンドにて起動。

# sudo docker run -d --name db yuichiro/db:v1

引き続き、アプリを起動

# sudo docker run -d --name web -p 5000:9000 --link db:db yuichiro/partslist_exdb:devel

アプリ側のデータソースの指定は、ホスト名にdbを指定。

しばらくしてから、localhostの5000ポートにアクセス。すばらしい!

以上のdocker imageはDB/アプリ。docker pull後、上記の起動コマンドで動くはず。