Dockerとは、コンテナ型の仮想環境ソフトウェアである。
通常の仮想マシンの場合、基盤(ハードウェアエミュレーター)・OS・ミドルウェア・アプリケーションをすべて兼ね備えた形で作成するが、これは非常に重厚である。また、ホストとゲストのOSが共通の場合、ゲストOSを重ねて持たせるのも無駄である。
また、アプリケーションのセットアップの手順も、通常はインストールマニュアルを書いてその通りインストールする、という流れをとるが、これが個人・環境ごとに差を生んでトラブルの原因となりやすい。一応、ChefやAnsibleのように、インストールを自動化するツールがあることにはあるが、ソフトウェアのバージョン違いまでケアすることが難しい。あるアプリケーションのためにミドルウェアをアップデートしたら、そのミドルウェアに依存していた別のアプリケーションが動かなくなったというのはよくある話である。
一方、Dockerではコンテナという軽量の箱の中でアプリケーションを動かす。GUI出力機能はデフォルトでは付属しないので、サーバー用プログラムをコンテナ内で動作させるという用途が一般的。Dockerでは下図のように基盤(ハードウェアエミュレーター)部分に関しては原則一切面倒を見なくてよいし、OS部分もできる限り共有可能。ミドルウェアやアプリケーション部分にだけ専念すればよい。
| Docker | 仮想マシン方式 | |||
|---|---|---|---|---|
| アプリケーション | コ ン テ ナ |
仮 想 マ シ ン |
アプリケーション | |
| ミドルウェア | ミドルウェア | |||
| Dockerによる カーネルエミュレーション |
ゲストOS | |||
| ハードウェアエミュレータ | ||||
| ホストOS(カーネル) | ホストOS(カーネル) | |||
| ハードウェア | ハードウェア | |||
上記のカーネルエミュレーションはほぼ命令をホストOSのカーネルに渡すという作業になるため軽量の処理で済む。一方で、ホストOSと全く違うカーネルを動かすのは難しいので、Linux上でLinuxカーネルをエミュレーションするのが基本である。ただ、WindowsカーネルのDockerというものも出てきている。
Dockerのインストールであるが、各OSごとに異なるので簡単に説明すると、
といった具合である。
まずはdocker run --rm hello-worldとコマンドを打ってみよう。これで何が起きるかというと、
--rmフラグをつけているので、コンテナを削除するDockerイメージを作るには、Dockerfileというファイルを作成する必要がある。簡単に言えば、設計図である。Dockerfileの構造は、
という、大きく3つのパートに分けられる。先ほどのhello-worldイメージのDockerfileを解説すると、
FROM ubuntu:20.04と記述するという意味になる。Dockerfileを作成したら、docker build -t [イメージ名]:[イメージタグ] .というコマンドを、Dockerfileのあるディレクトリで実行する。なお、イメージタグ部分は省略可能で、その場合は、latestタグが補完される。
Dockerのマスコットキャラはコンテナを背中に載せたクジラ。下記はDockerタグに引っかかってるが、クジラをモチーフにした潜水艦の絵で直接の関係はない。
急上昇ワード改
最終更新:2025/12/16(火) 13:00
最終更新:2025/12/16(火) 13:00
ウォッチリストに追加しました!
すでにウォッチリストに
入っています。
追加に失敗しました。
ほめた!
ほめるを取消しました。
ほめるに失敗しました。
ほめるの取消しに失敗しました。