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が起動してないので、手動で起動が必要になる。 自動化したいけど疲れたから今日はこんな感じでよしとしておく。