【Docker第5回】Dockerの概要

【Docker第5回】Dockerの概要

Dockerに入門しました。複数回に分けて備忘録として記載していきます。本記事ではDockerの概要を記載していきます。

【参考記事】


【関連記事】


Dockerとは

  • コンテナ型の仮想化技術の一種
  • コンテナにはゲストOSがないため、VMよりとても軽量
  • コードとライブラリーやパッケージをパッキングすること

Dockerが注目される、普及している理由

  • 2013年以降、普及は右肩上がり
  • DevOpsのサイクルにはまっている
  • ユーザーに早く正確にコードを届けることができる

従来

開発  開発エンジニア
↓
テスト インフラエンジニア
↓
本番 インフラエンジニア

環境、チームが異なり、
開発環境では動いていた→本番環境では動かない ということが起こった

運用面

従来は、ファイルやフォルダーをジェンキンスなどのCICDパイプラインを使って、本番環境にコピーしていた。


Dockerが解決する問題

  • 開発チーム
    コードとライブラリをパッケージングしてdocker-imageを作成(コンテナ化)
  • 運営チーム
    docker-imageをもらって本番環境を構築
  • 上記によりライブラリーや依存性の問題を防げる

Dockerを使用することで以下を実現

  • 開発環境と運営環境を同一にする(コードと依存性をコンテナ化)
  • 環境の違いによる不動作を防ぐことができる

運用面での変化

  • コードとライブラリーをパッケージングしてdocker-imageを作成
  • 本番環境のサーバーにドッカーイメージをダウンロード
  • それを実行するだけでOK
  • デプロイ先がコンテナ(コード+パッケージ)になる
  • OS問わず同一の動作をする

仮想マシンによる仮想化とコンテナによる仮想化の違い

仮想マシンによる仮想化

┌─────────────┐ ┌─────────────┐
│    APP 1    │ │    APP 2    │
└─────────────┘ └─────────────┘
┌─────────────┐ ┌─────────────┐
│   Module 1  │ │  Module 2   │
└─────────────┘ └─────────────┘
┌─────────────┐ ┌─────────────┐
│  Guest OS 1 │ │ Guest OS 2  │
└─────────────┘ └─────────────┘
┌─────────────────────────────┐
│        VM SoftWare          │
└─────────────────────────────┘
┌─────────────────────────────┐
│          Host OS            │
└─────────────────────────────┘

仮想マシンによる仮想化特徴

  • Guest OSがある
  • CPUやメモリなどのリソース消費が多い
  • 起動にかかる時間が長い

コンテナによる仮想化

┌─────────────┐ ┌─────────────┐
│    APP 1    │ │    APP 2    │
└─────────────┘ └─────────────┘
┌─────────────┐ ┌─────────────┐
│   Module 1  │ │  Module 2   │
└─────────────┘ └─────────────┘
┌─────────────────────────────┐
│        VM SoftWare          │
└─────────────────────────────┘
┌─────────────────────────────┐
│          Host OS            │
└─────────────────────────────┘

コンテナ型の仮想化の特徴

  • ホストOS上にコンテナという環境を作る
  • まるで別々のOS化のような環境を隔離する
  • CPUのメモリなどのリソース消費量が少なく、起動時間も高速

OS仮想化と比べたDockerのメリット

  • リソースが軽い
  • ストレージの使用量が減る
  • 起動時間が早い
  • 複数環境で使用可能

リソースが軽い

  • OSを複数使わないぶん、オーバーヘッド(複数のOSイメージとカーネル)が減る
  • プロセッサやメモリの消費が少なくなる

ストレージの使用量が減る

  • OSイメージの通常サイズが5-10GB docker-imageのサイズは1-2GBになる

起動時間が早い

  • カーネルのロード時間がなくなるので、仮想マシンに比べて起動時間が早くなる

複数環境で使用可能

  • Dockerがインストールされている環境ならホストOSに依存せずにアプリが起動する

Dockerのクライアントとサーバーアーキテクチャについて

Client

ls
docker build
docker pull
docker run

Server(Docker Daemon)

ls
Daemon process
Agent

Dockerが使われる理由

  • 開発環境、本番環境とも非常によく使われている
  • 環境構築で大きなメリットがあるため使われている

Dockerがない場合の環境構築

  • 手順書を元に手作業で環境構築する方法
  • ちょっとした手順のミスや環境の微妙な違いでエラーになることが少なくない

環境構築の再現性を高める2つの方法

IaC(Infrastructure as Code)

  • 環境構築の内容をコード化する
  • ツール例 Asible, Chef

デメリット

  • 実行時にエラーになる場合がある
  • サーバ起動時に実行すると時間がかかる

構築した環境をイメージ化して運搬

  • 動く環境をイメージ化して運搬
  • ツール例 Amazon AMI

デメリット

  • VMイメージは作成にかかる時間が長い
  • サイズが大きく、転送にかかる時間が長い

イメージとコンテナの違い

  • 例1 ClassとObject
  • 例2 車の設計図 実際の車
  • つまり、テンプレートと実物の違い

Dockerのメリット

  • VMより軽量な環境をイメージ化して運搬可能
  • Infrastracture as Codeの機能もある

Dockerの開発環境での使用例

# 開発用のDBの起動コマンド例
# コマンド一行でコンテナ上のDBを起動することが可能
$ docker run -d -p 3306:3306 \-e MYSQL_ROOT_PASSWORD=root \mysql:8.-.29

# 開発用のWEBアプリ起動コマンド例
# コマンド一行でコンテナ上のNginxコンテナ、Rubyコンテナ、MySQLコンテナを起動することが可能
$ docker-compose up

# その他ちょっとしたツールの起動や機械学習など、Dockerは幅広い用途で利用されている

Dockerの仕組み

VMの仮想化の概要

  • VM方式の仮想化ではホストOSの中でゲストOSを起動する
  • ゲストOS内のプロセスは、OSとしてはゲストOSで実行される

コンテナの場合

  • コンテナではプロセスは隔離される
    ゲストOSを起動することなく、ホストOSの機能でプロセスをコンテナという単位で隔離
    コンテナ内のプロセスはOSとしてはホストOSで実行される
  • コンテナではプロセスも隔離される
    Linuxのルートディレクトリ以下と同様の構成イメージを元に起動
    コンテナ内ではルートディレクトリが変更され、コンテナ内のファイルしか見えない

Dockerの構成要素

ホストOS
docker管理下
イメージ → コンテナ

「dockerコマンド」→「dockerd(dockerデーモン)」に指示してコンテナの起動やイメージの作成をする

DockerHubなどのレジストリ
イメージを保存、配布するサービス

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です