😊

dockerを輪講用に勉強し直した話

2024/11/25に公開

今回は研究室内で「dockerを輪講しよう」ということで集まった先輩同期含め7名に向けて、dockerってまずなんなの? みたいなところを自分なりの言葉で説明できるようにしたので、そのことについて記事を書きたいと思います。

dockerとはどのようなサービスなのか

まず持っていて欲しい意識としては、チーム開発を行う際にソースコードをGitで共有するように、プロダクトの開発環境を共有するためのツールのように認識しておいて欲しいです。
Gitを使ってソースコードを共有していた時に
A「あれこのコード動かないけど...」
B「え!?自分のPCでは正常に動いたのに...」
ということが結構起こります。これは個人個人のPCで作られているライブラリなどの環境がGitでは共有されていないことが原因です。ソースコードは共有できていても個人のPCまでは共有できない、この問題を解決するために使われるのがPaaS(Platform as a Service) です。dockerもPaaSの一種になります。

PaaSとdocker

PaaSというサービスはクラウドコンピューティングの技術を応用して、もともとアプリケーションを作成するために自社で、あるいは個人でサーバー用のコンピュータを作り、それを管理していたサーバーサイドの機能をインターネット上で完結させて利用できるようにしたサービスになります。(PaaSについて、詳しくはこちら
dockerを作ったdotCloud社が創設された2008年ごろ当時、PaaSといえばHarukuやGoogle App Engineなどがありましたが、これらのPaaSというのはRubyやPythonといった特定の言語やフレームワークに依存してサービスを展開しており、例えばRubyとPythonを使ったプロダクトを開発しようとした際には、それぞれに対応した二つのPaaSを使う必要がありました。
これを解決するために、dotCloud社はマルチランゲージに対応したPaaSを開発しようと考え、コンテナ技術を利用してPaaSをひとまとめにしたようなサービスを考えました。

コンテナ技術とは

先ほどの章で突然コンテナ技術という言葉が出てきて「なんじゃそれ?」と思ったかもしれません。このコンテナ技術はdockerを使用する上で覚えておかなければならないものです。
しかし、コンテナ技術は歴史を辿れば1979年に生まれたchrootまで遡ることになるため、歴史を振り返りながらコンテナ技術について学習したい人には以下のサイトがおすすめです。
https://zenn.dev/ttnt_1013/articles/f36e251a0cd24e#4.1.-osレベルの仮想化技術黎明期(1970~2004年ごろ)

また、コンテナ技術を超超わかりやすく解説しているサイトがありますので、そちらを見ていただければと思います。↓
https://thinkit.co.jp/article/17301

ここまで読んでコンテナ技術について理解したら、コンテナ技術がdockerでどのように使用されているのかを次の章で書いていきます。

コンテナを積んだ船 = docker

勘がよろしい優秀な方にはもうバレているかもしれませんが、このコンテナ技術を応用してPaaSそれぞれを一つのコンテナとして実装し、それを一つの船で運べるようにしたものがdockerです。
PaaSはそれぞれが別のプラットフォームとして実装されており、各プラットフォームを同じサービスに落とし込むことは難しかったのです。もので表せば、あのプラットフォームは段ボールの箱に入っていて、あのプラットフォームは金庫に入っていて... というように素材も形も箱の開け方も全然違ったため、それらを同じように扱って、管理することが難しかったのです。
しかし、その箱の開け方や素材をコンテナという形で揃えて多くの環境や言語を一つのサービスの中に落とし込んだものがdockerということになります。
すごそうでしょ??

dockerを活用することで

現在は法人用と個人用でサービスの有償化が進んでいますが、個人で使う分には未だ無料で使えます。dockerを使ってどんどん大きな開発を効率的に行っていきましょう!

Discussion