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 より
コンテナ(Docker)と仮想マシンを比較すると、以下のようになります。コンテナ(Docker)は、早い、リソース消費が少ない、OSはLinuxのみ、という特徴があります。
コンテナ(Docker) | ||
起動 | 早い | 遅い |
リソース消費 | 少ない | 多い |
OS | Linuxのみ | 何でも可 |
Dockerの人気
Google TrendsではDockerキーワードの人気度は以下のように増えてきています。
(Google Trendsより)
また、以下のように、DevOpsでの利用が昨年の倍に増えているという統計もあります。
( 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 件のコメント:
コメントを投稿