Docker

はじめに

HandywedgeをDockerで利用するためにDockerコンテナのイメージを提供しています。

Dockerコンテナは2種類提供しており、Dockerコンテナのみで稼働させることのできるデータベースまでを含んだコンテナと、データベースは別の環境にありアプリケーションのみDockerコンテナで稼働させるためのデータベースを含まないイメージとなります。

また、データベースを含まないイメージを利用してAmazon ECSにて稼働させることもできます。


マイクロサービス

Handywedgeではアプリケーションコンテナとの連携はもちろん、単体でも利用可能なREST APIによるマイクロサービスのコンテナを提供しています。

提供しているマイクロサービスについては開発ガイドのアプリケーション共通サービスを参照してください。

Handywedge with Docker

Dockerインストール

公式サイトを参考にして環境に合わせてインストールします。

docker import

Handywedgeのイメージファイルをインポートします。

サンプルアプリケーションはポート8080で開きます。

以下、handywedgeはリポジトリ名、masterはタグ名です。

docker import -c "CMD /usr/sbin/init" -c "ENV LANG=ja_JP.UTF-8" https://docker.handywedge.com/images/handywedge.tgz handywedge:master
オプション 説明
-c Dockerfileの命令を設定
handywedge:master リポジトリ名:タグ

データベースを含まないイメージを使う

データベースを含まないイメージの使い方はHandywedge with Docker(without database)を参照してください。

バージョンを指定するには

コマンド例のURLでは最新版が取り込まれますが、Handywedgeのバージョンを指定するには以下のようにURLを指定します。
https://docker.handywedge.com/images/archive/0.5.0/handywedge.tgz
0.5.0の箇所にバージョンを指定します。バージョンを指定する場合はimport時にhandywedge:0.5.0のようにすると良いでしょう。

docker run

docker runコマンドで、インポートしたイメージを元にDockerコンテナを起動します。

docker run --privileged -d -i -p 8080:8080 --name handywedge handywedge:master
オプション 説明
--privileged 特権モードで起動する
-d コンテナをバックグラウンドで起動する
-i ホストの入力をコンテナの標準出力とつなげる
-p ホストとコンテナのポートフォワードを指定する
--name コンテナに名前を付ける

アプリケーションを開く

コンテナが起動されると、コンテナ内にデプロイされているサンプルアプリケーションにアクセスできます。
ブラウザで以下のURLアクセスしてみてください。
ログイン画面が出てきたら正常に稼働しています。
handywedge-test-app/passwordでログインできます。

docker exec

docker execでDockerコンテナに追加のプロセスを実行します。下記のコマンドでコンテナのbashを起動します。

docker exec -it handywedge /bin/bash
オプション 説明
-i ホストの入力をコンテナの標準出力とつなげる
-t 疑似ターミナルの割り当て

docker build

docker buildコマンドで、インポートでは無くDockefileからDockerイメージを構築できます。
ここでインポートしたイメージは下記のDockerfileを元に作られています。

Dockerfleはここからダウンロードできます。

Dockerfileのあるディレクトリで作業してください。またはDockerfileのパスを記述してください。

docker build --rm -t handywedge:master ./
オプション 説明
--rm ビルド成功後中間コンテナを削除
-t タグの指定

注意

Dockerfileのjreバージョンはコミット時点の最新のものです。
最新バージョン以外はOTNにログインしないとダウロードできないため、実行時に最新のものに置き換えてください。
Dockerfile on github

Handywedge with Docker(without database)

Dockerインストール

公式サイトを参考にして環境に合わせてインストールします。

docker import/load

Handywedgeのイメージファイルおよびデータベースのイメージファイルをインポートします。

サンプルアプリケーションはポート8080で開きます。

以下、handywedge/without_dbはリポジトリ名、masterはタグ名です。

docker import -c "CMD /usr/sbin/init" -c "ENV LANG=ja_JP.UTF-8" https://docker.handywedge.com/images/without_db/handywedge.tgz handywedge/without_db:master

curl https://docker.handywedge.com/images/without_db/handywedge-postgres.tgz | docker load
オプション 説明
-c Dockerfileの命令を設定
handywedge/without_db:master リポジトリ名:タグ

importとloadの違い

Handywedge本体のイメージはdocker export、データベースのイメージはdocker saveのコマンドで作成しています。
それぞれイメージを取り込むためのコマンドがdocker import、docker loadとなります。
curlコマンドが使えない環境の場合はファイルを一旦ダウンロードして、次のようにしてloadを行います。
docker load < handywedge-postgres.tgz

データベースのコンテナを使わない場合

データベースをコンテナではなく外部のデータベースを参照する場合は後述のdocker execより本体コンテナに接続して接続情報を設定します。
/opt/tomcat/conf/Catalina/localhost/handywedge-test-app.xml
ただし、サンプルアプリケーションはpostgresqlのJDBCドライバを利用しているためpostgresqlしか接続できません。

docker network

docker networkコマンドで明示的にHandywedge用のdockerネットワークを作成し、本体コンテナとデータベースコンテナの通信がしやすいように設定します。

docker network create --subnet 172.20.0.0/16 handywedge-network
オプション 説明
create docker networkのサブコマンド。ネットワークを作成
--subnet CIDR記法でネットワークセグメント
handywedge-network ネットワーク名

docker run

docker runコマンドで、インポートしたイメージを元にDockerコンテナを起動します。

docker run --net handywedge-network --ip 172.20.0.2 -d -i --name handywedge-postgres handywedge/without_db:postgres

docker run --net handywedge-network --ip 172.20.1.2 --privileged -d -i -p 8080:8080 --name handywedge handywedge/without_db:master
オプション 説明
--net 指定したネットワークに接続
--ip IPアドレスを指定
--privileged 特権モードで起動する
-d コンテナをバックグラウンドで起動する
-i ホストの入力をコンテナの標準出力とつなげる
-p ホストとコンテナのポートフォワードを指定する
--name コンテナに名前を付ける

アプリケーションを開く

コンテナが起動されると、コンテナ内にデプロイされているサンプルアプリケーションにアクセスできます。
ブラウザで以下のURLにアクセスしてみてください。
ログイン画面が出てきたら正常に稼働しています。
handywedge-test-app/passwordでログインできます。

docker exec

docker execでDockerコンテナに追加のプロセスを実行します。下記のコマンドでコンテナのbashを起動します。

docker exec -it handywedge /bin/bash
オプション 説明
-i ホストの入力をコンテナの標準出力とつなげる
-t 疑似ターミナルの割り当て

docker build

docker buildコマンドで、インポートでは無くDockefileからDockerイメージを構築できます。
ここでインポートしたイメージは下記のDockerfileを元に作られています。

Dockerfleはここからダウンロードできます。

データベースのDockerfleはここからダウンロードできます。

Dockerfileのあるディレクトリで作業してください。またはDockerfileのパスを記述してください。

docker build --rm -t handywedge/witout_db:master ./

docker build --rm -t handywedge/witout_db:postgres ./
オプション 説明
--rm ビルド成功後中間コンテナを削除
-t タグの指定

注意

Dockerfileのjreバージョンはコミット時点の最新のものです。
最新バージョン以外はOTNにログインしないとダウロードできないため、実行時に最新のものに置き換えてください。
Dockerfile on github

Handywedge with Amazon ECS

AWSセットアップ

HandywedgeのイメージをAmazon ECSで利用するための手順を簡単にご紹介します。

Amazon ECSの詳細およびAWSを利用する環境がない場合はAWS開発者ガイドを参照してください。

イメージファイルの準備

Amazon ECRにイメージを登録するためにHandywedgeのイメージファイルをインポートします。

docker import -c "CMD /usr/sbin/init" -c "ENV LANG=ja_JP.UTF-8" https://docker.handywedge.com/images/without_db/handywedge.tgz handywedge/without_db:master

docker runコマンドで、インポートしたイメージを元にDockerコンテナを起動します。起動後、docker execでコンテナのbashを起動しデータベースの接続設定を行います。

docker run --privileged -d -i --name handywedge handywedge/without_db:master

docker exec -it handywedge /bin/bash
下記のファイルの接続設定を書き換えてexitでbashを終了します。
/opt/tomcat/conf/Catalina/localhost/handywedge-test-app.xml

docker stopコマンドでコンテナを停止し、接続情報を書き換えた状態のコンテナをdocker commitコマンドでイメージを作成します。

docker stop handywedge

docker commit handywedge handywedge/without_db:ecs

開始までの流れ

イメージの準備ができたらこれ以降の詳細についてはAWS開発者ガイドを参照してください。

ここでは簡単な流れを説明します。

  1. Amazon ECRにリポジトリを作成します。
  2. 手順に従いイメージにタグを付けpushします。
  3. クラスターを作成します。
  4. タスクを定義します。※コンテナ追加時に特権付与します
  5. タスクをEC2起動タイプで実行します。
タスクを実行するとEC2インスタンスが起動され、アプリケーションにアクセスできるようになります。
ロードバランサーなど、必要に応じてサービスを定義します。

マイクロサービス

Amazon S3バイナリーストア

HandywedgeのAmazon S3バイナリーストアのイメージの使い方を説明します。詳細については開発ガイドのアプリケーション共通サービスを参照してください。

Amazon S3バイナリーストアを利用するためには接続するための認証情報が必要になります。

docker load

HandywedgeのAmazon S3バイナリーストアイメージファイルをインポートします。

curl https://docker.handywedge.com/images/binarystore/aws/handywedge-binarystore-aws.tgz | docker load

docker run

docker runコマンドで、インポートしたイメージを元にDockerコンテナを起動します。

docker run -d -i -p 8082:8080 -e LOG_LEVEL=info -e AWS_ACCESS_KEY_ID=XXXXX -e AWS_SECRET_KEY=XXXXX --name handywedge-binarystore handywedge/binarystore/aws:master
オプション 説明
-p サービスは8080ポートで待ち受けしているので環境に合わせてフォワード設定をする
-e LOG_LEVEL ログレベルの設定。省略時はinfoとなる。設定できる値は[fatal, error, warn, info, debug, trace]
-e AWS_ACCESS_KEY_ID, -e AWS_SECRET_KEY Amazon S3に接続するための認証情報を設定する
--name コンテナに名前を付ける