MEDLEYオフィシャルブログ

株式会社メドレーのオフィシャルブログです。

開発環境にDockerを導入し開発を効率化する話〜開発本部・TechLunch〜

口コミで探せる介護施設の検索サイト「介護のほんね」を開発している新居です。 本日は、メドレー開発本部にて隔週で行われている勉強会(TechLunch)で、Dockerの発表を行ったのでその一部を紹介したいと思います。

f:id:medley_inc:20170131212540p:plain

メドレーとDocker

弊社ではオンライン病気事典 MEDLEY(メドレー)の運用でDockerが使われています。 2015年2月のリリース時から開発環境〜本番環境の全てでDockerが使われており、開発運用を通じてノウハウも少しずつ貯められています。

一方、私が以前関わっていた「ジョブメドレー」の中で感じていた課題として、

  • 開発環境の構築で時間がとられる
  • たまにMacのOS(オペレーティングシステム)が新しいと、あるライブラリがインストールできなくなってしまう
  • 本番環境で使っているnginxの設定を弄りたいがテストしにくい

などがありました。

事業規模が大きくなっていくにつれエンジニア個々の時間の使い方も大事になっていきます。 頻度は少ないものの開発環境の構築で時間を無駄にしてしまったり、本番環境の稼働を止めてしまったりすることは事業に与える影響も大きくなってきます。

こうした課題意識が、自分の勉強も踏まえて「ジョブメドレー」の開発環境をDocker化してみるという取り組みに繋がりました。 さらにその勉強の中で得た知見を社内の勉強会でアウトプットすることで、また開発環境構築時にメンバーがDockerに触れる機会を作ることで技術の理解や底上げに繋がることを狙いました。

Dockerとは

エンジニア界隈ではお馴染みのDockerですが、このブログは医療従事者やエンジニア職ではない方もご覧になられていると思いますので、Dockerの説明を簡単にしておきます。

www.docker.com

Dockerとは、ひとことでいうと「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」での発表内容は今後も定期的に紹介していくので、是非メドレーブログをチェックしてみてください!

参考

今回の勉強会ではこちらの本を参考にさせていただきました。

https://www.amazon.co.jp/dp/4839959234www.amazon.co.jp

何冊か手にとって読んでみましたが、こちらの本が基本的なことから網羅的に書かれており、また細か過ぎず読むのにも時間がかからないので、初心者の最初の1冊としてオススメしたいと思います。

求人

www.wantedly.com

www.medley.jp