Dockerってべんり

この記事は何かの解説、というよりは最近の感想である。

やっと Docker って便利だなと思えるようになってきた。一年近く前から Docker を避けるようになり、最近業務の都合で(上司が採用したから!)Dockerを使うことになったのだが、きちんとお膳立てされていている状態で使い始めればそんなに厄介なものでもないな、と思い始めた。そんなにすごい使い方はしていないが。

よいところ

実行環境の用意のしやすさ#

DBに格納されたデータを取得して整形するメソッドを実装したので、当然テストしたいわけだが、単体テストはともかく結合テストが厄介。あらかじめ DB を用意する必要がある。

しかし、手動でいいのであれば1、下記のようなコマンドを事前に叩いておけば DB が自動で立ち上がる(例では MongoDB を利用)。

$ docker run -p 27017:27017 mongo:3.4

この 1 コマンドでアプリケーションと MongoDB の結合テストを実施することが可能になる2

はやい#

はやい。開発環境として使うなら Vagrant のほうが好きな僕だけど、このはやさだけは Docker の(ひいてはコンテナ技術の)圧勝だ。長い Dockerfile のビルドもキャッシュを使えばわりと一瞬だし、止める、消す、再度生成するなど何度も繰り返す処理がはやいので、ストレスがない。空き時間にお菓子を食べすぎてしまうこともない。

結局最近 Vagrant を使っていない3のはこのはやさのせいだと言っても過言ではない。

よくないところ

難しい#

コンテナ技術のことをよく知らないので、雑いことしか言えないのだけど、普通に Docker は難しいと思う。特に Linux に不慣れな人は悪戦苦闘しながら利用していたりする。

個人的にはエンジニアでさえそうなのだから、非エンジニアの方々の PC でアプリケーションを動かしてもらうときに、非エンジニアの方々の PC に Docker をインストールするのとかどうなのよ? とか思ってしまう。が一方でそこで Docker を使わないともっと面倒くさいとかいう現象も発生しそう4なので一概には言えなかったりする。

やっぱりよくわかんない#

一年前の記憶だが、 Docker にはかなり苦しめられた記憶がある。主に docker-compose がわからなかったせいなのだが。今ではあまりそう思わないが、当時は Docker 使うとここまで大変になるなら、ホストにきちんとインストールしたほうがよくない? と思ったものだ。

その時の記憶や経験が完全に払拭されたわけではない5。だから「よくわからないから避けたい」という気持ちもまだある。しかしこれも経験の1つかと諦めてもいる。

今後の活用の模索

最近は個人でも Docker を使おうかと少し考え始めている。例えば、Haskell のインタプリタを利用するのに Docker Hub からダウンロードしたイメージを利用した。

$ docker pull haskell:8.2
$ docker run -it haskell:8.2

これだけで ghci が使えるようになる。確かに少々待つが「最初の一歩」の環境構築がコマンド2つでできるなんて本当にすごいことだなと感じる6

何にせよ、使っていかないと慣れないのでこれからは避けないで利用していこう、というプラスの気持ちになれただけでも成果だったのかもしれない。


  1. 当然 CI で自動テストにしたいわけだが、ここではそれをどう実現するかは書かない。 ↩︎

  2. まぁこれくらいなら Vagrant でもできるわけですが。 ↩︎

  3. 今度 Windows マシンを買ったらたぶん本格的に Vagrant 使わないとダメだろうなと思っている。 ↩︎

  4. 例えば Web アプリケーションなら API サーバーは Ruby でクライアントが Node.js とかだったりすると、言語処理系が2つ必要で gemnpm を利用して依存関係を解消して、とかを営業さんにやらせるのはとても大変そうだ。それよりかはエンジニアが Dockerfile で自動化しておいて、営業さんには docker コマンドの使い方だけ覚えてもらうというのは戦略としてありかもしれない。 ↩︎

  5. 今日気づくまで自分の MacBook に Docker.app をインストールしていなかった。無意識に使わないようにしたのだと思う。 ↩︎

  6. それを言うと wandbox はブラウザしか要らないのですごい。 ghc も複数のバージョンが用意されている。 ↩︎