Dockerの特徴
    Dockerは、Linux上のシンプルで軽量な仮想環境(コンテナ)で以下の特徴があります。
  早い・軽い
    OSレベルの仮想化なので、起動は一瞬です。コンテナ間でイメージを共有できるので、コンテナの起動自体ではディスクは消費しません。
  Dockerイメージ、Docker   Hub
    コンテナで利用するファイル・設定はDockerイメージとして、保存・再利用できます。   Docker Hubでは、多くのイメージ(30万以上)が公開されています。
  設定の明示、ビルド自動化
    Dockerfile等の設定ファイルを利用し、設定をコードとして明示的に記述することで、ミスを防ぎ変更を容易にします。
  アプリケーション指向
    アプリケーションのビルド・実行・デプロイを簡単・便利に行う、ことを主な目的としています。
  柔軟・自由
    個々のツールは独立しており、様々な用途で利用することができます。最近では、コンポーネント化を更に進めています。(runC,   swarmkitなど)
  充実したエコシステム
    アーキテクチャがしっかりしており、API・ドキュメントが整備されていることから、周辺ツールなどのエコシステムが充実しています。
  充実した純正ツール
    クラスタ(Docker   Swarm)・クラウド(Docker   Cloud)・レジストリ(Docker   Hub)・インストーラ(Docker   Toolbox, Docker for Mac)・GUIツール(Kitematic)などの純正ツールが充実していることから、互換性などにわずらわされず利用できます。
  コンテナと仮想マシンの違い
    コンテナはOSレベルの仮想化を行いその上でプロセスを動かしますが、仮想マシンはマシンレベルの仮想化を行いその上でゲストOSを動かします。
『Docker実戦活用ガイド 』p.7  より
』p.7  より
  コンテナ(Docker)と仮想マシンを比較すると、以下のようになります。コンテナ(Docker)は、早い、リソース消費が少ない、OSはLinuxのみ、という特徴があります。
| コンテナ(Docker) | ||
| 起動 | 早い | 遅い | 
| リソース消費 | 少ない | 多い | 
| OS | Linuxのみ | 何でも可 | 
  Dockerの人気
    Google TrendsではDockerキーワードの人気度は以下のように増えてきています。
   (Google Trendsより)
(Google Trendsより)
  また、以下のように、DevOpsでの利用が昨年の倍に増えているという統計もあります。
   ( New   DevOps Trends: 2016 State of the Cloud Survey より)
( New   DevOps Trends: 2016 State of the Cloud Survey より)
  Google・Amazon(AWS)なども、コンテナを利用したサービスも出しています。
  ·          Google GKE(Google Container   Engine), Google GCR(Google Container   Registry)
  ·          Amazon ECS(EC2 Container Service)、Amazon ECR(EC2   Container Registry)
  Dockerのインストール
    Dockerのインストールは、以下のツールを使います。
  ·          Mac
  Docker Toolbox
  Docker for Mac
  Dockerの構成(5つの要素)
    Dockerでは、大きく5つの重要な要素があり、図のような関連があります。
  コンテナ
    Dockerイメージから作られ、実行される仮想環境です。
  Dockerイメージ
    コンテナのファイルシステム、設定をひとまとめに保存しています。
  Dockerサーバ
    Docker本体ともいえる、コンテナ・イメージの管理を行うサービスです。
  Dockerクライアント
    ユーザが実際にDockerを操作すル時に使うコマンド、GUIツールです。Dockerを利用する周辺ツールも含まれます。
  Docker Hub(レジストリ)
    Dockerイメージを集めたサイトです。OS、アプリケーションのイメージが多く公開されており、誰でも自由に利用できます。
  Dockerの基本コマンド
    Dockerを動かすのに必要な重要コマンドを紹介します。Docker   Toolboxでインストールした場合は「Docker Quickstart Terminal」を起動してコマンドを入力します。Docker   for Macでは、「ターミナル」アプリケーションで、直接コマンドを入力できます。
  実行(docker run)
    指定したDockerイメージを実行します。
  例: Hello Worldの実行
  例: Ubuntuの実行
  例: Nginxの実行(8080番で実行)
  コンテナの一覧(docker ps)
    実行中のコンテナ一覧を表示します。(-aで停止しているコンテナも表示します)
  終了(docker kill)
    指定したDockerイメージを終了します。(削除はされません)
  削除(docker rm)
    コンテナを削除します。
  Dockerコマンド一覧
    Dockerコマンドは数多くありますが、概要をまとめてみます。詳しくはヘルプやDockerサイトを参照してください。
  コンテナ操作
    ·          attach コンテナにアタッチ
  ·          cp コンテナ・ホスト間でのファイルコピー
  ·          create コンテナ作成
  ·          exec 既存コンテナでコマンド実行
  ·          export コンテナをtarファイルで保存
  ·          history コンテナの履歴を表示
  ·          import tarファイルからコンテナ作成
  ·          inspect コンテナ・イメージの情報表示
  ·          kill コンテナの終了
  ·          logs コンテナのログ(出力)取得
  ·          pause コンテナの一時停止
  ·          port 公開ポートの表示
  ·          ps コンテナ一覧表示
  ·          rename コンテナ名の変更
  ·          restart コンテナの再起動
  ·          rm コンテナの削除
  ·          run コンテナの実行
  ·          start コンテナの実行
  ·          stats コンテナのリソース利用状況表示
  ·          stop コンテナの停止
  ·          top コンテナの実行状況表示
  ·          unpause コンテナの再開
  ·          update コンテナの設定を動的に変更
  ·          wait コンテナの終了を待つ
  イメージ操作
    ·          build イメージのビルド
  ·          commit コンテナからイメージ作成
  ·          images イメージ一覧表示
  ·          inspect コンテナ・イメージの情報表示
  ·          load tarファイルからイメージ作成
  ·          rmi イメージの削除
  ·          save イメージをtar保存
  ·          tag イメージにタグ名を設定
  Docker Hub(レジストリ)
    ·          login Docker   Hub(レジストリ)にログイン
  ·          logout Docker   Hub(レジストリ)からログアウト
  ·          pull Docker   Hub(レジストリ)からコンテナ取得
  ·          push Docker   Hub(レジストリ)にコンテナ保存
  ネットワーク
    ·          network connect コンテナをネットワークに接続
  ·          network create ネットワーク作成
  ·          network disconnect コンテナのネットワークからの切断
  ·          network inspect ネットワークの状態表示
  ·          network ls ネットワーク一覧
  ·          network rm ネットワークの削除
  ボリューム操作
    ·          volume create ボリュームの作成
  ·          volume inspect ボリュームの内容表示
  ·          volume ls ボリュームの一覧表示
  ·          volume rm ボリュームの削除
  Swarmクラスタ
    ·          node accept Swarmノードをクラスタに追加
  ·          node demote Swarmノードをマネージャからワーカーに降格
  ·          node inspect Swarmノードの状態表示
  ·          node ls Swarmノードの一覧表示
  ·          node promote Swarmノードをワーカからマネージャに昇格
  ·          service create Swarmクラスタ上にサービス作成
  ·          service inspect Swarmクラスタ上にサービス状態表示
  ·          service ls Swarmクラスタ上のサービ一覧表示
  ·          service rm Swarmクラスタ上のサービス削除
  ·          service scale Swarmクラスタ上のサービスのコンテナ数(task)変更
  ·          service task Swarmクラスタ上のサービスのコンテナ(task)一覧表示
  ·          service update Swarmクラスタ上のサービスの設定変更
  ·          swarm init Swarmクラスタの作成
  ·          swarm join Swarmクラスタへのノード追加
  ·          swarm leave Swarmクラスタからのノード削除
  ·          swarm update Swarmクラスタの設定変更
  プラグイン
    ·          plugin disable プラグインの無効化
  ·          plugin enable プラグインの有効化
  ·          plugin inspect プラグインの状態表示
  ·          plugin install プラグインのインストール
  その他
    ·          daemon サーバ起動
  ·          events イベントの監視
  ·          info Dockerの情報表示
  ·          version バージョン表示
  Dockerfile
    Dockerイメージの構築方法をコードとして記述するファイルです。  元となるイメージや、実行するコマンドを記述します。
  Dockerfileの例(nginx):
#  # VERSION               0.0.1    FROM      ubuntu  MAINTAINER Victor Vieux <victor@docker.com>    LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"  RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server    Dockerイメージの構築コマンド例:
  Dockerの仕組み
    Dockerでは、コンテナを実現するために以下のLinuxの機能を利用します。
  chroot
    コンテナごとにファイルシステム空間を分けます
  スタッカブルファイルシステム
    ファイルシステムの階層を利用することで、ディスクを効率良く利用します。
  ネームスペース
    コンテナごとに名前空間を分けます。 名前空間には、プロセス・ネットワーク・IPC・マウント・ホスト名・ユーザがあります。
  cgroups
    CPU、メモリ、ディスク入出力等のリソース管理を行います。
  Dockerの純正ツール
    Dockerは、以下のような純正ツール・サービスを提供しています。
  Docker Engine
    Docker本体ともいえる、コンテナ・イメージの管理・実行を行うツールです。
  Docker Hub(レジストリ)
    Dockerイメージを集めたサイトです。OS、アプリケーションのイメージが多く公開されており、誰でも自由に利用できます。
  Docker Toolbox
    Mac, Windows上でDockerを利用するためのインストーラです。VirtualBoxの仮想マシンの上でLinux、Dockerサーバを動作させます。
  Docker for Mac
    Mac上でDockerを利用するためのインストーラです。VirtualBox不要でMacと密に統合されており、Docker   Toolboxより、遥かに便利に利用できます。 VirtualBoxと同時に利用できます。ベータ版ですが十分利用できます。
  Docker for Windows
    Windows上でDockerを利用するインストーラです。VirtualBox不要でWindowsと密に統合されています。VirtualBoxと同時には利用できません。ベータ版で、現時点ではあまりお勧めできません。
  Kitematic
    GUI操作でDockerが利用できるツール(クライアント)です。
  Docker Machine, Docker Swarm, Docker Compose
    クラスタ環境にアプリケーションを展開するためのツールです。Docker   MachineはDockerホストを構築し、Docker   Swarmがクラスタを管理し、Docker   Composeがアプリケーションの展開を行います。
  Docker Cloud
    ウェブ上で、Dockerホストの管理や、アプリケーションのデプロイが行えるツールです。
  考え方
    Dockerに関連して、ソフトウェア・インフラのあり方に影響を与える考え方が出てきています。
  Immutable Infrastructure
    従来、サーバは常時動作しており、設定やアプリケーションは適時変更していました。手動で設定するとミスが発生しますし、構成管理ツール(Puppet, Chef, Ansible等)を使っても完全にすべてのサーバを同じ状態に保つことは難しいです。Immutable   Infrastructureでは、サーバ起動後、設定を変更したりアプリケーションをインストールせず、必要に応じてコンテナを作り直します。  これにより、適用忘れやサーバごとに状態が変わることを確実に避けます。
  マイクロサービス(Micro Service)
    軽量で起動が早いというコンテナの特徴を生かすことで、アプリケーション・プロセスなど小さい単位でコンテナを分離します。これにより、依存関係が減り、開発やアップデートが容易になります。
  Infrastructure as Code
    マシンの状態をコードで記述するという考え方です。コードで記述し自動化することで、ミスを減らし変更・管理が容易になります。
  DevOps
    従来、物理マシンの管理(インフラ)、ソフトウェアの開発は役割が分離されていました。しかし、マシンの仮想化が進み、インフラの状態をコードとして記述できることから、ソフトウェア開発とマシンの管理を密に統合し、効率よく開発するという考えが生まれています。
  Windowsコンテナ
    現時点では、DockerはLinux上のコンテナと言っていいです。Windows上で動かす場合も、Windows上の仮想マシン上のLinux上でDockerが動いています。しかし、今後状況が変わる可能性があります。Windows Server   2016では、WindowsコンテナがDockerプロトコルをサポートする予定です。これにより、WindowsがDocker上で動くようにになります。


 
0 件のコメント:
コメントを投稿