Docker単語

34件
ドッカー
4.3千文字の記事
  • 1
  • 0pt
掲示板へ

Dockerとは、コンテナの仮想環境ソフトウェアである。

概要

仮想マシンを用いる動機

アプリケーションセットアップの手順といえば、通常はインストールマニュアルを書いてその通りインストールする、という流れをとるが、これが個人・環境ごとに差を生んでトラブルの原因となりやすい。一応、ChefやAnsibleのように、インストールを自動化するツールがあることにはあるが、依存するソフトウェア(やライブラリフレームワーク)のバージョン違いまでケアすることが難しい。あるアプリケーションのためにミドルウェアをアップデートしたら、そのミドルウェアに依存していた別のアプリケーションが動かなくなったというのはよくある話である。

仮想マシンを用いる動機は色々あるが、上記で述べたような問題を解決して、他のアプリケーション依存関係にを受けない/与えない環境を確保するという的で用いられることがある。

仮想マシンの問題点

しかし、通常の仮想マシンの場合、基盤(ハードウェアエミュレーター)・ゲストOS・ミドルウェア・アプリケーションをすべて兼ね備えた形で作成するが、これは非常に重厚である。また、ホストとゲストOSが共通の場合、ホストと同じOSゲストに重ねて持たせるのも駄である。

Dockerによる解決

一方、Dockerではコンテナという軽量のの中でアプリケーションを動かす。Dockerでは下図のように基盤(ハードウェアエミュレーター)部分に関しては原則一切面倒を見なくてよいし、OS部分もできる限り共有可。ミドルウェアやアプリケーション部分にだけ専念すればよい。

Docker 仮想マシン方式
アプリケーション






アプリケーション
ドルウェア ドルウェア
Dockerによる
カーネルエミュレーション
ゲストOS
ハードウェアエミュレータ
ホストOS(カーネル) ホストOS(カーネル)
ハードウェア ハードウェア

上記のDockerによるカーネルエミュレーションは命をほぼそのままホストOSカーネルに渡すという作業になるため軽量の処理で済む。一方で、ホストOSと全く違うカーネルを動かすのは難しいので、Linux上でLinuxカーネルエミュレーションするのが基本である。

2022年現在ではWindows上で動作するDockerも存在する。Windows版Dockerでは従来のLinuxカーネル用のコンテナ以外にWindowsカーネル用のコンテナの運用も可である。

用途・効能

GUIデフォルトでは付属しないので、サーバープログラムコンテナ内で動作させるという用途が一般的。というかGUIが必要なら素直にVMWareVirtualBoxなどの仮想マシンを使う。

従来の開発では開発環境で動いていたものが、ライブラリや細かい設定の違いにより実行環境で動かないという事態が頻発していたが、Dockerでは開発環境と同じ環境を実行先でも再現できるので、問題の発生が大きく軽減されるようになった。

また、1台のマシンで別々のソフトウェアに同じライブラリの異なるバージョンを使用させるということは弊が大きかったが、Dockerではそれぞれを別のコンテナで実行すれば全く問題を生じない。

発展として、複数のコンテナを同時起動することが容易になったことにより、後述するKubernetesのように一つのコンテナ異常を起こしたら、バックアップコンテナに切り替える、といった耐障害性を持たせる運用が可になった。

コンテナオーケストレーション

通常の仮想マシンでは、1台の物理マシン内に複数起動するとパフォーマンスの低下を招くので、強ハードウェアを用意するか、あきらめて複数台の物理マシンに分散するという手段を取らざるを得なかった。

Dockerでは、コンテナの軽量化によりそこまで強マシンを用意しなくても仮想マシンより多くのの仮想コンテナを扱えるようになった。これにより粒度の細かい役割分担が可になった。

たとえばWebサーバーととそれに接続するデータベースサーバーを、仮想マシン2台分のリソースが用意できないのであれば、1台の仮想マシン内に同居させなければならないが、DockerならWebサーバーデータベースサーバーを別々のコンテナに構築する方式が流である。

複数のコンテナが相互に協働して一つのアプリケーションを構成する様を、オーケストラに例えてコンテナオーケストレーションと呼ぶ。

Docker Compose

1台の物理マシン(OS)上で複数のコンテナを扱う場合、Docker Composeを用いるのが2022年現在では流である(以前は本家謹製のDocker Swarmというものがあった)

yaml形式で設定を記述する。

Kubernetes

さらに高度なオーケストレーションを実現するツールにKubernetesがある。こちらはどちらかというと、メイン物理マシンが故障したらサブマシンの仮想コンテナに切り替える、といったような複数の物理マシンに分散配置されたコンテナを管理する的に適している。

しばしばi18nの要領でk8sと略記される。

Kubernetesで用いるコンテナについては初期からDocker以外のコンテナを受け入れる設計だったものの、デファクトスタンダードであるDockerが流だった。しかし、後発コンテナ技術の多様化が進んで2022年からはKubernetesにおいてDockerはむしろ非推奨になっている。

イメージとコンテナ

詳細な使い方は後述するが、OS(ディストリビューション)のインストールとミドルウェアやライブラリセットアップが済んだ「イメージ」を元に「コンテナ」を作成し、「コンテナ」を運用するという使い方になる。

イメージは静的なものであるのに対し、コンテナは実行中・停止中などの状態を持つ。オプションなどで定しなければ、コンテナは停止後も実行後の状態を保持して残り、再開することも可である。

Docker Hub

Dockerの開発元であるDocker社が運営するDocker Hubという公式サイトがある。このサイトでは各種(言やミドルウェア)処理系開発元が各自の処理系を既にインストールした公式イメージ(Docker公式のものと処理系開発元の公式のものがある)などが多数開されている。実際の開発では素のOSコンテナイメージではなく、そういった処理系公式コンテナイメージを基盤にイメージを作成することが多い。従ってイメージ名は処理系+OS名+処理系バージョンのような命名になっていることが多い。

ただし、Docker Hub公式サイトとはいえ、公式イメージ以外にが作ったのか分からないイメージも多数アップされているので、使用は自己責任で。

ちなみに、Docker Hubを見ていると頻繁に出てくる"alpine"は、軽量のディストリビューションAlpine Linuxベースにしたコンテナイメージであることを示している。

Dockerの使い方

インストール

Dockerのインストールであるが、各OSごとに異なるので簡単に説明すると、

といった具合である。

Dockerコンテナの動かし方

まずはdocker run --rm hello-worldコマンドを打ってみよう。これで何が起きるかというと、

  1. ローカルにhello-worldというイメージがあるか確認する。なければ2へ、あれば3へ進む
  2. Docker Hubからhello-worldというイメージダウンロードしてくる(pull)
  3. hello-worldというイメージをもとに、コンテナを立ち上げる
  4. 3で立ち上げたコンテナで、スクリプトを実行する
  5. スクリプトの実行が終了すると、通常はコンテナはそのまま残るが、--rmフラグをつけているので、コンテナ削除する

Dockerイメージの作り方

Dockerイメージを作るには、Dockerfileというファイルを作成する必要がある。簡単に言えば、設計図である。Dockerfileの構造は、

  1. どのDockerイメージベースにするか
  2. どのようにコンテナソフトウェアインストールするか
  3. コンテナ起動時にどのソフトウェアを動かすか

という、大きく3つのパートに分けられる。先ほどのhello-worldイメージのDockerfileexit解説すると、

という意味になる。Dockerfileを作成したら、docker build -t [イメージ名]:[イメージタグ] .というコマンドを、Dockerfileのあるディレクトリで実行する。なお、イメージタグ部分は省略で、その場合は、latestタグが補される。

関連動画

関連静画

Dockerのマスコットキャラコンテナ背中に載せたクジラ。下記はDockerタグに引っかかってるが、クジラモチーフにした潜水艦の絵という設定で直接の関係はない。

関連商品

関連リンク

関連項目

【スポンサーリンク】

  • 1
  • 0pt
記事編集 編集履歴を閲覧

ニコニ広告で宣伝された記事

壱百満天原サロメ (単) 記事と一緒に動画もおすすめ!
提供: うごくみそ汁
もっと見る

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

Docker

まだ掲示板に書き込みがありません…以下のようなことを書き込んでもらえると嬉しいでーす!

  • 記事を編集した人の応援(応援されると喜びます)
  • 記事に追加して欲しい動画・商品・記述についての情報提供(具体的だと嬉しいです)
  • Dockerについての雑談(ダラダラとゆるい感じで)

書き込みを行うには、ニコニコのアカウントが必要です!


スマホで作られた新規記事

こちらの記事に加筆・修正してみませんか?

画面遷移確認のための記事 健康優良児 あらそう