dockerを何かを生成したり実行したりするツールとして使うという選択肢
dockerはサーバー動かすやつでしょ?
dockerといえばサーバーみたいなものに使うものだと思っていました。転職してきた当時、こんな風に使えるんや!と自分の中でパラダイムシフトが起きたのを覚えています(大袈裟)
cloudfrontの署名URLを作るperlのスクリプトを動かしたい
This sample was built using Perl 5.8.0. The following Perl modules, which you can download from CPAN:
perl?俺のmacのperlって何が入ってるんだろう?cpan?やったことないしな。なんかmacだと動く動かないとか面倒だなーどうしようとなる。
そこでdockerです
dockerは自分の環境を汚さずにコマンド実行くんとして使える
たったこれだけでできる
FROM perl:latest RUN cpan install MIME::Base64 URI RUN curl http://d1nqj4pxyrfw2.cloudfront.net/cfsign.pl -o /usr/local/bin/cfsign.pl RUN chmod +x /usr/local/bin/cfsign.pl ENTRYPOINT [ "perl", "/usr/local/bin/cfsign.pl" ]
Dockerfileの解説
- perlのバージョン??perlが動く環境??
perl:latest
でおk
- 必要なCPANはどれ??
- dockerなので好きなだけtry & error
- コマンドに引数でオプション渡したいんだけど・・
ENTRYPOINT
をつかおう!
- コマンドに外部ファイルを渡したいんだけど・・
-v
で実行時に渡そう
ということで、上記のdockerイメージを作って、こんな感じで実行してあげれば自分の環境を汚さずにコマンドが実行できます。-v
で秘密鍵を渡したりもできます。
$ KEY_PATH=private.pem $ KEY_PAIR_ID=APKEXAMPLEID $ CLOUDFRONT_RESOURCE_URL=https://yourdomain/sample.png $ docker run -v $(dirname ${KEY_PATH}):/work cfsign \ --action encode \ --url ${CLOUDFRONT_RESOURCE_URL} \ --expires $(date -v +1d +%s) \ --private-key /work/$(basename ${KEY_PATH}) \ --key-pair-id ${KEY_PAIR_ID} Encoded URL: https://yourdomain/sample.png?Expires=xxx&Signature=xAK***Uwc~kX-cA__&Key-Pair-Id=APKEXAMPLEID
ほかにも
サーバーにログインして自己証明書を生成するとか、なんかサーバー上でやらないといけないみたいな手順書みたいになってるものはdocker化できます。もし、そういうものを見かけたときは思い出してあげてください