開発環境に Docker を導入し開発を効率化する話〜開発本部・ TechLunch〜
口コミで探せる介護施設の検索サイト「介護のほんね」を開発している新居です。 本日は、メドレー開発本部にて隔週で行われている勉強会(TechLunch)で、Docker の発表を行ったのでその一部を紹介したいと思います。
メドレーと Docker
弊社ではオンライン病気事典 MEDLEY(メドレー)の運用で Docker が使われています。 2015 年 2 月のリリース時から開発環境〜本番環境の全てで Docker が使われており、開発運用を通じてノウハウも少しずつ貯められています。
一方、私が以前関わっていた「ジョブメドレー」の中で感じていた課題として、
- 開発環境の構築で時間がとられる
- たまにMacの OS(オペレーティングシステム)が新しいと、あるライブラリがインストールできなくなってしまう
- 本番環境で使っている nginx の設定を弄りたいがテストしにくい
などがありました。
事業規模が大きくなっていくにつれエンジニア個々の時間の使い方も大事になっていきます。 頻度は少ないものの開発環境の構築で時間を無駄にしてしまったり、本番環境の稼働を止めてしまったりすることは事業に与える影響も大きくなってきます。
こうした課題意識が、自分の勉強も踏まえて「ジョブメドレー」の開発環境を Docker 化してみるという取り組みに繋がりました。 さらにその勉強の中で得た知見を社内の勉強会でアウトプットすることで、また開発環境構築時にメンバーが Docker に触れる機会を作ることで技術の理解や底上げに繋がることを狙いました。
Docker とは
エンジニア界隈ではお馴染みの Docker ですが、このブログは医療従事者やエンジニア職ではない方もご覧になられていると思いますので、Docker の説明を簡単にしておきます。
www.docker.comDocker とは、ひとことでいうと「Linux上で動作するシンプルで使いやすい軽量コンテナ環境」です。 Linuxという OS 上にコンテナという箱を用意し、そのコンテナの中に必要なソフトウェアやライブラリ(ツール)などをインストールしてひとつのまとまりとしてパッケージングすることができます。
これにより、
- ウェブサービスなどが動作する環境をポータブルな環境にすることができ、開発環境や検証環境、本番環境でまったく同じ環境を作ることが容易になる
- これまでのような開発環境と本番環境の微妙な違いによる動作の不具合や、開発環境では動いていたのに本番にデプロイしたら動かなくなりましたといった問題から解放される
- エンジニアの精神的な不安も幾分か軽減される
といったメリットを享受することができるようになります。
また、新しいメンバーやディレクターの PC で Docker が動く状態になっていれば開発環境を構築するのも格段に楽になります。 PC の OS の違いなどによるライブラリがインストールできないといった問題で時間を奪われることもなくなるでしょう。
このようにできるだけ簡単な言葉で Docker を説明してみましたが、Docker のようなコンテナ型仮想化技術というのは古くからあり、Docker を提供する Docker 社の FAQ ページではそれら(ここでは LXC)との違いが説明されています。
docs.docker.com勉強会の内容
冒頭でも述べましたが、弊社では MEDLEY の開発運用でのみ Docker を使っているため、自分も含め他サービスの運用メンバーで Docker に慣れていない人もいます(もちろん個人や前職で Docker を触っていたメンバーもいますが)。
メンバーが増えてくるにつれ個々の技術レベルにも差が生まれてくるので、そういった差を埋めるためにも今回は Docker 初心者向けに基本的な話と既存のRailsプロジェクトをどのように Docker 化していくかといった話をしました。
実際の内容としては、
- Docker、コンテナとは?
- Docker for Macによる Docker 環境の構築
- Docker Machine
- Docker Compose
- xhyve
- Kitematic
- コンテナの作り方
- Dockerfile の作り方
- Docker Compose による複数コンテナの管理
- ジョブメドレーの開発環境を Docker 化する話
といった内容で発表を行いました。
Docker for Macについては 2016 年 7 月に正式版がリリースされ、それまでの Docker Toolbox による Docker 環境構築に比べて幾分か楽になり、Docker Toolbox からの移行も簡単でより Docker が使いやすい状況へと進みつつあります。周辺のエコシステムが積極的に整備されているのは Docker の利点のひとつでもあります。
docs.docker.comまた、Docker の内部でどういうツールが動いているのかを理解し、実際にコンテナを立てたり壊したりして試行錯誤を繰り返すことで基本的な使い方も体に染み付いていきます。
ここまで来れば実際のサービスの開発環境を Dockerfile と docker-compose.yml などで定義し、ビルド・実行することで Docker を使った開発環境を作ることができます。 まだ途中になっている部分もありますが、これらの過程の中で得た知見などを中心に発表を行いました。
まとめ
メドレー開発本部の技術勉強会(TechLunch)で発表した内容の一部を紹介しました。
メドレーではこのような勉強会を通じてメンバーの技術の理解や底上げを促し、弊社が提供するサービスをより安全に効率良く開発・運用できるように努めています。 今回は開発環境を効率よく構築するためのツールとして Docker を取り上げ、それを開発本部内で勉強していきました。 これによって、開発本部のメンバーが開発しやすい環境を整えることを目指しました。 今後も新しくスタンダードになりつつある技術を積極的に勉強し、サービスをより良くする上で価値あるアウトプットにしていけるよう努めて行こうと思いました。
メドレー開発本部で実施している「TechLunch」での発表内容は今後も定期的に紹介していくので、是非メドレーブログをチェックしてみてください!
参考
今回の勉強会ではこちらの本を参考にさせていただきました。
www.amazon.co.jp何冊か手にとって読んでみましたが、こちらの本が基本的なことから網羅的に書かれており、また細か過ぎず読むのにも時間がかからないので、初心者の最初の 1 冊としてオススメしたいと思います。