takeda_san’s blog

JavaFXと機械学習を頑張る方向。

GCPでもJavaがしたい その4

作業予定

  1. GCPアカウント作成
  2. Webサーバをたててみる
  3. JREをいれて何か動かしてみる
  4. RMIで通信してみる
  5. Dockerイメージをつくってみる ←今回はここ
  6. コンテナを動かしてみる ←今回はここ
  7. クラスタ環境をつくってみる
  8. RMIで通信してみる(コンテナ編)

先月のGCPの請求が届いたんだけど49円で、300ドルを使いつくす気配がないたけだです。
DockerもGCPでコンテナ管理も、よくわかってないけどやっていくぞ!

Dockerイメージをつくろう

まずは、ローカルでコンテナを作ってRMIのサーバ側だけを動かしてみようという方針。
GCPコンソールからCloud Shellを起動して、vi DockerfileでDockerfileを作る。 このDockerfileでコンテナの中身をつくるらしい。

というわけで、以下を記載して保存。
うん、どっかのサイトからコピペしてきたんだ。

で、この最後のCOPY RmiServer.jar .ってところで、jarファイルをコンテナへコピーしております。
というわけでRmiServer.jarをアップロードしておく。 右上のほうのボタンからファイルをアップロードでできます。
f:id:takeda_san:20171203210853p:plain 便利すぎる…

コンテナを動かしてみる

よし、コンテナをうごかすぞ!
のまえに、さっき作ったDockerfileをビルドしないといけないようです。
docker buildってコマンドでできるらしい。

docker build -t gcr.io/[プロジェクトID]/gcp-rmi:v1 .

プロジェクトIDはダッシュボードのところに書いてあった。
なんか、わやわやーっと出力されて、どうやらコンテナイメージができたようです。

Successfully built hogehoge
Successfully tagged gcr.io/[プロジェクトID]/gcp-rmi:v1

うし、さっそく起動してみよう。
docker runってコマンドでできるらしい。

docker run -it -p 1099:1099 gcr.io/[プロジェクトID]/gcp-rmi:v1

-itってオプションを付けると起動したコンテナ内でいろいろコマンドが打てる。
つけないと、すぐ終了しちゃうみたい。
一応ポートフォワーディングしてるけど、今回は使わない。

で、まずはjarファイルがちゃんとコピーできてるか確認。

# ls
RmiServer.jar  bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

素晴らしい。
あとは、いつも通り起動。
ちなみに、ポートを起動時に指定できるようにしました。
あと、ログをちょっと出すようにしました。

# export CLASSPATH=./RmiServer.jar
# rmiregistry &
# java -jar ./RmiServer.jar 1099
server start
port:1099
server init finish

うん、ちゃんと起動したみたい。

おかたづけ

試行錯誤で作ったコンテナの残骸とか、起動しっぱなしのコンテナをおかたづけします。
docker stop CONTAINER IDdocker rm CONTAINER IDでいちいち止めるのめんどくさいよね。

qiita.com

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

実行結果。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

うん、スッキリ。