Dockerという言葉をきいたことがある人も多いのではないでしょうか?Dockerとは、従来の仮想化に代わって、現在多くの開発環境で用いられている技術です。扱いやすく利便性も高いため、今後はさらに利用される技術です。また、昨今では、AWSやAzureなどのクラウドサービスでもDockerを簡単に利用できるサービスが増えており、Dockerがますます利用しやすくなっています。
本記事では、Dockerとはどんなもので何ができるかをはじめてDockerを学ぶ方向けになるべくわかりやすく解説します。
Dockerとは?
Docker とは、 Docker 社によって開発されたコンテナ型の仮想環境でアプリケーションを作成・配布・実行するためのプラットフォームです。サーバの起動方法がシンプルで起動や処理も速いという特徴があります。
従来では、企業がシステム構築をする際、1台のサーバを設置し、その上に1つのシステムを作る「オンプレミス型」が主流でしたが、ベンダーが保有するサーバを借りて構築する「パブリッククラウド」や1台のサーバ上に複数のシステムを構築する「プライベートクラウド」が登場するなど、クラウド化が進みました。そして、昨今では、次のインフラの選択肢として「Docker」という新たな仕組みに注目が集まっています。
「コンテナ型」の「仮想化」プラットフォーム
「コンテナ型」の「仮想化」プラットフォーム、Dockerの登場によって、従来の作業や管理方法が激変し、開発などで発生するさまざまな作業の自動化が可能になりました。
この説明ではわかりにくいと思うので、掘り下げていきましょう。
まず、「コンテナ型」というのは貨物輸送に用いるコンテナに由来しています。
貨物輸送の「コンテナ」はさまざまな業者が物を運ぶにあたって扱いやすいよう、箱の大きさが決まっているように、規格が明確に定められていますよね。
Dockerにおける「コンテナ」にも同じような意味合いがあり、アプリケーションやサーバを「コンテナ」という規格が定まった容器に収納することで、扱いやすくしています。
Dockerの仕組みを理解するには、「仮想化」という概念が重要になってきます。
10年ほど前は、1台のサーバに1つのOSをインストールして利用するのが一般的でした。
対して「仮想化」は、1台のサーバに仮想化ソフトをインストールすることで複数のサーバとして利用することができます。
しかし、「仮想化」といってもPCのハードウェア全体を仮想化することで、OSやアプリケーションなどを動作させる「完全仮想化」の仮想マシンと違い、「コンテナ型」はコンテナがホストOSのカーネルを利用することからメモリやディスクの使用量が少なく、軽量で高速な動作が可能です。
詳しくは次項で説明していきます。
ほかの仮想化技術との違い・関係性は?
※コンピュータの中にある別のコンピュータを動かす際に、元のコンピュータのOSをホストOS、コンピュータの中で動いているコンピュータのOSをゲストOSと呼ぶ。
仮想環境は目的によって使い分けるのが一般的です。
どれもハードウェアを仮想化することで、複数のサーバを構築できるという仕組みは変わりません。
では、コンテナ型の仮想環境はホスト型やハイパーバイザー型の仮想技術とどう違うのでしょうか。
それぞれ見ていきましょう。
ホスト型
ホスト型はOS上に仮想化ソフトウェアをインストールし、そのうえで仮想マシンを稼働させる方式で、代表的なものにVMware Playerがあります。ホスト型では既存のハードウェアにインストールしてしまえばすぐに利用できるという手軽さがありますが、ハードウェアへアクセスする際、ホストOSを経由せねばならず、負荷がかかり、処理時間が長くなってしまいます。カスタマイズ性に優れているので、軽い実験など、個人で動かす分にはホスト型が向いているでしょう。
ハイパーバイザー型(ベアメタル型)
ハイパーバイザー型は、サーバに直接インストールすることで仮想マシンを稼働させる方式で、代表的なものにHyper-Vなどがあります。ホストOSが必要なく、ハードウェアを直接制御できるため仮想マシンをスムーズに作動させられます。また、ハイパーバイザーには複数の仮想マシンを効率よく稼働させるためのさまざまな仕組みが搭載されています。ただ、ホストOSがない分、高度なスキルが必要です。リソース効率が高いので、業務用など、規模が大きい場合に用いることが多いです。
コンテナ型
コンテナ型は、OS上に「コンテナエンジン」という仮想化ツールをインストールし、コンテナイメージを作成することでコンテナを仮想化する方式です。ゲストOSを必要としない分、少ないリソースで済み、コストパフォーマンスにも優れていますが、仮想技術としては後発ということもあり、構築できるベンダーや管理ツールが少ないという現状はあります。
ホスト型やハイパーバイザー型といった仮想化環境とコンテナ型の仮想化環境の最大の違いはゲストOSの有無です。
前者で仮想サーバを作った場合、それぞれのゲストOSを独立したサーバとして起動させるので、アプリの構築・運用における自由度が高くなりますが、毎回OSを起動しなければいけないので物理環境よりも性能が劣る可能性があります。
一方、コンテナ型でコンテナを作った場合、各コンテナが1つのOSを共有しているため、OSに関して不自由ではありますが、メモリやディスクといったリソースやユーザやプロセスなどをサーバごとに隔離できるため、高速起動・実行できます。
Dockerを使うメリット
システム導入までの手間が省ける
OSは既に共有して利用しているので、設定を省くことができ、システム構築に必要な最低限のプログラムのみのインストールですぐに使い始めることができます。
起動時間の短縮と処理速度の向上
OSが既に立ち上がっている分、サーバーの起動時間を短縮できます。また、最小限のリソースの使用量で済むため、サーバーへの負荷が低く、1度に多くのプログラムを処理できます。
コンテナ設定の再利用が可能
Dockerで一度作成したコンテナは、他のコンテナに適用させることで再利用が可能です。
リソースを拡大したい時や検証したい時などに、すぐに同じ環境設定のコンテナを準備することができます。
多種多様な開発・検証環境が必要になってきた現在の製品やサービスの開発では、既存のものにおいても保守・改善に関して開発環境が必要です。
より一層進んでいく、グローバル化によって海外を含めた開発環境の共通化はとても重要な課題となってきてきました。
OS内に独立した仮想環境(軽量なコンテナ)を複数生成することができるDockerによって、OS内に多くの実行環境を構築でき、多種多様の開発環境や検証環境の変更にも柔軟に対応できます。また、独立環境のコンテナを生成することでファイルやバージョン、設定やポートの競合回避もでき開発環境の共通化を推進できます。
分担作業に最適
Dockerは、Dockerfileを利用することで簡単に同じ開発環境を構築できます。複数人で分担して作業を行う場合や開発途中で新しくメンバーを増やす場合などにすぐに共有できて便利なので多くの開発現場で利用されています。
Dockerの使い方や基本コマンド
ここからは、Docker の操作の具体的なコマンドを通して使い方を紹介します。
「docker ~」という並び順でシンプルなコマンドが多いのでイメージをつかみやすいでしょう。
インストール
ご利用のOSに合わせて公式サイトからインストーラーを入手します。
Windowsの場合:「Get Docker Desktop for Windows」
Macの場合:「Get Docker Desktop for Mac」
動作確認
Macの場合はターミナル、Windowsの場合はコマンドラインを開きコマンドを実行していきましょう。
バージョンの確認
docker version//インストールされたDockerのバージョンを確認する
現在インストールされているDocker Engineのバージョン情報などが表示されます。
動作しているコンテナの確認
docker ps//動作しているコンテナを確認する
動作しているコンテナが一覧表示されます。
インストール直後は動作しているコンテナが存在せず、何も表示されない場合があります。
現在取得済みのイメージの一覧表示
docker ps -a//取得済みのイメージを一覧表示する
docker images//ダウンロードしたDockerイメージを一覧表示する
現在取得しているイメージを一覧表示させ、このイメージを元にコンテナを作成できます。
Dockerの実行
docker run hello-world//Dockerを実行する
「Hello from Docker!」と表示されれば成功で、Dockerコンテナの動作は完了したことになります。
基本コマンド一覧
イメージに関するコマンド
docker search [OPTIONS]
#イメージ名//キーワードからオンライン上のDockerイメージを探す
docker pull [OPTIONS]
#イメージ名:[TAG]//イメージをダウンロードする
docker images [OPTIONS]
#// ダウンロードしたDockerイメージを一覧表示する
docker inspect [OPTIONS]
#イメージID//イメージを確認する
docker rmi [OPTIONS]
#イメージID//イメージを削除する
docker history [OPTIONS]
#イメージID//ヒストリーを確認する
コンテナに関するコマンド
docker run [OPTIONS]
#イメージ名[:TAG] [ARG]//コンテナを起動する
docker run [OPTIONS]
#イメージ名[:TAG] [ARG]//リソースを指定する
docker ps [OPTIONS]
#// 稼働コンテナを一覧表示
docker stop [OPTIONS]
#コンテナID//コンテナを停止する
docker kill [OPTIONS]
#コンテナID //コンテナを終了する
docker rm [OPTIONS]
#コンテナID//コンテナを削除する
docker restart [OPTIONS]
#コンテナID//コンテナを再起動する
その他
docker info
#//システム情報を表示する
docker help
#//ヘルプを表示する
オプション
-d #:バックグラウンドで実行
–name #コンテナ名:コンテナに名前をつける
-v #:ホストとコンテナ間でディレクトリやファイルを共有する
–rm #: コンテナ終了時にコンテナを削除するため、コマンドを試したい時にオススメ
-a #:停止中のコンテナまで含めて表示する
–filter “status=exited” #:停止中のコンテナのみ表示するオプション。
-i #: コンテナの標準入力を開くことができ、コマンドが打てる
-t #: ttyを利用する
#上記2つを合わせて、-itとすることが多い
最後に
今回は Docker の入門編ということで具体的なコマンドを交えて使い方を紹介しました。
Docker は扱いやすく、今後もどんどん利用されていくと考えられます。
難しいと考えられがちですが、シンプルなアーキテクチャですので、慣れてしまえば便利さがわかるでしょう。
Docker を運用するまでいかなくとも、常用する基本コマンドなどの知識を持っておくとよいでしょう。
Dokcer に触ったことのない方向けの記事も公開しておりますので、よろしければこちらもご覧ください。
Docker-Composeとは【入門】メリット・利用例・環境構築まで