はじめに
ひきつづきDockerのお勉強中。
簡単なshellを起動させて、動作を確認するところで止まってしまったので、できればアプリケーションを起動してみるところまでは試してみたい!
そこで、index.docker.io を眺めていて目にとまったものを試してみることにしました。
今回は、atlassian/jira というイメージがあったので、これに注目。
普段Remdine使いなのですが、『簡単に起動できるなら…!』と思って、試すことにしました。
※ 追記:末尾に、うまくいかない場合の対応方法を掲載しました。
やりたいこと/やらないこと
やりたいこと
- index.docker.io から atlassian/jira のイメージを取ってきて、追加する。
- dockerで上記イメージを起動させる。
- 起動したJIRAに、外部からアクセスをして、Webアプリケーションの設定を進めてみる。
やらないこと/省略すること
- JIRAを1からセットアップすること。
- Chefその他のプロビジョニングのスクリプトは自作しない。
- まずは提供されているイメージを使い、ちゃんと起動するか&起動後に、このイメージがどうやって作られているかを紐解く方をメインとする。
イメージの取得/登録
Dockerfileも一緒に掲載されているので、どんなステップでインストールしているか良く分かります。
細かい構築の手順を、もっと深堀したい方は、『参考サイト/関連サイト』をどうぞ。
起動スクリプトを実行
以下、VagrantのDocker起動用ubuntuでの作業になります。
- 前提:VagrantのOSは、private networkでIPを割り当てている。
- 今回、192.168.33.15のIPを割り当て。
イメージの取得についてですが ネットワークの状況などにより、うまく行かないこともありましたので、ご注意。
#イメージを取得
vagrant@precise64:~$ docker -D pull atlassian/jira
# 8080番ポートをdocker側の80番に割り当て
vagrant@precise64:~/work$ docker run -d -p 80:8080 atlassian/jira /init.sh -D
- -pオプションで、dockerのコンテナの8080番を、dockerのホストになっているUbuntuの80番にマップさせています。(dockerのホスト側ポート:コンテナ側のポート、の順です)
- それをUbuntuをVagrantでホストしているMacOS側から参照できるようにしています。
※ -pオプションでホスト側のポートの指定をしない場合は、動的にポートが割り当てになります。この場合は、何番に割当たったのか docker ps で確認できます。
起動時の画面
起動スクリプト実行直後
以下が、起動後に、MacOS側のブラウザで参照したところです。
左側は、attachしてJIRAの起動のメッセージを表示させたターミナルです。
※ MacOS側で表示したURLは192.168.33.15:49157 になっています。こちらは -pで固定ポートにマップさせなかった場合の例です。-p 80:8080 にした場合は、192.168.33.15:80 でアクセスできます。
デバッグモードで起動しているので、Tomcatのコンソールログも眺めることができます。
このあと、データベースの指定をします。
- 『組み込み』(Built in)の場合は、デモ用でオンメモリのDBを使うようです。
- My Own Databaseの場合は、dockerのイメージで一緒に追加されたPostgreSQLを指定します。
- アカウント、パスワードは dockerのページに記載してあるものを使いましたが、ユーザ名/DBともpostgres で接続テストが通りました。
ライセンスを取得とセットアップ完了後
次に、セットアップを進めて、利用可能になった段階の画面です。
上記の起動画面のあと、DBへの接続設定や、Atlassianに接続してのライセンスのアクティベーションなどの処理が走ります。(JIRAのライセンス確認の画面が出て、『MyAtlassianのアカウントが無ければ作ってね!』のメッセージも表示されます)
幸いホストOSを介して、Dockerのコンテナ内のJIRA稼働環境も、インターネットに出て行けるため、裏側でアクティベーションが実行されて、使えるようになりました。
※ こちらも、URLは192.168.33.15:49164 になっていますが、-p 80:8080 にした場合は、同様に192.168.33.15:80 でアクセスできます。
atlassian/jira のイメージで仕上がっているのは、セットアップ開始直前までです。
ライセンスをアクティベートして、セットアップが終わったら、コンテナの状態をコミットして置きましょう!
(忘れてしまうと、都度ライセンス設定しないといけません)
attachしてTomcatのログを確認
起動したコンテナのプロセスにattachする場合は、下記の通り。
# docker ps でCONTAINER IDを調べます
vagrant@precise64:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6cfaae1e3fe1 atlassian/jira:latest /init.sh -D 8 seconds ago Up 7 seconds 0.0.0.0:80->8080/tcp, 5432/tcp suspicious_pike
# 上記で得られたCONTAINER IDを指定してattachします
vagrant@precise64:~$ docker attach -sig-proxy=false 6cfaae1e3fe1
# うまく行くと、Web側の画面の遷移させるたびに、tomcatのログが流れます
Feb 23, 2014 2:58:56 AM org.apache.jasper.compiler.TldLocationsCache tldScanJar
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
……
- -sig-proxy=false を指定すると、起動しているコンテナを停止せずに、Ctrl-Cでデタッチできます。
確認/イメージはどうやって作られたの?
上記の処理は、index.docker.io から取得し、JIRA起動用のスクリプトを実行しただけになります。
ちなみに、このイメージですが、ベースのUbuntuにChefをインストールし、そこからChefやスクリプトを併用して、Postgresql, java, tomocat, JIRAのセットアップを行っています。
また、dockerのため、途中のステップ(たとえばPostgreSQLをインストールした時点)まで戻る事ができます。docker historyを眺めると、その行程が見えてきます。
凄いですね…。
今回のまとめ
細かくは追いかけていませんが、
- 起動したJIRAに、外部からアクセスをして、Webアプリケーションの設定を進めてみる。
が出来ることは分かりました。
環境がすぐに作れる/再現できるので、たとえばAPIを使ったプログラムのテスト時に起動させる、なんていうのにとても便利そうです。
補足:環境について
- 作業マシン:MacOS / VirtualBox & Vagrant
- Dockerのホスト用の環境
- https://github.com/dotcloud/docker を利用。
- vagrant up で、dockerがインストールされたUbuntuをベースにした。
MacOS側からアクセスしやすいように、下記のように192.168.33.15 というIPを割り当てています。
Vagrant::Config.run do |config|
# Setup virtual machine box. This VM configuration code is always executed.
config.vm.box = BOX_NAME
config.vm.box_url = BOX_URI
#ここでprivate ip割り当てをしています。:hodtonly で指定。
#config.vm.network "private_network", ip: "192.168.33.15"
config.vm.network :hostonly, "192.168.33.15"
# Use the specified private key path if it is specified and not empty.
if SSH_PRIVKEY_PATH
config.ssh.private_key_path = SSH_PRIVKEY_PATH
end
config.ssh.forward_agent = true
end
補足:参考サイト/関連サイト
-
Dockerでjavaアプリをデプロイする。すごい! (Atlassian Blog / 日本語訳)
-
Deploy Java Apps With Docker = Awesome 上記のオリジナル記事
-
Docker all the things at Atlassian: automation and wiring (Atlassian Blog)
-
今回利用したイメージのベースになる手順が記載されています。
-
インストールスクリプトを使ってコマンド1つで構築する方法と、PostgreSQLのセットアップから順番にdockerのコマンドを実施、commitしていく方法が併記されています。
追記:うまく起動しない/エラーが出る場合
セットアップが終わったあとにコミットし、その後再度 docker runコマンドで起動したら、エラーになったりしましたので、追記しておきます。
プラグインのエラーが出てしまった場合
- setenv.sh に、以下を追加
- -Datlassian.plugins.enable.wait=300
- Ref. The Gadget Dashboard bundled plugin is not available Error When Accesing JIRA
init.shが終了してしまう場合
- rm -fr /opt/atlassian/jira/work/catalina.pid
- rm -rf /opt/atlassian/jira-home/.jira-home.lock
- rm -rf /opt/atlassian/jira-home/.osgi-plugins
- Ref. Troubleshooting JIRA Startup Failed Error