0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker 概要

Posted at

Docker とは

隔離した環境でアプリケーションを実行できる コンテナ(コンテナ型仮想環境)
このコンテナを管理するソフトウェアが Docker です。
つまり、Docker とは、コンテナを使ってミドルウェアやソースコード、ライブラリなどをひとまとめにすること。

本記事では、Docker の構成や仕組み、利点、ユースケースを説明します。
pro.png

Docker を構成する要素

1. コンテナとイメージ、 Docker Hub

  • コンテナ
    隔離した環境でプログラム一式を実行できる仕組み(一種の仮想環境)です。
    コンテナの中には、システムの実行に必要なミドルウェアやソースコード、ライブラリなどが入っています。
    コンテナを起動することで、セットアップしたシステムの機能を実行することができます。
    コンテナは、イメージ を元に作成されます。
    pro.png

  • イメージ
    コンテナ作成の雛形であり、コンテナを作成するための設計図のようなものです。
    イメージは、ミドルウェアやライブラリ、設定ファイルなどのアプリケーション実行に必要なもの一式をまとめたものになります。
    イメージからコンテナを作成することで、何度でも同じコンテナを作成することができます。
    開発したアプリケーションをイメージとして保存して、別のサーバーに持っていくことで同じ環境(コンテナ)を別のサーバー上でも再現することができます。
    名称未設定.png

  • Docker Hub
    Docker 社が管理するレジストリです。
    Docker Hub では、イメージが公開されていて、ダウンロードすることで様々なコンテナを起動することができます。
    以下の図のように、作成したイメージを Docker Hub へ「プッシュ」することで、リポジトリにイメージを保存できます。
    イメージはリポジトリ単位で管理し、タグ付けによってバージョン管理します。
    また、リポジトリへプッシュしたイメージは、「プル」することでコンテナを取得し、そこからコンテナを起動することができます。
    ※ リポジトリの登録には、アカウント作成が必要になります。
    aaa.png

2. Docker Engine

Docker Engine は、Docker の核となるソフトウェアです。
Docker Engine をインストールすることで、Dockerのイメージやコンテナの操作ができるようになります。
また、Docker Engine が入ったDocker実行環境のことを「Dockerホスト」と呼びます。

公式ドキュメント によると、Docker Engine は、3つの要素から構成されます。

要素 説明
Docker CLI Docker を操作するための「Dockerコマンド」を実行するコマンドラインツール。
REST API イメージやコンテナを操作するインターフェース。CLIによって呼び出され、Docker デーモンに実行内容を指示する。
サーバ(Docker デーモン) デーモンプロセスであり、APIが呼び出されるのを待っている。
APIの呼び出しに応じて、コンテナの作成や起動を実行する。

docker_engine.png

上記のように、Dockerコマンドを使ってイメージやコンテナを操作します。

Docker の仕組みと特徴

Dockerとコンテナは、以下のような構成になっています。
名称未設定.png

最下層にハードウェアがあり、その上にOSがあります。
通常のサーバー構成であれば、OSの上にミドルウェアやアプリケーションを乗せますが、
Dockerを使用する場合は、OSの上にDocker Engineを乗せて、その上でコンテナを動かします。
ミドルウェアやアプリケーションは、コンテナの中に入れることになり、各コンテナは、独立した実行環境となっています。

また、以下の図のように、
コンテナには「Linux OSのカーネル以外の周辺部分」が入っており、すべてのコンテナでホストOSのカーネルを共有します。
各コンテナ内にOSの全機能を乗せる必要がないため、従来の仮想化に比べて、メモリやストレージの使用量が少なくなります。
また、カーネルをロードする手間が省けるため、起動時間も高速になります。
docker1.png

上記の図のように、Docker コンテナはホストのLinux OSを利用する前提の作りとなっているため、Linux OS上でしか動作しません。

Docker の利点と欠点

・ 利点

|特徴|利点|
|---|---|---|
|イメージ化できる|カスタムイメージを作っておけば、それを元にいくつでも同じコンテナを作ることができます。
つまり、複製を作る場合、同じ設定作業をする必要がなくなります。
また、他のサーバーへのコピーも容易です。|
|独立した環境|コンテナは隔離した実行環境のため、他のシステムに影響を与えることなく同居が可能です。
そのため1台のサーバーに、複数システムを構成できます。|
|軽量|ホストOSのカーネルを共有するので、コンテナにカーネルが必要ありません。
そのため、コンテナ自体が使用するメモリやストレージの使用量が少なくなります。|

・ 欠点

|特徴|欠点|
|---|---|---|
|Linux上でしか動作しない|ホストOSのlinuxカーネルを使うことが前提の仕組みのため、Linux以外の環境で動かすことができません。|

ユースケース

上記の利点を踏まえると、以下のようなユースケースが考えられます。

1. 同一の開発環境を複数用意する
Docker を使えば、開発メンバー全員に同じ開発環境を提供するのに便利です。
雛形となるイメージを1個作ってしまえば、それを全員に配布するだけで済み、各メンバーが開発環境を構築する手間も省けます。
開発プロジェクトごとにコンテナを作り環境を分ける、といった用途もあります。
aaa.png

2. 新しい技術の実験の場として使う
コンテナは隔離された環境で、起動・削除が簡単に行えるため、自分の環境を汚さずに新しい技術を試すことができます。
ライブラリやフレームワークのバージョンアップ時の動作確認といった用途にも使えます。

3. 本番環境へ移行時の事故防止
アプリケーションの開発で、テスト環境サーバで動作確認を実施後、本番環境サーバで動作させる場合、
テスト環境サーバの実行環境(ライブラリやフレームワークなど)と同じ環境を本番サーバにも用意する必要がありますが、
ライブラリやフレームワークの依存関係を間違えてしまうと、環境の違で本番サーバでは動作しないということが起こりえます。
テスト環境サーバで確認した内容をイメージにしておけば、本番サーバではそれを展開するだけで済むため、このような事故を防止できます。
aaa-2.png

まとめ

|項目|内容|
|---|---|---|
|構成要素|・コンテナ: 隔離した環境でプログラム一式を実行できる仮想環境。
・イメージ: コンテナを作成するための設計図のようなもの。
・Docker Hub: Docker 社が管理するレジストリ。イメージの管理・取得ができる。
・Docker Engine: イメージやコンテナの操作をするコアとなる要素。
|
|仕組み・特徴|・ホストOSの上にDocker Engineを乗せて、その上でコンテナが動作する。
・ホストOSのカーネルを使う。
・Linux OS上でのみ動作する。|
|利点・欠点|・利点:イメージ化して複製できる。隔離環境。動作が軽量。
・欠点: Linux上でしか動作しない。
|
|ユースケース|・同一の環境を複数用意する。
・新しい技術を試す。
・本番環境での事故防止。|

次は

概要を学んだところで、Docker を実際に操作してみます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?