オンプレミスやクラウドのEC2インスタンスやVMしか利用したこと無い私からすると、「コンテナ」「Docker」というものがどうもイメージし辛いため、文字で整理しようと思い本記事を書きました。
同じような悩みを持った人の一助になれば、、
Dockerとは
1台のサーバー上にコンテナ型の仮想環境を構築することが出来るプラットフォームです。
今までも仮想環境を構築する技術はVirtualBoxやHyper-V等数多くありました。
では従来の技術とDockerは何が異なるのでしょうか?比較しながら整理していきます。
ホスト型仮想化ソフトウェア
vagrantの記事を書いた時にも触ったvirtualboxは上記のホスト型仮想化ソフトウェアです。
こちらのメリットとしては比較的仮想化に必要なソフトウェアが扱いやすく、構築するのに必要なイメージも入手しやすいので個人検証で利用しやすいことだと考えています。
ハイパーバイザー型
こちらのメリットとしてはホストOSを必要としないためハードウェアを直接制御出来ることだと考えています。
今値上げで話題になっているESXIやmicrosoftのhyper-vなどがハイパーバイザー型です。
(話脱線しますがブロードコム強気ですね、、仮想基盤はVmware社の商品に依存しているところが多いので大変では、、、)
上2つの従来の仮想基盤の共通点
話を戻しまして上2つは異なる方法を利用した仮想技術ですが、この2構成には共通点があります。
「ゲストOS」が存在していることです。
ゲストOSを稼働させるのに基となるリソースを割いてしまう為、動作が重くなってしまう傾向があります。
では今回の主役のDockerはと言いますと
ゲストOSが存在しません。
従来の仮想化技術はゲストOSを起動させる事が前提なのに対して、Dockerのコンテナはプロセスとして動いています。
それによって軽量で扱う事ができ、環境差分が少ない状態で複数人で開発を利用することが可能になります。
また、もう一つのメリットとして上の図の通りミドルウェア〜アプリケーション層のソフトウェアがコンテナの中に纏まってありマシンからマシンへ流用することが可能になります。
個人環境のミドルウェアとソフトウェアのバージョン不一致により動かないといったこともありません。
では次の項ではDocker利用に必要な概念などを整理していきます。
少なくとも以下3つは押さえておく必要があると思います。
イメージ
Dockerの「イメージ」とは、コンテナを動かすためのテンプレートファイルのことです。イメージには、コンテナで使うOSやアプリケーション、実行するコマンドやメタデータなどが含まれています。
コンテナを作る際には、必ず1つ以上のベースとなるイメージが必要です。
このイメージは、Docker Hubなどのオンラインリポジトリからダウンロードして使用します。
Dockerfile
Dockerfileは、Dockerイメージを作成するための設定ファイルであり、イメージの設計図として機能します。
Dockerfileには、ベースとなるイメージの指定や、インストールするパッケージ、実行するコマンドなどが記述されており、これをもとにDockerイメージが構築されます。
通常、Dockerfileはベースとなるイメージを指定するところから始まります。例えば、FROM ubuntu:18.04と記述することで、Ubuntu 18.04をベースにしたイメージを作成することを示します。
その後、RUN命令などを用いて、必要なパッケージのインストールや設定を行います。例えば、RUN apt-get update && apt-get install -y package1 package2と書くことで、package1とpackage2をインストールすることができます。
Docker Compose
Docker Composeは、複数のコンテナを効率的に管理・操作するための設定ファイルの役割を担います。
この設定ファイルは通常、compose.yamlと呼ばれ、そこに使用するDockerfileやコンテナ名、ネットワークの設定などが記述されます。
このファイルを元に、必要なコンテナの構成や連携を簡単に管理できるようになります。
次回はこれらを使って構築した記事を書きます。
ありがとうございました。