ブルームテクノロジー

テクノロジー

【Docker入門】超・初心者向け Dockerの基本を書いてみた!

AI開発室

AI開発室

【Docker入門】超・初心者向け Dockerの基本を書いてみた!

こんにちは。データサイエンス課のTKです。

突然ですが皆さん「Docker(ドッカー)」という言葉をご存知でしょうか?

参照:Docker とは|AWS

詳しい人にしてみたら「仮想技術」「コンテナ技術」などで馴染みのあるものかもしれませんが、初学者にとっては用語や概念が少々難しく「ドッカーって複雑なものなのかな…」と思い込んでしまう方もいるかもしれません。

そこで今回は、「Docker(ドッカー)」をこれから学ばれる方向けに、Dockerとはそもそもどういうものなのか?といったところから簡単に説明させていただければと思います。

難しい言葉は極力使わないように、Docker初心者の方でも安心して読んでいただけるようにまとめました。

「Docker」とはそもそも何か?

Dockerとは「データやプログラムを隔離できる環境」を作るツールのことです。

上図のように、通常1台のPCやサーバには、複数のソフトウェアやプログラムが入っており、同時にそれらを動かしています。皆さんが使っているパソコンがWindowsなら、メモ帳やワードソフト、パワーポイントなどをイメージしてください。

こうした複数の「ソフトウェア」「プログラム」「データ」を同じPCやサーバ内で完全に隔離させるものがDocker(ドッカー)です。

上図のように、PC内にDockerを導入することで、そのDockerの中の「小さな部屋のようなもの」にメモ帳などのソフトウェアを格納することが可能となります。

この「小さな部屋みたいなもの」によって、「ソフトウェアやデータを完全に隔離する環境」を1台のPCやサーバーに作れることがDockerの仕様となります。

※注意:厳密にはWindows専用のソフトウェア(ワードソフト、パワーポイント)はDocker上では使用できません。

「データやプログラムを隔離」するのはなぜ?

ではそもそも、Dockerをインストールしてわざわざ「データやプログラムを隔離」したいと考えるのはなぜでしょうか?

それは、同じPC内でプログラムやソフトウェアが共有した結果生じる「トラブル」を防ぐことができるからです。

繰り返しになりますが、通常1台のPCやサーバには、複数のソフトウェアやプログラムが存在していて、それぞれが同時に動いています。また、ソフトウェアやプログラムは、他のソフトウェアやプログラムを参照して動くという場合が多いです。

例として、以下の図のように、同じPC内に、別々の「プログラムA」と「プログラムB」があり、両方とも「ソフトウェアC (ver.1)」を参照し、それぞれのプログラムを動かしている場合を考えます。

「プログラムB」は「ソフトウェアC」のバージョンがver.1でないと動かせない仕様であるとします。このとき「プログラムA」の都合により、「ソフトウェアC 」のバージョンをver.1からver.2にアップデートしてしまったらどうでしょうか?

その場合、「プログラムB」が動かなくなってしまいます。

しかし、「プログラムA」では「ソフトウェアC 」の新しい機能がほしいので、バージョンをアップデートさせたい。こうしたように、同じPC内でプログラムやソフトウェアを共有した結果、そのような二律背反な状況が生まれてしまうのです。

(ちなみに、通常同じPCに同じソフトウェア(ソフトウェアC)を複数入れることはできません)

そのような問題にこそ、「データやプログラムを隔離できる」というDockerの仕組みが役にたつのです。

Dockerの「コンテナ」について

 さて、Dockerが「データやプログラムを隔離する仕組み」についてもう少し詳しく見てみます。ここで「Dockerとはそもそも何か?」の章で述べた”小さな部屋のようなもの”という概念が再びでてきます。

Dockerでは、この”小さな部屋のようなもの”によって「データやプログラムを隔離」しますが、この”小さな部屋のようなもの”を「コンテナ」と呼びます。このコンテナはDockerの内部で作成されます。

下記の図のように、PC内に「プログラムA」「プログラムB」「ソフトウェアC」が存在している状況で考えてみます。

まず、PCにDockerのソフトウェア(Docker Engine)をインストールします。その次にDocker Engineが「コンテナ」を作成します。

上図でいうと「コンテナA」の中に「プログラムA」と「ソフトウェアC」が、「コンテナB」の中には「プログラムB」が別々に入っていることがわかります。

このようにして、Dockerをインストールする前では1台のPC上に直接「プログラムA」などのソフトウェアが存在していた状態だったのに対し、Dockerをインストールした後の状態では、Dockerのコンテナ内に意図したソフトウェアなどを入れて、隔離させている状態を作ることができます。

また、この「隔離させる」という仕組みは、Dockerの違うコンテナ内であれば、同じソフトウェアを入れることも可能です。上図を例とすると、Dockerをインストール前の状態では、同じPC内にソフトウェアCを2つ同時に入れることはできません。対して、Dockerをインストールした状態では、同じPC内に同じソフトウェアCが2つ同時に入っていることがわかります。これは、コンテナAとコンテナBがそれぞれ「隔離」されており、同じソフトウェアCがPC内に複数存在しても動作に何の影響も与えないためです。

「Docker」のメリット

さて、今まで述べてきたDockerを使用して得られる効果をまとめると、以下2つとなります。

  • Dockerの「コンテナ」内のソフトウェアやデータは隔離される
  • 「コンテナ」が異なれば、同じPC内でも同種のソフトウェアを入れられる

「ソフトウェアC 」を参照している「プログラムA」と「プログラムB」があり、「ソフトウェアC 」のバージョンをアップデートしてしまったら、「プログラムB」が動かなくなるという問題がありましたね。

上図のように、Dockerのコンテナを使用すれば、「プログラムA」はコンテナA内でソフトウェアC を、「プログラムB」はコンテナB内でソフトウェアC をそれぞれ参照します。その為「プログラムA」が勝手にソフトウェアC のバージョンをアップデートしても、それはコンテナA内での出来事なので、コンテナB内には影響を及ぼしません。

つまり、コンテナが分かれていれば、「プログラムA」の都合でソフトウェアC のバージョンをアップデートしても、「プログラムB」の動作に影響しなくなります。

Dockerは「どんなとき」に使われているのか?

Dockerは主に複数人のチーム単位で開発を行う場合に活用されています。理由は主に以下3つとなります。

  • Dockerで作成したコンテナの環境を開発者同士で簡単に流布できること
  • 1台のPC、サーバで複数のコンテナを作り、様々なソフトウェアのバージョンや互換性が試せる
  • 開発者のOSによらず、Dockerをインストールが出来さえすれば、開発環境が再現できる

これら以外にもDockerのメリットはあり、一部デメリットもあります。ですが、チーム単位で開発を行うのに便利なツールであることには変わりないので、開発現場で用いられるケースが多いです。

*まとめ*

今回は初心者の方向けに「Dockerとは?」について焦点を絞って情報をまとめさせていただきました。

Docker初心者の方がこの記事を参考に、Dockerについて興味を持っていただいたり、Dockerの初歩的な概念を理解してもらえたら嬉しいです。Dockerの導入方法やテクニカルな活用方法など、次の機会でご紹介できればと思います!それでは、またお会いしましょう。