Create: 2014/09/28
LastUpdate: 2014/09/28
Docker にはDockerイメージの構成をまとめて記述する「Dockerfile」ファイルと、それを適用しDockerイメージを作成する「docker build」コマンドがあります。
CentOS7+Docker の環境で、JobScheduler 用のイメージを Docker で自動作成してみました。
コマンドを一回たたけば、JobSchduler のテスト環境が出来上がります。
Dockerコンテナは使い捨てできるので、JobSchedulerをいろいろ試すには、便利です。
外部からDockerコンテナを利用する場合は、ホスト側の接続するポートによってコンテナに接続するサービスが決まります。
例えば、下図の環境でコンテナに ssh ログインしたい場合は、"ssh -l ユーザ -p 40022 <ホストのIPアドレス>" とします。
ここでは、上図のDockerコンテナを作成する build 用のファイルをサンプルとして提供し、使用方法を紹介します。
Docker のインストール手順や使用方法などは、ネット上に、いいサイト(Qiitaなど)がたくさんあるので、そちらを参照してください。
build の用ファイルは、以下からダウンロードできます。
ダウンロードした場合、『免責事項』に同意したものとみなします。
私が、動作を確認した環境は、CentOS7.0 の Docker のみです。
自動生成時には、インターネットから必要なファイル(OSイメージ、rpmパッケージ、JDK、JobScheduler)をダウンロードします。
なお、CentOS7でDockerを使用する場合、以下のようにして SELinux の設定を無効にします。
そうしないと、build 中の useradd でエラーになります。
# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Docker イメージの構成
JobScheduler用に作成した Dockerイメージの構成は以下のとおり。
monit は、Dockerコンテナ内のサービスを管理(起動/停止)するツールです。
[ソフトウェアのバージョン]
- CentOS 6.5
- JobScheduler 1.7
- MySQL 5.1
- OracleJDK 1.7
- monit 5.1
- アーキテクチャ: x86_64
- 初期導入パッケージ: 最小構成
- デフォルト言語: ja_JP.UTF-8
- タイムゾーン: Asia/Tokyo
- ssh ユーザ: sosjs
- ssh パスワード: sosjs
- ユーザ: sosjs
- インストールPATH: /opt/sos-berlin.com/jobscheduler
- ユーザPATH: /home/sosjs/sos-berlin.com/jobscheduler
- Jetty HTTP Port: 40444
- Jetty HTTPS Port: 48444
- Scheduler Port: 4444
- DB: MySQL
- DB Name: scheduler
- DB User: scdl_user
- DB Password: scdl_pass
Dockerfile を用意する
build 用に作成したファイルは、上記からダウンロードできます。
内容は、以下のとおり。
イメージの構成手順は、Dockerfile に記載されています。
ここで、Dockerfile や monit の詳細な説明はしませんが、興味のあるひとは、ファイルの内容を見て参考にしてください。
# tree . . ├── Dockerfile ・・・・・・・ build 用のファイル ├── README ・・・・・・・・・ 簡易ドキュメント ├── docker_build.sh ・・・・ Dockerイメージ作成 ├── docker_rm_all.sh ・・・・ Docker コンテナ削除 ├── docker_rm_js.sh ・・・・ Docker コンテナ削除 ├── docker_rmi_null.sh ・・・ Docker イメージ削除 ├── docker_run.sh ・・・・・ Docker コンテナ起動 ├── docker_stop.sh ・・・・・ Docker コンテナ停止 ├── jobscheduler ・・・・・・ monit 設定(jobscheduler 起動/停止) ├── monit.conf ・・・・・・・ monit 設定 ├── my.conf ・・・・・・・・ MySQL 設定 ├── mysqld ・・・・・・・・ monit 設定(mysql 起動/停止) ├── scheduler_install.xml ・・ JobScheduler インストール設定 └── sshd ・・・・・・・・・・ monit 設定(ssh 起動/停止)
Docker イメージを作成する
イメージの作成手順は、Dockerfile に記載しています。
Docker の public repository からCentOS65の最小構成イメージ( kun432/centos65 )をダウンロードしてベースとします。
あとは、yum で必要なパッケージを追加、OracleからJDKをダウンロード、SOSから JobSchduler をダウンロードして、必要な各種設定を行いインストールを実施していきます。
Docker イメージを作成するコマンドは、docker_build.sh に記載しています。
以下のようにコマンドを実行すれば、Docker イメージができます。
作成するDockerイメージの名前は、"blue21/centos65-js" です。
# cd /root/workspace/centos65_js
# ./docker_build.sh
~省略~
Removing intermediate container 4190f9e0f062
Step 34 : CMD ["/usr/bin/monit", "-I"]
---> Running in 434f44f61b04
---> a27191d2d758
Removing intermediate container 434f44f61b04
Successfully built a27191d2d758
赤字部分のように Successfully と IMAGE ID が表示されたら成功です。作成したイメージを確認すると以下のとおり。
# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
blue21/centos65-js latest a27191d2d758 About an hour ago 1.411 GB
kun432/centos65 latest cdf9b11a3d06 3 months ago 323 MB
Dockerイメージが2つありますが、"kun432/centos65" は、build 時に Docker の Public Repository からダウンロードした CentOS6.5の最小構成イメージです。これをベースにして JobScheduler をインストールしたのが "blue21/centos65-js" です。Docker コンテナの起動する
上記で作成した blue21/centos65-js を起動するコマンドは docker_run.sh に記載しています。
以下のように実行すると、Docker コンテナが起動します。
# ./docker_run.sh 9e009ce3bb37f1224860fb15c7082b1f1e310e62c402251208ff1ce0f94698a2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9e009ce3bb37 blue21/centos65-js:latest /usr/bin/monit -I 3 seconds ago Up 3 seconds 0.0.0.0:2812->2812/tcp, 0.0.0.0:4444->4444/tcp, 0.0.0.0:40022->22/tcp, 0.0.0.0:40444->40444/tcp, 0.0.0.0:48444->48444/tcp jobscheduler
Docker コンテナのサービスを確認する
monit の画面では、Docker コンテナ内で ssh、mysql、jobscheduler のサービスが起動しているかどうか確認できます。
また、各サービスの起動/停止もできます。
ブラウザで下記URLにアクセスします。
- http://<ホストのIPアドレス>:2812
Docker コンテナのJobScheduler に接続する
ブラウザで下記URLにアクセスします。
- http://<ホストのIPアドレス>:4444
Docker コンテナに ssh ログインする
ホストのポート番号(40022) にSSH接続すれば、Dockerコンテナにログインします。
Dockerコンテナにログインする場合のアカウントは以下のとおり。
- ユーザ: sosjs
- パスワード: sosjs
# ssh -l sosjs -p 40022 <ホストのIPアドレス>
Dockerコンテナを停止する
上記で起動したDockerコンテナを停止するコマンドは docker_stop.sh に記載しています。
以下のように実行すると、Docker コンテナが停止します。
# ./docker_stop.sh jobscheduler CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
JobScheduler の JOE、JID を使う
Dockerコンテナには GUI 環境がないのでJobScheduler の JOE、JID は使えません。
どうしても、JID、JOEを使用したい場合は、別途、JID、JOEだけ別マシンにインストールして、Dockerコンテナにリモート接続することになります。
その場合、DockerコンテナのMySQLを外部に開放します。
また、JobSchdulerの定義ファイルは、Docker の -v オプションで Dockerコンテナとホストでディレクトリを共有するようにすればいいと思います。(または、DockerコンテナにFTPサーバを入れる。)