TL;DR
- OSにインストールされていないコマンドを使いたい
- ホストOSにインストールして環境を変えてしまうのは避けたい
- Dockerが使えるなら、コンテナをコマンドとして使ってもいいのでは
動機
TL;DRのまま。
ホストOSに入っていないコマンドを使いたかったのだけれど、ホストOSにコマンドをインストールして環境を変更するということは避けたかった。
Dockerは使ってもOKという状況下。
docker container run -i --rm
を使う
で、これをうまいことするには、Dockerコンテナを使ってコマンドを実行してあげればいいのでは、と。
docker container run
のオプションで、-i
と--rm
を使えばよいでしょう。
オプションの意味は、以下のとおり。
-
-i
(--interactive
) … 標準入力を受け取る -
--rm
… 終了時にコンテナを削除する
例えば、こんな感じで使います。
Ubuntu Linux 18.04に含まれているPerlを使う。
$ echo 'Hi! my name is taro' | docker container run -i --rm ubuntu:18.04 perl -wp -e 's/taro/jiro/'
Hi! my name is jiro
終了時にはコンテナも削除されるので、後始末も気にする必要はありません。
初回は、Dockerイメージをpullする時間はかかりますけどね。
他の例。MeCabを使ってみるなど。
$ echo 'すもももももももものうち' | docker container run -i --rm kimtaro/mecab mecab
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS
覚えておくと、小ネタとして使えるかもしれません。
よく使うコマンドなどあれば、alias
として登録してみるなどありかもでしょうね。