この CookBook では、Resin の Docker の作成手順について紹介しています。
レシピ
- ベースイメージの作成
- Resin の Docker イメージを作成します
- 実行します
1. ベースイメージの作成
CentOS 6.9 を使用します。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
FROM centos:centos6.9 EXPOSE 22 ENV DEBIAN_FRONTEND noninteractive # yum RUN yum -y update && yum clean all # locale RUN yum reinstall -y glibc-common RUN localedef -i ja_JP -f UTF-8 ja_JP.utf8 RUN touch /etc/sysconfig/i18n RUN echo 'LANG="ja_JP.UTF-8"' >> /etc/sysconfig/i18n ENV LANG ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja # timezone RUN yum install -y tzdata RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock RUN echo 'UTC=false' >> /etc/sysconfig/clock RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # tools RUN yum groupinstall -y 'Development Tools' RUN yum install -y --enablerepo centosplus wget curl vim emacs tar unzip mlocate perl ssh openssh-server openssl-devel # root passwd RUN bash -c 'echo "root:password" | chpasswd' # ssh RUN sed -i -e "s/#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config RUN sed -i -e "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config RUN sed -i -e "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config RUN updatedb CMD /etc/init.d/sshd restart && /bin/bash |
ロケールを ja_JP, タイムゾーンを Asia/Tokyo に変更し、root/password で ssh 接続ができるように設定します。
mycentos:6.9 というタグでビルドします。
1 |
docker build -t mycentos:6.9 . |
2. Resin の Docker イメージを作成します
先ほど作成したベースイメージを利用します。
jdk-8u172-linux-x64.tar.gz を事前にダウンロードしておきます。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
FROM mycentos:6.9 EXPOSE 22 6800 8080 9009 5200 5701 40608 ENV DEBIAN_FRONTEND noninteractive # yum RUN yum -y update && yum clean all RUN yum -y upgrade && yum -y update && yum clean all RUN yum install -y --setopt=protected_multilib=false ld-linux.so.2 libstdc++.so.6 libpng12 # JDK COPY jdk-8u172-linux-x64.tar.gz /jdk-8u172-linux-x64.tar.gz COPY setup_jdk.sh /setup_jdk.sh RUN chmod u+x /setup_jdk.sh RUN /setup_jdk.sh RUN rm -f /setup_jdk.sh ENV JAVA_HOME /usr/local/java/jdk ENV PATH /usr/local/java/jdk/bin:$PATH RUN echo 'JAVA_HOME=/usr/local/java/jdk' >> /root/.bashrc RUN echo 'PATH=$PATH:/usr/local/java/jdk/bin' >> /root/.bashrc RUN rm -f /jdk-8u172-linux-x64.tar.gz # Resin COPY setup_resin.sh /setup_resin.sh RUN chmod u+x /setup_resin.sh RUN /setup_resin.sh RUN rm -f /setup_resin.sh COPY run.sh /run.sh RUN chmod +x /run.sh RUN updatedb CMD /run.sh |
細かいセットアップはシェルスクリプトに逃がし、Dockerfile からはそれを実行するようにします。
これにより、Dockerfile をシンプルにでき、かつイメージ容量の削減にもつながります。
setup_jdk.sh
1 2 3 4 5 6 |
#!/bin/sh tar zxvf /jdk-8u172-linux-x64.tar.gz mkdir -p /usr/local/java mv jdk1.8.0_172 /usr/local/java/jdk1.8.0_172 ln -s /usr/local/java/jdk1.8.0_172 /usr/local/java/jdk |
Resin のセットアップスクリプトです。
setup_resin.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/sh curl -L -C - -O http://caucho.com/download/resin-pro-4.0.56.zip unzip resin-pro-4.0.56.zip rm resin-pro-4.0.56.zip cd resin-pro-4.0.56 ./configure make make install cd .. rm -rf resin-pro-4.0.56 echo "app.https : 8443" >> /etc/resin/resin.properties echo "elastic_cloud_enable : true" >> /etc/resin/resin.properties echo "jvm_args : -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Tokyo -Xmx2048m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=30 -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+CMSClassUnloadingEnabled -Xdebug -Xrunjdwp:transport=dt_socket,address=9009,server=y,suspend=n" >> /etc/resin/resin.properties echo "admin_user : admin" >> /etc/resin/resin.properties echo "admin_password : {SSHA}bTLnpGjSarNFd/EQe8W4d/IjAxfQdGe8" >> /etc/resin/resin.properties echo "admin_external : true" >> /etc/resin/resin.properties echo "admin_secure : true" >> /etc/resin/resin.properties mkdir /var/resin/storage mkdir /var/resin/tmp mv /var/resin/webapp-jars/hibernate-validator-4.3.0.Final.jar /var/resin/webapp-jars/hibernate-validator-4.3.0.Final.jar.bak mv /usr/local/share/resin-4.0.56/lib/validation-api-1.0.0.GA.jar /usr/local/share/resin-4.0.56/lib/validation-api-1.0.0.GA.jar.bak |
以下の変更を加えています。
- 8443 ポートをオープン(resin-admin から war をデプロイできるように)
- elastic_cloud_enable を true に設定
- jvm_args : -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Tokyo -Xmx2048m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=30 -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+CMSClassUnloadingEnabled -Xdebug -Xrunjdwp:transport=dt_socket,address=9009,server=y,suspend=n を設定
- admin/password で resin-admin へのログインができるように
- 外部から resin-admin へログインができるように
- hibernate-validator-4.3.0.Final.jar と validation-api-1.0.0.GA.jar をリネーム
docker run 時に実行するスクリプトです。
run.sh
1 2 3 4 5 6 7 8 9 |
#!/bin/bash /etc/init.d/sshd restart IP=$(ip addr show eth0 | perl -n -e 'if (m/inet ([\d\.]+)/g) { print $1 }') resinctl -server app-0 start -Djgroups.bind_addr=${IP} touch /var/log/resin/jvm-app-0.log tail -F /var/log/resin/jvm-app-0.log |
sshd と Resin を起動しています。
myresin というタグでビルドします。
1 |
docker build -t myresin:4.0.56 . |
3. 実行します
1 |
docker run -it -p 2222:22 -p 6800:6800 -p 8080:8080 -p 9009:9009 -p 5200:5200 -p 5701:5701 -p 40608:40608 myresin |
root/password で ssh 接続ができるようになっています。
あくまで検証用の Docker としてこのように設定しているため、セキュリティにはご注意ください。
このように、Docker イメージ化するだけで、検証用の Resin をすぐに準備できます。
是非ご活用ください。