[CentOS6] Docker イメージの作成 - JobScheduler環境をビルドする


Create: 2014/09/28
LastUpdate: 2014/09/28

Docker にはDockerイメージの構成をまとめて記述する「Dockerfile」ファイルと、それを適用しDockerイメージを作成する「docker build」コマンドがあります。

CentOS7Docker の環境で、JobScheduler 用のイメージを Docker で自動作成してみました。
コマンドを一回たたけば、JobSchduler のテスト環境が出来上がります。

Dockerコンテナは使い捨てできるので、JobSchedulerをいろいろ試すには、便利です。

外部からDockerコンテナを利用する場合は、ホスト側の接続するポートによってコンテナに接続するサービスが決まります。
例えば、下図の環境でコンテナに ssh ログインしたい場合は、"ssh -l ユーザ -p 40022 <ホストのIPアドレス>" とします。



ここでは、上図のDockerコンテナを作成する build 用のファイルをサンプルとして提供し、使用方法を紹介します。

Docker のインストール手順や使用方法などは、ネット上に、いいサイト(Qiitaなど)がたくさんあるので、そちらを参照してください。

build の用ファイルは、以下からダウンロードできます。
ダウンロードした場合、『免責事項』に同意したものとみなします。

download

私が、動作を確認した環境は、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
[OSの設定]
  • アーキテクチャ: x86_64
  • 初期導入パッケージ: 最小構成
  • デフォルト言語: ja_JP.UTF-8
  • タイムゾーン: Asia/Tokyo
  • ssh ユーザ: sosjs
  • ssh パスワード: sosjs
[JobSchedulerの設定]
  • ユーザ: 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
下図の画面が表示されます。[Status]が "running" であればサービスが起動中です。



Docker コンテナのJobScheduler に接続する


ブラウザで下記URLにアクセスします。
  • http://<ホストのIPアドレス>:4444
下図の画面が表示されます。JOCは日本語化しています。



Docker コンテナに ssh ログインする


ホストのポート番号(40022) にSSH接続すれば、Dockerコンテナにログインします。
Dockerコンテナにログインする場合のアカウントは以下のとおり。
  • ユーザ: sosjs
  • パスワード: sosjs
UNIX系であれば以下のようにしてDockerコンテナにログインします。
# 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サーバを入れる。)