天将奔烈

日々の記録や学習内容を書いていきます

DockerでPython3 Redis fluentdの環境を作る

python Redis fluentdを使ってこんな事がしたかった。

redisにデータ登録 pythonで処理して標準出力 fluentdで標準出力結果を入力値に指定して再度別のpythonスクリプト起動

で、最初は自分のMacでやってたんだけど、どうやらMac環境では?エラー発生時に メッセージが不親切で何が起きてるのかわからなかったのと、自分のサーバーと同じcentos環境で実行したくなった。

ということで、ローカル内にcentosベースのdockerコンテナを立てようという事でイメージを作成した。

# centos6のベースイメージ
FROM centos:6

# yumをアップデート
RUN yum -y update

まずはお決まりのやつを書いて。

# yumにiusリポジトリを追加
RUN yum install -y https://centos6.iuscommunity.org/ius-release.rpm

# python3.6をインストール
RUN yum install -y python36*

# python3のパスを通す
RUN ln -s /usr/bin/python3.6 /usr/local/bin/python

# pip3のパスを通す
RUN ln -s /usr/bin/pip3.6 /usr/bin/pip

これでpythonが入ったので、次はfluentd(td-agent)を入れていく。

早速公式に乗っている手順でcurlでDLして実行するコマンドを記述したが、 エラーが起きた。 sudo権限がないとエラーが出ていたみたいなので、???となってwgetで 公式のcurlで実行しているshellをwgetでDLして見てみると。。。

echo "=============================="
echo " td-agent Installation Script "
echo "=============================="
echo "This script requires superuser access to install rpm packages."
echo "You will be prompted for your password by sudo."

# clear any previous sudo permission
sudo -k

# run inside sudo
sudo sh <<SCRIPT

  # add GPG key
  rpm --import https://packages.treasuredata.com/GPG-KEY-td-agent

  # add treasure data repository to yum
  cat >/etc/yum.repos.d/td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=http://packages.treasuredata.com/2.5/redhat/\$releasever/\$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF

  # update your sources
  yum check-update

  # install the toolbelt
  yes | yum install -y td-agent

SCRIPT

# message
echo ""
echo "Installation completed. Happy Logging!"
echo ""

sudoでコマンドを実行するようになっているが、dockerの起動時にはsudo権限がないためエラーになっていた模様。 面倒なので、このshellを直接編集してsudoを全て削ってhostからADD後に実行することにした。

# td-agentのインストール

# hostディレクトリをコンテナにADD
ADD ./td-agent-sh /home

# install shellを実行
RUN sh /home/install-redhat-td-agent3.sh

ホスト側のディレクトリにtd-agent-shを作成して、その中に先ほどのshを格納 ADDでコンテナ側の/homeディレクトリ配下に設置後にshを実行。 これでtd-agentのインストールも完了。

後はredisをインストール。

# epelリポジトリをyumに追加
RUN yum -y install epel-release

# rpmでremiリポジトリを追加
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# remiリポジトリからredisをインストール
RUN yum --enablerepo=remi,remi-test install -y redis

これでredisもインストール完了。

一応全部纏めるとこんな感じになった。

FROM centos:6

RUN yum -y update

RUN yum install -y https://centos6.iuscommunity.org/ius-release.rpm

RUN yum install -y python36*

RUN ln -s /usr/bin/python3.6 /usr/local/bin/python

RUN ln -s /usr/bin/pip3.6 /usr/bin/pip

ADD ./td-agent-sh /home

RUN sh /home/install-redhat-td-agent3.sh

RUN yum -y install epel-release

RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

RUN yum --enablerepo=remi,remi-test install -y redis

当然だけどコンテナ起動時にtd-agentとredisが起動してないので、手動で起動が必要になる。 自動化したいけど疲れたから今日はこんな感じでよしとしておく。