こんにちは @muddydixon です。
docker をサービスでも利用していますが、ローカルの開発でもガシガシ利用しています。
コンテナでミドルウェアを利用したり、各種のマイクロサービスを整えた開発環境を構築したり、というのは王道だと思いますが、言語環境としても利用しています。
以前は xbuild
を利用していたりもしたのですが、 mac だと brew や xcode 、 linux だと gcc や libXXX など各種依存ソフトウェアに悩まされていました。
また普通に container を立ち上げその中で vim をつかう、ということもしていたのですが、私は未だに emacs の呪縛から開放されない旧人類なので、コード自体はローカルのエディタを利用したいので「コレジャナイ」と思っていました。
課題
解決方法
% git clone XXX % cd XXX % docker run -it -d $(pwd):/opt --name $(basename $(pwd)) ${言語イメージ}
継続的にコードを書いて実行する場合は、
% docker exec -it -w /opt $(basename $(pwd)) bash root@4223595b3f04:/opt#
とコンテナの中に入っておいて、
- ローカルのエディタでコードを書く
- コンテナの中で実行する
とすればいいです。
テストコードとかもそのまま実行すればいいですしね。
必要なミドルウェアもコンテナの中にインストールすればいいですし、常に使うものなら docker-compose
をおとなしく使えばもっと良いです。
もう一歩
docker exec
は -i
を付けて標準入力やパイプを受け取れます。(-t
をつけると仮想 TTY ができるので付けないようにします)
こうすることで、例えば
% docker run -it -d intimatemerger/mecab % alias mecab="docker exec -i ${CONTAINER ID} mecab"
としておけば
% echo "すもももももももものうち" | mecab
とかできます。IPADIC だけでなく overlast さんの mecab-ipadic-neologd もコンテナの中でインストールしておけば、 ローカルの容量がいっぱいのときもコンテナを消せばいいだけで、「ローカルのどこにインストールされたんだろう・・・」とか捜索願を出さなくてすみます。
平和!
おまけ
HAROiD ではいくつかの credential 情報を databags に入れて git で管理しているのですが、 itamae-secret
を使うためだけに ruby
やその他の gem を入れるのは嫌でした。
そこで、上記のように
% git clone haroid_credentials % docker run -it -d $(pwd):/opt --name databags ruby:latest % docker exec -w /opt haroid_credentials gem install itamae-secrets
こうしておいて初回利用時にパスフレーズを入力しておきます。
% alias databags=docker exec -w /opt haroid_credentials itamae-secrets get
と登録しておくことで
% databags ${なんかクレデンシャル情報のキー}
とするだけで取り出せます。
便利!
まとめ
docker いろいろ便利ですね! (kube 難しいですね!
We are hiring!
- データサイエンティスト: 他の企業では手に入らないアカウントベースで紐付いた「視聴ログ」「Web閲覧ログ」を合わせて分析し、テレビの編成や営業、宣伝に入り込んであまねく多くの視聴者にサービスを届けることができます。
- インフラ/アプリ/フロントエンジニア: テレビであなたのサービスをリリースすることができる!(かもしれません