はじめに
本記事は 「初心者OK!Docker入門+応用:ゼロからでも実務で使えるスキルが身に付ける」 のシリーズ記事の1つです。
「初心者OK!Docker入門+応用:ゼロからでも実務で使えるスキルが身に付ける」のシリーズについては、以下の元記事をご覧ください。
Docker とは?
Dockerwを小難しい言葉で説明すると、
「コンテナ仮想化技術を使って、アプリケーションを開発・配置・実行するための隔離された環境を提供するツール」
ということになります。
では、 「コンテナ」 とはなんでしょうか?
コンテナとは?
コンテナは、貨物船で荷物を運ぶときに使われる、硬い箱のこと。
この箱は非常に頑丈な密閉された箱になっています。
この船で使われるコンテナのように、
ソフトウェア開発での「コンテナ」とは、
パソコンやサーバなどのマシン上で、独立して互いに隔離され、干渉されない環境
といった性質を持っています。
コンテナに何を入れるのか?
じゃあ、ソフトウェア開発でのコンテナには何を入れるのか?というと、なんでも入れられます。
OSには、Ubuntu Linuxを
データベースには、MySQLを
データ分析のために、Pythonを
etc...
好きなように自分の必要なソフトウェアをコンテナに入れることが可能です。
言い換えると、コンテナの中に小さなパソコンが1台入っているような感覚です。
コンテナにはホストOSが必要
どこかのOSが動いているホストマシンが必要です。
このホストマシンで動くOSのことを、ホストOSと呼んだりします。
通常は、Dockerを動かすパソコンのOSがホストOSに該当します。
(Ex. Mac PCを使っているなら、ホストOS = macOS)
Docker とコンテナの関係
上図のように、Dockerはコンテナを作ったり、ホストOSと仲介したりします。
たとえば、コンテナ内で行ったなんらかの処理の結果を、Dockerが動いているPC上のファイルに保存したい場合には、Dockerを通じて、ホストOSにファイル書き込みの要求が行われます。
他にもコンテナの管理は全て、Docker によって行われます。
コンテナのメリット
では、コンテナがあると何が嬉しいのでしょうか?
ホストマシンの環境に依存しない
たとえば、MySQLとPythonをインストールする場合の例で考えてみましょう。
コンテナがない環境である、上図の左側では、ホストマシン(ホストOSが動くPC)に直接これらのソフトウェアをインストールすることになります。
この場合、すでに存在する他のソフトウェアと干渉する可能性がありえます。
これによって、
「AさんのPCだと上手く環境構築ができるのに、自分のPCだとインストールで失敗する」
みたいなことが起こり得るということです。
一方、コンテナのある環境では、コンテナの内部はホストマシンから完全に隔離されているため、ホストマシンの状態には依存せず、干渉しません。
よって、 バージョンの競合やホストマシンの環境による不具合といった問題が起きません。
これは大きなメリットです。
ホストOSに依存しない
さらに、コンテナの中では隔離されていて、それが動くホストOSには依存しません。
なので、上図のようにコンテナを起動するホストOSが macOS でも Windows でもコンテナの中での挙動はほぼ同じことが保証されます。
(厳密には多少の違いはあるのですが、ほとんどのケースでは無視できるレベルかと思います)
ホストマシンに複数のコンテナも配置可能
コンテナは1つのホストマシンの上に複数のコンテナを配置可能です。
たとえば上図のように、同じWindowsマシン上に、Ubuntu Linux環境のコンテナと、CentOS Linux環境のコンテナという全く異なる環境のコンテナを同時に動かすことも可能です。
これによって、気軽に隔離されたさまざまな環境をお使いのPC上に複数立ち上げることができるというわけです。
そして、当然これらのコンテナは隔離されていますので、互いに干渉することはありません。
Next
Docker講義動画を Udemy で配信中(クーポンあり)
今回の内容を含むUdemyの動画コースを配信しています。
動画の方が理解しやすい!という方も多いと思いますので、ぜひ興味のある方はご覧ください。
動画版の方が丁寧に説明しているのと、動画版にしかないコンテンツも多くあります。
たとえば、動画版ではDockerの基礎部分だけでなく実際の業務に即したアプリ開発を体験するセクションも用意してあります。
以下リンクからだと割引で買えます。