前回、Glueの開発環境をDockerで作りましたが、zeppelinコンテナを起動してホストからsshフォワードを実行して接続するという構成でホストを意識する必要がありましたが、せっかくzeppelinをdockerで作っているのでsshフォワードを行う部分もdockerで実現できないかと思い考えてみました。
今回作った構成
データを永続化するためにdataコンテナとsshフォワード用にssh forwardコンテナを追加することにしました。
そのためzeppelinコンテナからはssh forwardコンテナに接続しにいくことになります。
こうすることでssh forwardコンテナには名前でアクセスできるので、毎回設定変更する必要がなくなります。
手順
- ssh forwardコンテナ作成
- docker-compose.yml作成
- 起動確認
ssh forwardコンテナ作成
以下のとおりDockerfileを作成します。
FROM ubuntu:latest RUN apt-get -y update && apt-get -y upgrade RUN apt-get -y install openssh-client net-tools ADD ssh_forward.sh /home/ubuntu/ssh_forward.sh RUN chmod 644 /home/ubuntu/ssh_forward.sh CMD ["/bin/sh","/home/ubuntu/ssh_forward.sh"]
コンテナ起動時に実行するssh_forward.shを作成します。
起動時に環境変数で秘密鍵と接続先のIP or DNSを受取り鍵ファイルを作成して開発エンドポイントへ接続します。
#! /bin/sh echo $SSH_RSA > dev_endpoint.pem chmod 600 dev_endpoint.pem ssh -g -i dev_endpoint.pem -NTL 9007:169.254.76.1:9007 glue@$HOST_ADDRESS -o StrictHostKeyChecking=no
ビルド実行
docker build -t ssh_forward .
docker-compose.ymlを作成
version: '2' services: data: image: busybox container_name: app volumes: - /zeppelin/notebook zeppelin: image: apache/zeppelin:0.7.3 ports: - "8080:8080" volumes_from: - data restart: always links: - "ssh_server" ssh_server: image: ssh_forward environment: SSH_RSA: "[DevEndpoint接続用ssh秘密鍵]" HOST_ADDRESS: [GlueのDevEndpointのDNS or IP]
※DevEndpoint接続用ssh秘密鍵は改行コードを「¥n」に置換して1行にしてからセットしてください。
起動確認
busybox、apache/zeppellinについては予めdocker hubから取得しておいてください。
また、GlueのDevEndpointの設定も事前に必要になります。
docker-compose up
以下アドレスにアクセスして画面が表示されていれば成功です。
http://localhost:8080
これで全てdockerコンテナ上で完結できましたね。