ついにTableau ServerがDockerコンテナに対応したので試してみた

コンテナとイッパイアッテナ
2021.07.20

大阪オフィスの玉井です。

つ、つ、つ、ついに、Tableau ServerがDcokerで動かせるようになりました。

というわけで、今回はコンテナ版Tableau Serverを立ち上げてみたいと思います。しかし、色々と注意事項や制約事項があるので、検証してみたいという方は、それらを踏まえた上で試しましょう。

概要など

コンテナ版Tableau Serverを立ち上げるまでの流れの概要

めちゃくちゃ簡略化すると下記の通りとなります。

  1. 公式に対応しているLinuxOS環境を用意する
  2. 用意したLinuxOS環境で、Tableau製のイメージビルドスクリプト(tableau-server-container-setup-tool)を実行する
  3. ビルドされたDockerイメージ(=コンテナ版Tableau Server)からDockerコンテナを起動する
  4. コンテナが起動しているLinuxOS環境(が動いているホストマシン)にWebブラウザからアクセスする

注意事項など

上記の流れを踏まえて、いくつか注意しなければいけないことを先に記載しておきます。

イメージのビルドにはTableau社のスクリプトが必要

Docker Hubにビルド済みイメージが公開されているわけではありません。Tableau Serverのイメージをビルドするためには、Tableauが提供しているオリジナルのスクリプトを実行する必要があります。

Tableau社のスクリプトは特定のLinux環境のみで動作する

Building the Tableau Server in a Container Docker image is only supported on a RHEL-based Linux system (RHEL, CentOS, or Amazon Linux 2). Building on any other Linux distributions including MacOS may be possible but is currently untested and unsupported.

ローカルPC(WindowsやMac)上でのイメージのビルドには未対応です。つまり、イメージをビルドするためには、CentOS等の環境を必ず用意する必要があります。

筆者はMacbookPro(Intel, Big Sur)でスクリプトを動かしてみましたが、正しく動作しませんでした。

TSMは原則コマンドのみ

The TSM Web UI and remote CLI is not accessible by default.

TSMコマンドを用いた各種管理作業は、原則、コンテナの中に入って直接実行する必要があります。理由としては、コンテナ版Tableau Serverを立ち上げるまでの過程で、TSM用のユーザーが作られないからです。

ライセンス認証はオンラインのみ

オフライン認証は不可です。また、強制的にATRを用いた認証になるため、普通のライセンス管理とはちょっと異なる部分が出てきます。

やってみた

公式ドキュメント

環境の用意

マシンの用意

GCPのGCEを使用します。基本的には下記と同じことをします。ただし、OSはCentOS7を選択しました。

今回、このマシンは、イメージのビルドだけでなく、そのままTableau Server(のコンテナ)を動作させるマシンになります。

Dockerのインストール

下記を参考にしました。Dockerのバージョンが古いと、後で実行するスクリプトが動作しないので(普通のyum install dockerでインストールできるものはバージョンが古くてスクリプトが動きませんでした)、なるべく最新のDockerを使用しましょう(20.10.7で問題なく動作しました)。

イメージをビルドする(スクリプトを実行する)

それでは、Tableau Serverのイメージをビルドしていきます。まずはスクリプトをダウンロードします。ちなみに、ダウンロード元ですが、こちらになります(つまり、バージョンによってURLも変わる)。

$ wget https://downloads.tableau.com/esdalt/2021.2.0/tableau-server-container-setup-to
ol-2021.2.0.tar.gz

ダウンロードしたtarファイルを解凍します。

$ tar -xzf tableau-server-container-setup-tool-2021.2.0.tar.gz

解凍後のディレクトリに移動し、Tableau Server本体のインストーラーをダウンロードします。

$ cd /tableau-server-container-setup-tool-2021.2.0
$ wget https://downloads.tableau.com/esdalt/2021.2.0/tableau-server-2021-2-0.x86_64.rpm

ディレクトリ内にあるreg-info.jsonを開いて、編集します。Tableau Serverをインストールしたことのある方はピンとくると思いますが、Tableau Serverのインストール者に関する情報を事前に入力しておく必要があります。

{
"zip" : "<value>",
"country" : "<value>",
"city" : "<value>",
"last_name" : "<value>",
"industry" : "<value>",
"eula" : "accept",
"title" : "<value>",
"phone" : "<value>",
"company" : "<value>",
"state" : "<value>",
"department" : "<value>",
"first_name" : "<value>",
"email" : "<value>"
}

同じ場所で下記のコマンドを実行することで、スクリプトが起動し、Dockerイメージが作られます。

$ ./build-image --accepteula -i tableau-server-2021-2-0.x86_64.rpm

イメージがちゃんと作られているか確認します。

$ docker image ls
REPOSITORY             TAG                  IMAGE ID       CREATED          SIZE
tableau_server_image   20212.21.0610.0336   42ef9d48e767   19 seconds ago   6.48GB
...

スクリプトを起動しただけで、イメージが作られたので、ちょっと気持ち悪かったのですが、どうやら、スクリプトの中でdocker buildもしているようです。

イメージからコンテナを作成(起動)する

イメージがビルドできたので、ここからコンテナを起動します。

docker runするだけではあるのですが、色々とオプションがあります。

docker run \
-e LICENSE_KEY=<Tableau Serverのライセンスキー> \
-e TABLEAU_USERNAME=<初期ログインに使用するユーザーの名前> \
-e TABLEAU_PASSWORD=<初期ログインに使用するユーザーのパスワード> \
-p 8080:8080 -d <イメージのIDかタグ>

上記は公式ドキュメントに案内されているものと同じ内容です(一部日本語にした)。これ以外にもオプションはありますが、今回は上記のコマンドで実行します。

コンテナ版Tableau Serverを確認する

docker runしたときの-pオプションで指定している通り、ホストマシンのポート8080とコンテナのポート8080をリンクさせているので、Webブラウザからアクセスする時のURLはhttp://<マシンにIPとかホスト名>:8080になります。マシン側のポートの疎通設定などが問題ないかどうか確認しておきましょう。

Tableau Serverが起動していることを確認できました。

TSMコマンドについて

TSMコマンドについては、コンテナの中に入って行う必要があります。

[tamai_rei@tableau-server-container ~]$ docker exec -i -t <コンテナIDか名前> bash
[tableau@xxxxxxxx /]$ tsm version
Tableau Services Manager command line version 20212.21.0610.0336.
Tableau Server version 20212.21.0610.0336.

未検証なこと

コンテナ系クラウドサービスでの動作

AWS FargateやGoogle Cloud Runなどのサービスで動作させることができたら激アツなのですが、2021年7月現在は、特にドキュメント等で対応に対する言及はされていません。

そもそも、イメージをビルドする工程からして、あまりこういったクラウドサービスへの対応が考慮されていないようにも思えます(Dockerをホストするマシンは自前で用意する前提)。

Kubernetesによるオーケストレーション

下記のようなものがあるのですが、全くの未検証です。

おわりに

「結局マシンは用意せなあかんのかい!」と思ってしまいそうですが、インストール時の作業の簡略さはコンテナ版の方がかなり楽でした。

今回は必要最低限なことしかしていませんが、事前設定等ももっとたくさんあるようなので、本来なら毎回1からセットアップしないといけないTableau Serverを、コンテナとして事前に作っておけば、他環境でのデプロイや、バックアップ等を迅速に行えそうです。