2016年11月14日月曜日

Dockerのすべてが5分でわかるまとめ!(コマンド一覧付き)

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)は、早い、リソース消費が少ない、OSLinuxのみ、という特徴があります。

コンテナ(Docker)

仮想マシン

起動

早い

遅い

リソース消費

少ない

多い

OS

Linuxのみ

何でも可

Dockerの人気

Google TrendsではDockerキーワードの人気度は以下のように増えてきています。

(Google Trendsより)

また、以下のように、DevOpsでの利用が昨年の倍に増えているという統計もあります。

( New DevOps Trends: 2016 State of the Cloud Survey より)

GoogleAmazon(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

paiza.hatenablog.com

·         Windows
Docker Toolbox

·         Linux
インストール手順

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の実行

$ docker run hello-world

: Ubuntuの実行

$ docker run -i -t ubuntu /bin/bash

: Nginxの実行(8080番で実行)

$ docker run -p 8080:80 nginx

コンテナの一覧(docker ps)

実行中のコンテナ一覧を表示します。(-aで停止しているコンテナも表示します)

$ docker ps

終了(docker kill)

指定したDockerイメージを終了します。(削除はされません)

$ docker kill [コンテナID/名前]

削除(docker rm)

コンテナを削除します。

$ docker rm [コンテナID/名前]

Dockerコマンド一覧

Dockerコマンドは数多くありますが、概要をまとめてみます。詳しくはヘルプやDockerサイトを参照してください。

コンテナ操作

·         attach コンテナにアタッチ

·         cp コンテナ・ホスト間でのファイルコピー

·         create コンテナ作成

·         diff コンテナのファイルシステム差分表示

·         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(レジストリ)にコンテナ保存

·         search 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ノードをワーカからマネージャに昇格

·         node rm 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 プラグインのインストール

·         plugin ls プラグインの一覧表示

·         plugin rm ラグインの削除

その他

·         daemon サーバ起動

·         events イベントの監視

·         info Dockerの情報表示

·         version バージョン表示

Dockerfile

Dockerイメージの構築方法をコードとして記述するファイルです。 元となるイメージや、実行するコマンドを記述します。

Dockerfileの例(nginx):

# 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 build -t mynginx .

Dockerの仕組み

Dockerでは、コンテナを実現するために以下のLinuxの機能を利用します。

chroot

コンテナごとにファイルシステム空間を分けます

スタッカブルファイルシステム

ファイルシステムの階層を利用することで、ディスクを効率良く利用します。

ネームスペース

コンテナごとに名前空間を分けます。 名前空間には、プロセス・ネットワーク・IPC・マウント・ホスト名・ユーザがあります。

cgroups

CPU、メモリ、ディスク入出力等のリソース管理を行います。

Dockerの純正ツール

Dockerは、以下のような純正ツール・サービスを提供しています。

Docker Engine

Docker本体ともいえる、コンテナ・イメージの管理・実行を行うツールです。

Docker Hub(レジストリ)

Dockerイメージを集めたサイトです。OS、アプリケーションのイメージが多く公開されており、誰でも自由に利用できます。

Docker Toolbox

Mac, Windows上でDockerを利用するためのインストーラです。VirtualBox仮想マシンの上でLinuxDockerサーバを動作させます。

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 MachineDockerホストを構築し、Docker Swarmクラスタを管理し、Docker Composeがアプリケーションの展開を行います。

Docker Cloud

ウェブ上で、Dockerホストの管理や、アプリケーションのデプロイが行えるツールです。

考え方

Dockerに関連して、ソフトウェア・インフラのあり方に影響を与える考え方が出てきています。

Immutable Infrastructure

従来、サーバは常時動作しており、設定やアプリケーションは適時変更していました。手動で設定するとミスが発生しますし、構成管理ツール(Puppet, Chef, Ansible)を使っても完全にすべてのサーバを同じ状態に保つことは難しいです。Immutable Infrastructureでは、サーバ起動後、設定を変更したりアプリケーションをインストールせず、必要に応じてコンテナを作り直します。 これにより、適用忘れやサーバごとに状態が変わることを確実に避けます。

マイクロサービス(Micro Service)

軽量で起動が早いというコンテナの特徴を生かすことで、アプリケーション・プロセスなど小さい単位でコンテナを分離します。これにより、依存関係が減り、開発やアップデートが容易になります。

Infrastructure as Code

マシンの状態をコードで記述するという考え方です。コードで記述し自動化することで、ミスを減らし変更・管理が容易になります。

DevOps

従来、物理マシンの管理(インフラ)、ソフトウェアの開発は役割が分離されていました。しかし、マシンの仮想化が進み、インフラの状態をコードとして記述できることから、ソフトウェア開発とマシンの管理を密に統合し、効率よく開発するという考えが生まれています。

Windowsコンテナ

現時点では、DockerLinux上のコンテナと言っていいです。Windows上で動かす場合も、Windows上の仮想マシン上のLinux上でDockerが動いています。しかし、今後状況が変わる可能性があります。Windows Server 2016では、WindowsコンテナがDockerプロトコルをサポートする予定です。これにより、WindowsDocker上で動くようにになります。

 

0 件のコメント:

コメントを投稿