DockerHUB で公開している SOS JobScheduler のイメージを使って簡単にテスト環境を作れます。
使用した環境は以下のとおり。VirtualBoxの仮想マシンを使用しています。
- Dockerホスト: CentOS7.3
- Docker: 1.10.3
docker-compose インストール
まず、Dockerホストに docker-compose をインストールします。
[root@centos0702 sosjs]# pip install docker-compose
docker-compose.yml 作成
次に docker-compose の 設定ファイルを作成します。
今回は、sosjs ディレクトリを作って、そこに設定ファイルを作りました。
[root@centos0702 sosjs]# cat docker-compose.yml jobscheduler: image: floedermann/jobscheduler links: - db:mysql volumes_from: - datastore ports: - "4444:4444" - "40444:40444" db: image: mariadb environment: MYSQL_USER: jobscheduler MYSQL_PASSWORD: jobscheduler MYSQL_ROOT_PASSWORD: scheduler MYSQL_DATABASE: jobscheduler datastore: image: busybox command: /bin/true volumes: - /opt/jobscheduler/data/scheduler/config/live
dockerコンテナ起動
上記の docker-compose.yml があるディレクトリで下記コマンドを実行すると、DockerHUBからイメージをダウンロードしてDockerコンテナが起動します。
[root@centos0702 sosjs]# docker-compose up -d Pulling db (mariadb:latest)... Trying to pull repository docker.io/library/mariadb ... latest: Pulling from docker.io/library/mariadb 5040bd298390: Pull complete 55370df68315: Pull complete fad5195d69cc: Pull complete a1034a5fbbfc: Pull complete eb46f36a6163: Pull complete de7067e4ea0a: Pull complete fc40d1291bb9: Pull complete aff5d18aeeef: Pull complete 1c729aed3f3d: Pull complete ed7e90870837: Pull complete 8ae91f5b8acf: Pull complete aa554fbac13d: Pull complete Digest: sha256:ed04792bb13c111cbd1743c2921ea6cf777051a7f7f51f7b134efec9af7afdad Status: Downloaded newer image for docker.io/mariadb:latest Pulling datastore (busybox:latest)... Trying to pull repository docker.io/library/busybox ... latest: Pulling from docker.io/library/busybox 4b0bc1c4050b: Pull complete Digest: sha256:817a12c32a39bbe394944ba49de563e085f1d3c5266eb8e9723256bc4448680e Status: Downloaded newer image for docker.io/busybox:latest Pulling jobscheduler (floedermann/jobscheduler:latest)... Trying to pull repository docker.io/floedermann/jobscheduler ... latest: Pulling from docker.io/floedermann/jobscheduler 386a066cd84a: Pull complete 75ea84187083: Pull complete 88b459c9f665: Pull complete 690dbea0e4ca: Pull complete 7e401cdd6f18: Pull complete a58186ddf9a0: Pull complete 49999ed55bc4: Pull complete eb40561aad8f: Pull complete 5e1e63d48c1f: Pull complete 09d7ed6ff6b2: Pull complete 6ba4b48aec7a: Pull complete f8db429f8b8b: Pull complete Digest: sha256:79e7ce0cf75c6f3ceddb36c4f1d26a8cf907e8504a77c5afb402c59efd5d5290 Status: Downloaded newer image for docker.io/floedermann/jobscheduler:latest Creating sosjs_datastore_1 Creating sosjs_db_1 Creating sosjs_jobscheduler_1
これでテスト環境の出来上がりです。Dockerコンテナは3つ作成されました。
[root@centos0702 sosjs]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d176b06f4975 floedermann/jobscheduler "bash /opt/startup_sc" 5 minutes ago Up 5 minutes 0.0.0.0:4444->4444/tcp, 0.0.0.0:40444->40444/tcp, 48444/tcp sosjs_jobscheduler_1 028298731ab1 mariadb "docker-entrypoint.sh" 5 minutes ago Up 5 minutes 3306/tcp sosjs_db_1 969de82ce298 busybox "/bin/true" 5 minutes ago Exited (0) 5 minutes ago sosjs_datastore_1
sosjs_jobscheduler_1とsosjs_db_1 は Up しています。
sosjs_datastore_1 は live フォルダを Dockerホストのディレクトリにマウントするだけなので、Status は Exited でOKです。
JobSchedulerの起動に成功していれば、以下のようにログが表示されます。
[root@centos0702 sosjs]# docker logs sosjs_jobscheduler_1 2>&1 | tail libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f8f284b8000) libstdc++.so.6 => /opt/jobscheduler/scheduler/lib/libstdc++.so.6 (0x00007f8f281a1000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f8f27ea0000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8f27af5000) libgcc_s.so.1 => /opt/jobscheduler/scheduler/lib/libgcc_s.so.1 (0x00007f8f278de000) /lib64/ld-linux-x86-64.so.2 (0x00007f8f29311000) Starting JobScheduler... [ Processing finished ] [ Writing the uninstaller data ... ] [ Automated installation done ]
JOCへのアクセス
JOC にアクセスしたい場合は下記URLです。
http://<DockerホストのIPアドレス>:4444/下図のように JOC が表示されます。
JobScheduler のバージョンは、1.10.6 です。
liveフォルダでのJOB定義
JOEは付属していないので、エディタでJOB定義のXMLファイル作成して live フォルダに格納します。
jobschedulerコンテナの live フォルダは、Dockerホストにマウントされています。
下記コマンドで、マウント先のディレクトリを探します。
[root@centos0702 sosjs]# docker inspect sosjs_jobscheduler_1 | grep -A 10 '"Mounts": '
"Mounts": [
{
"Name": "8d80484c3b0c346960bfb10f49eb634b55e726e53096af5e49392ffee849e55c",
"Source": "/var/lib/docker/volumes/8d80484c3b0c346960bfb10f49eb634b55e726e53096af5e49392ffee849e55c/_data",
"Destination": "/opt/jobscheduler/data/scheduler/config/live",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
赤字部分が、Dockerホストのマウント先です。
ここに ジョブ定義の xml ファイルなどを格納すればテストできます。
[root@centos0702 sosjs]# ls /var/lib/docker/volumes/8d80484c3b0c346960bfb10f49eb634b55e726e53096af5e49392ffee849e55c/_data sos
コンテナの入れ替え
liveフォルダのマウント先がわかりずらいので任意の場所に変更してみます。
docker-compose.yml を修正します。
下記の例では、docker-compose.yml と同じ場所にある live ディレクトリにマウントします。
datastore:
image: busybox
command: /bin/true
volumes:
- ./live:/opt/jobscheduler/data/scheduler/config/live
下記コマンドを実行するとコンテナを作り直して、入れ替えてくれます。
[root@centos0702 sosjs]# docker-compose up -d sosjs_db_1 is up-to-date Recreating sosjs_datastore_1 Recreating sosjs_jobscheduler_1
これで、JOB定義を置く場所が、./live ディレクトリに変更になります。
[root@centos0702 sosjs]# ls -l 合計 4 -rw-r--r-- 1 root root 473 1月 24 09:44 docker-compose.yml drwxr-xr-x 5 root root 48 1月 23 22:53 live
コンテナへのアクセス
デフォルトは英語環境なので、日本語環境に設定変更したい場合などはJobSchedulerコンテナに入ります。
JobSchedulerのDockerコンテナに入りたい場合は以下のようにします。
JobScheduler は /opt と /root/install にインストールされています。
[root@centos0702 sosjs]# docker exec -it sosjs_jobscheduler_1 /bin/bash root@d176b06f4975:/# ls /opt/ jobscheduler startup_scheduler.sh
DB(mariadb)のDockerコンテナに入りたい場合は以下のようにします。
mysql コマンドでDBに接続できます。
[root@centos0702 sosjs]# docker exec -it sosjs_db_1 /bin/bash root@028298731ab1:/# env MARIADB_MAJOR=10.1 HOSTNAME=028298731ab1 MYSQL_DATABASE=jobscheduler MYSQL_PASSWORD=jobscheduler PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin GPG_KEYS=199369E5404BD5FC7D2FE43BCBCB082A1BB943DB 430BDF5C56E7C94E848EE60C1C4CBDCDCD2EFD2A 4D1BB29D63D98E422B2113B19334A25F8507EFA5 PWD=/ SHLVL=1 HOME=/root GOSU_VERSION=1.7 MYSQL_USER=jobscheduler MARIADB_VERSION=10.1.21+maria-1~jessie MYSQL_ROOT_PASSWORD=scheduler _=/usr/bin/env root@028298731ab1:/# mysql --user=jobscheduler --password=jobscheduler jobscheduler Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 24 Server version: 10.1.21-MariaDB-1~jessie mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [jobscheduler]>
コンテナの起動/停止
テスト環境コンテナは、以下のコマンドで一括して停止できます。
[root@centos0702 sosjs]# docker-compose stop Stopping sosjs_jobscheduler_1 ... done Stopping sosjs_db_1 ... done [root@centos0702 sosjs]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d176b06f4975 floedermann/jobscheduler "bash /opt/startup_sc" 22 minutes ago Exited (137) 14 seconds ago sosjs_jobscheduler_1 028298731ab1 mariadb "docker-entrypoint.sh" 22 minutes ago Exited (0) 10 seconds ago sosjs_db_1 969de82ce298 busybox "/bin/true" 22 minutes ago Exited (0) 22 minutes ago sosjs_datastore_1
一括して開始したい場合は、以下のコマンドです。
[root@centos0702 sosjs]# docker-compose start Starting db ... done Starting datastore ... done Starting jobscheduler ... done [root@centos0702 sosjs]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d176b06f4975 floedermann/jobscheduler "bash /opt/startup_sc" 23 minutes ago Up 14 seconds 0.0.0.0:4444->4444/tcp, 0.0.0.0:40444->40444/tcp, 48444/tcp sosjs_jobscheduler_1 028298731ab1 mariadb "docker-entrypoint.sh" 23 minutes ago Up 19 seconds 3306/tcp sosjs_db_1 969de82ce298 busybox "/bin/true" 23 minutes ago Exited (0) 19 seconds ago sosjs_datastore_1
コンテナの状態は "docker-compose ps" でも確認できます。
なお、"docker-compose stop" したあと "docker-compose start" した場合、jobscheduler が起動しないので(link を使ってるから?)、stop したら "docker-compose up -d" で起動します。
コンテナの破棄
テスト環境が不要になったら、下記コマンドで 一括コンテナを削除できます。
[root@centos0702 sosjs]# docker-compose stop Stopping sosjs_jobscheduler_1 ... done Stopping sosjs_db_1 ... done [root@centos0702 sosjs]# docker-compose rm Going to remove sosjs_jobscheduler_1, sosjs_db_1, sosjs_datastore_1 Are you sure? [yN] y Removing sosjs_jobscheduler_1 ... done Removing sosjs_db_1 ... done Removing sosjs_datastore_1 ... done
"docker-compose down" を実行すると、stop と rm を実施してくれます。