そごうソフトウェア研究所

SOA、開発プロセス、ITアーキテクチャなどについて書いています。Twitterやってます@rsogo

JenkinsからWildFlyへのリモートデプロイ(DockerコンテナのLink)

自社製品のAppPotの開発、運用環境は次のような構成になっています。

  1. 自社クラウド本番環境:クラウド運用しているバージョンのみ
  2. 自社クラウドテスト環境:クラウド運用しているバージョンのみ
  3. 自社クラウド開発環境:クラウド運用しているバージョンのみ
  4. 自社CI環境:製品バージョンごとに存在
  5. 受託プロジェクト開発開発:プロジェクトごとに存在

バージョンごとに環境を立てるのは大変なので、自社CI環境と受託プロジェクト開発環境はDockerコンテナ上で運用しています。常にすごい負荷がかかっているわけではないので、小規模なさくらインターネットのサーバーで3〜5つくらいのコンテナが動作しています。

このうち、CI環境の一部だけはJenkinsを使ったビルド、デプロイ、テストのプロセスが自動で回っています。この一部というのは、Jenkinsと同居しているアプリケーションサーバーのみ。 なぜかというと、コンテナ間の連携をちゃんとやる時間が無かったから・・。

というわけで、コンテナ間の連携、JenkinsからのWildFlyへのリモートデプロイをできるようにするのが、本エントリの目標です。

Dockerコンテナ間連携

まだしばらく同一サーバー内でのコンテナ間連携で行けそうなので、--linkを使います。

https://docs.docker.com/docker/userguide/dockerlinks/#communication-across-links

今回の場合はJenkinsサーバーコンテナから、アプリケーションサーバーコンテナへリンクします。

アプリケーションサーバーの起動

--nameオプションで、apppot_runtime1.7という名前でコンテナを起動させています。

docker run -it --expose 9181 -p 9181:8080 -p 9991:9990 --name apppot_runtime1.7 rsogo/wildfly8:v1 /bin/bash

Jenkinsサーバーコンテナの起動

--linkオプションで、apppot_runtime1.7という名前のコンテナをリンクさせています。

docker run -it --expose 8081 -p 8081:8080 --name jenkins --link apppot_runtime1.7:apppot_runtime1.7 rsogo/jenkins:v5 /bin/bash

コンテナIDでもリンクで指定することはできますが、コンテナIDはコンテナの起動の度に変わります。 上のような起動スクリプトはシェルとして用意しておきたいと思いますので、コンテナIDより、コンテナ名を定義しておいた方が便利です。

Jenkinsサーバーコンテナでのhostsファイル、環境変数の確認

apppot_runtime1.7がhostsファイルに追加されていることが分かります。

# cat /etc/hosts
172.17.0.71 cfc8c054ccf8
127.0.0.1   localhost
172.17.0.69 apppot_runtime1.7 9b5ee14ff469

envコマンドを実行した結果、環境変数アプリケーションサーバーコンテナが公開しているポートごとに次のような環境変数が定義されています。

APPPOT_RUNTIME1.7_PORT_8080_TCP_ADDR=172.17.0.69
APPPOT_RUNTIME1.7_PORT=tcp://172.17.0.69:22
APPPOT_RUNTIME1.7_PORT_22_TCP_PORT=22
APPPOT_RUNTIME1.7_PORT_22_TCP_ADDR=172.17.0.69
APPPOT_RUNTIME1.7_PORT_22_TCP=tcp://172.17.0.69:22
APPPOT_RUNTIME1.7_PORT_9181_TCP_PORT=9181
APPPOT_RUNTIME1.7_PORT_22_TCP_PROTO=tcp
APPPOT_RUNTIME1.7_PORT_8080_TCP_PORT=8080
APPPOT_RUNTIME1.7_PORT_9990_TCP=tcp://172.17.0.69:9990
APPPOT_RUNTIME1.7_PORT_9080_TCP_PORT=9080
APPPOT_RUNTIME1.7_PORT_9181_TCP_PROTO=tcp
APPPOT_RUNTIME1.7_PORT_8080_TCP=tcp://172.17.0.69:8080
APPPOT_RUNTIME1.7_PORT_8080_TCP_PROTO=tcp
APPPOT_RUNTIME1.7_PORT_9080_TCP_PROTO=tcp
APPPOT_RUNTIME1.7_PORT_9990_TCP_ADDR=172.17.0.69
APPPOT_RUNTIME1.7_PORT_9080_TCP_ADDR=172.17.0.69

この状態で、Jenkinsサーバーコンテナから以下のコマンドを実行することで、JenkinsサーバーからWildFlyのポートにアクセスできることを確認できます。

# curl http://apppot_runtime1.7:8080
<!--
  ~ JBoss, Home of Professional Open Source.
  ~ Copyright (c) 2011, Red Hat, Inc., and individual contributors
略

次は、JenkinsサーバーからWildFlyへリモートデプロイします。