Docker とは?
ざっくり一言で言うと、「データやプログラムを隔離」できるようにした仕組みになる。
「コンテナ技術」などとよく言われるが、本来の目的は「データ・プログラムの隔離」であり、その手段としてコンテナという技術を使用している。
実際にデータやプログラムを隔離する場所がコンテナである。
コンテナを操作する場合は、Docker Engineをインストールする必要があり、コンテナを作成するにはイメージというものから作成する。
データやプログラムを隔離することができるため、それぞれの実行環境に依存せず開発を行うことができるという利点がある。
動く仕組みについて
Dockerを動かすには、まず物理的マシン(PC)の中にLinux OS,Docker Engineが必要になりその上でコンテナがある。
そしてコンテナを操作するため、コンテナ内にはLinux OSの周辺部分が必ず用意されており、それを通じて操作できるようになっている(作成した時は空っぽではないということ)
Linux OSの周辺部分
少しOSの話にはなるが、OSはソフトウェアなどプログラムの命令をハードウェアに伝える役割を担っている。
周辺の部分とカーネルで構成されており、周辺部分がプログラムの指令を受け取りカーネルに伝え、カーネルがハードウェアを操作している。
先ほど説明したようにコンテナの中にLinux OSの周辺部分が備え付けてあるため、そこを通じてカーネルにプログラムを伝達しているため、コンテナを操作できるようになっている。
このようにDockerはLinux OSで動くため、WindowsやMacでDockerを動かすには、何らかの方法でLinux OSを導入しなければいけない。
方法としては基本的に2種類で、仮想環境を立ち上げLinux OSをインストールしてその中で操作するか、Docker Desktop for Mac or Docker Desktop for Windows をインストールしてLinux環境を用意する必要がある
イメージとコンテナ
コンテナを作成するときは、イメージを基に作成する。イメージはコンテナの素となるもので、「設計図」のようなものである。
イメージからコンテナを作成できるのはもちろんのこと、逆にコンテナからイメージを作成することもできるため、手を加えたコンテナがあった場合それを素にイメージを作成する。ということもできる。
イメージは1から自作することもできるしDocker Hub(イメージを誰でも登録・公開・利用できるサイト)で既に作成されているイメージを利用することもできる
また、Docker Hubで提供されているイメージをカスタマイズして使用することもできる。
コンテナのライフサイクルについて
Dockerのコンテナは、1つのコンテナをアップデートしていって「長く使用する」のではなく、「作っては捨てる」という使い方をする
コンテナは基本的に複数のコンテナを同時稼働することを想定しているため、1つのコンテナをアップデートしていると非常に効率が悪い。そのため、古いコンテナは捨て新たにイメージからコンテナを作ってしまい、乗り換えることで効率的にコンテナを利用することができる。
コンテナのライフサイクル・・・作成→起動→停止→廃棄→作成…
データ保存について
前述したようにコンテナはすぐに作成されるため、データはDockerをインストールしている物理的マシンのディスクにマウントし、そこに保存する。
そのためコンテナを削除してもマシン上にデータが保存されているため、削除されることなくコンテナを利用することができる。