Docker(ドッカー)とは、非常に動作が軽量なコンテナ型のアプリケーション実行環境のことです。従来のホスト型やハイパーバイザー型は動作が遅いというデメリットがありましたが、コンテナ型は処理が軽量な仕組みになっているため、ストレスなく環境の構築や開発を進められるというメリットがあります。そのほかシステム開発の効率化を図るうえでさまざまなメリットがあることも、Dockerを導入する企業が増えている理由です。
そこで今回は、Dockerの基本情報をはじめ、従来の仮想化技術との違いや導入すべき理由、Dockerを効率的に習得するポイントなどについて紹介します。
目次
システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案
Docker(ドッカー)とは?仮想化技術との関係性は?
Dockerとは、Docker社が開発するコンテナ型のアプリケーション実行環境です。コンテナ型とは仮想化技術のことで、1つの物理マシン上に多数の独立した仮想環境を立ち上げることができます。
また、ホストマシンにLinuxカーネルを利用し、Docker Engineという独自のモジュールでコンテナ実行を制御しているのも特徴です。1台のサーバ上で複数のシステムを効率的に動かせるDockerを活用することにより、サーバのリソースやコストの節約が可能です。Dockerで構築した開発環境はほかのエンジニアと簡単に共有でき、チームでの開発作業のスムーズな進行に貢献できるというメリットもあります。
仮想化技術の主な種類にはホスト型とハイパーバイザー型、そしてDockerが採用しているコンテナ型の3つが存在します。以下で、それぞれの仮想化技術の特徴について解説します。
●ホスト型
ホスト型は、OS上に土台の仮想化ソフトウェアをインストールして、仮想マシンを稼働させる方法です。すでに動作しているコンピュータの中に仮想マシンを作るため、ハードウェアに負荷がかかり、動作が遅くなるデメリットがあります。
●ハイパーバイザー型
ハイパーバイザー型は、ホストOSが不要になるため、ハードウェアを直接制御できます。そのため、処理速度の低下を最小限に抑えることができます。一般的にホスト型と比較すると速いですが、やはり動作の遅いことがデメリットです。
●コンテナ型
コンテナ型は、OSが1つのみ存在しており、OSの中にアプリケーションを実行するための領域(ユーザー空間)が複数用意された構成になっています。OS が限られているためOSのカスタマイズ性はありませんが、複数のOSをその都度立ち上げる必要がないため、ホスト型やハイパーバイザー型と比較すると動作が速い特徴があります。
Dockerはコンテナ型の仮想環境を作成、配布、実行するプラットフォームです。素早く簡単に同じ環境の構築ができるため、開発者にとって有難い技術といえるでしょう。
Dockerと従来の仮想化技術との違い
仮想化技術では仮想環境を構築するのにホストOSが必須となりますが、従来の仮想化技術はホストOSに加えてゲストOSや仮想化ソフトウェアのインストールが必要です。ゲストOSや仮想化ソフトウェアをスムーズに動作させるためのリソースが求められるため、仮想環境を構築するのに一定以上の計算リソースを持つハードウェアも必要になります。仮想化ソフトウェアとゲストOSが常に動作しているので、オーバーヘッドが大きくなりやすいのが従来の仮想化技術の弱点でした。
一方で、Dockerの場合はホストOSのカーネルを共有して利用するため、ゲストOSや仮想化ソフトウェアをインストールする必要はありません。計算リソースが小さくて済むので、従来の仮想化技術に比べて動作が非常に軽快なのが特徴です。
例えば、ゲストOSや仮想化ソフトウェアを起動させる必要のある従来の仮想化技術だと仮想マシンの作成から起動までに数分程度かかりますが、Dockerならほんの数秒程度で起動できます。
Dockerの重要な4つの要素
Dockerを使用する前に、イメージやコンテナ、Docker Hub、Dockerfileと呼ばれる4つの要素を押さえておきましょう。
- Dockerイメージ: テンプレートファイル
- コンテナ: アプリケーションの実行環境
- Docker Hub: コンテナ、イメージの共有サービス
- Dockerfile: イメージを作成するためのテキストファイル
4つの要素を理解するとDockerの原理がわかり、操作や環境の構築が簡単に行えるようになります。
●1.Dockerイメージ: テンプレートファイル
「Dockerイメージ」とは、コンテナを立ち上げるために必要な設定がまとめられたテンプレートのことです。
アプリケーションを実行する際に必要な変数やコマンド、メタデータも含まれています。本来はソフトウェアをインストールした後に、初期設定をはじめ細かなカスタマイズをする必要がありますが、イメージを使うことで細かな設定を省略できます。
●2.コンテナ: アプリケーションの実行環境
「Dockerコンテナ」とは、Dockerイメージから生成した仮想サーバのことです。
コンテナは、CentOSやUbuntuなどのLinuxOSをはじめ、Webサーバやデータベースサーバ、アプリケーションまでさまざまな環境を作ることができます。
●3.Docker Hub: コンテナ、イメージの共有サービス
「Docker Hub」とは、ユーザーが作ったイメージをアップロードして提供や共有、管理ができるサービスのことです。
フリーのソフトウェアのイメージをはじめ、個人によって作成されたイメージも公開されており、自分が作成したイメージの提供も行えます。
Docker Hubは、Docker社が営利目的で開発・運営しているサービスですが、提供しているDockerイメージは無料で自由にダウンロードが可能です。ダウンロードする方法は、コンテナからDocker Hubにアクセスしてデプロイするだけで簡単に開発環境の構築を行えます。
●4.Dockerfile: イメージを作成するためのテキストファイル
「Dockerfile」(ドッカーファイル)とは、Dockerイメージの設計図のことをいいます。Dockerイメージを新しく作成するためのフローを記したテキストファイルで、プログラムを動作させるサーバやミドルウェア、コマンドなどの情報を記載します。
Dockerfileを作成するメリットは、一連の手順を自動化できたり自分の好きなようにカスタマイズできたりすることです。また、共有すると複数人が簡単に同じ環境を構築できるため、大勢で開発を行う際に活用しましょう。Dockerfileの作り方をはじめ、環境を構築する流れについては後述するため、ぜひご参照ください。
【メリット解説】Dockerを導入すべき理由は?
Dockerを導入すべき理由は、主に以下の7つです。
- 動作が軽くて使いやすい
- 共有しやすく分担作業に最適
- 環境構築が簡単にできる
- 馴染みのある開発環境を再現しやすい
- ハードウェアの資源を節約できる
- 移植性が高い
- 必要に応じてスケーリングしやすい
Dockerは動作が軽くて使いやすい特徴があり、ストレスなく作業を進めることが可能です。共有のしやすさや環境構築のしやすさなど導入すべき理由を詳しく解説するため、Dockerの導入を検討されている方はぜひご参照ください。
●1.動作が軽くて使いやすい
Dockerは、コンテナ型の仮想化技術の仕組みが使われています。仮想化技術にはホスト型とハイパーバイザー型、コンテナ型があり、従来のホスト型やハイパーバイザー型は動作が遅いというデメリットがありました。しかし、コンテナ型ではコンテナという構築環境を作成して、その中でミドルウェアやアプリケーションを動かします。
コンテナの中で環境を完結させているため、負荷が小さく高速な動作が実現しました。ストレスが少なく作業を進めることができるのは、開発をするうえで大きなメリットになります。
そのため、仮想化技術を利用して開発を進める場合は、コンテナ型のDockerの導入がおすすめです。
●2.共有しやすく分担作業に最適
Dockerは、Dockerfileを利用すると同じ開発環境を簡単に作ることができます。複数の開発者と分担して作業する時や、開発途中で新しい開発者を追加した時など、イメージを渡すだけで同じ環境を簡単に構築することが可能です。
そのため、Dockerは共有や分担作業がしやすい非常に便利なプラットフォームとして、多くの開発現場で使われています。
●3.環境構築が簡単にできる
Dockerイメージを共有できるDocker Hubがあるため、開発環境を簡単に構築できます。Docker HubからDockerイメージをダウンロードして利用すれば、簡単に環境を構築することが可能です。また、すでにDockerイメージで開発環境を構築している場合、Dockerイメージを共有するだけですぐに同じ環境の構築が行えます。逆に、開発環境を作り直したい場合は、コンテナを削除するだけで作り直し作業に進めます。
●4.馴染みのある開発環境を再現しやすい
これまでは別のマシンで同じ環境を再現するのに多くの手順を踏まなければならず、操作ミスや手順の記憶違いなどのヒューマンエラーによって開発が遅延する恐れがありました。また、開発環境の変更はシステム開発者にとってストレスを感じる原因となり、開発の生産性が低下してしまうおそれもあります。Dockerなら移行する前と同じ開発環境を少ない手順で再現できるため、慣れ親しんだ環境で作業を進められます。
また、OSやプログラミング言語によって最適なツールチェーンが異なるほか、開発者が使用するツールの好みに合わせて柔軟に対応できるのがDockerのメリットです。
●5.ハードウェアの資源を節約できる
OSレベルの仮想化を行うDockerでは、1台の物理サーバ上に複数のコンテナを同居させられるため、ハードウェアの資源節約につながります。従来の方法だとアプリケーションごとにサーバを割り当てており、アプリケーションの数が多くなればなるほどインフラやライセンスのコストがかかっていました。Dockerなら複数のアプリケーションを1台のサーバでできるため、インフラやライセンスコストの削減効果を見込めます。
●6.移植性が高い
開発した制作物をDockerイメージとしてエクスポートすれば、異なるOS環境でも同じ実行環境を構築できます。Dockerイメージに含まれるものにはアプリケーション実行に必要なOSをはじめ、ミドルウェアやライブラリ、アプリケーションそのものまであり、OSや物理サーバとは独立した状態で移植できます。また、オンプレミス環境にある既存システムをクラウド環境に移行しやすいのもDockerのメリットです。
通常だとオンプレミス環境からクラウド環境に移行する場合、OSやミドルウェアに差異が発生するため動作保証に手間がかかります。Dockerイメージなら新しい環境にそのまま移植できるので、クラウド環境への移行をスムーズに進められます。
●7.必要に応じてスケーリングしやすい
Dockerはコンテナ単位で管理でき、トラフィックの増加に応じて迅速にスケールアップまたはスケールダウンがしやすいというメリットがあります。Dockerで水平スケーリングを実現できる理由は、コンテナにデータを保持させない構成にしやすいためです。データを保持させない構成にすることでコンテナを増減してもデータの不一致が発生しにくくなり、停止せずにスケールアップやダウンができます。
柔軟な拡張や縮小によって訪問者数の変化への対応力を高められるほか、リソースの無駄を防ぐことにもつながります。また、コンテナ管理ツールのKubernetesやDocker Swarmなどと併せて活用すれば、より柔軟なスケーリングを実現できます。
Dockerの学習ポイント
Dockerをやみくもに勉強しようとすると、非効率的だったり、うまく理解できずに挫折してしまったりする可能性があります。Dockerを効率的に習得するには、学習ポイントを押さえておくことが大切です。Dockerの学習ポイントは主に「Docker公式ドキュメントの活用」「専門書籍の活用」「Linuxのコマンド操作に関する知識」「実際に手を動かしてDockerのコマンド操作に慣れる」の4点です。それぞれの学習ポイントについて詳しく解説します。
●Docker公式ドキュメントを活用する
Dockerの最新かつ正確な情報を得たい場合は、Dockerの公式ドキュメントを活用しましょう。初心者から上級者まで役立つ情報が掲載されており、日本語版も作成されています。基礎的な知識が学べる入門者向けのチュートリアルやコマンドの解説なども豊富なので、Dockerを学習するなら教材として活用したいソースです。
●専門書籍を活用する
Dockerは概念を理解するのが難しいため、専門書籍を利用して全体像をつかむところから始めましょう。Dockerに関する専門書籍は多数出版されており、初心者向けにかみ砕いてわかりやすく解説したものから、より実践的な内容を含む中級・上級者向けまでさまざまな種類があります。活用する専門書籍は、自分のスキルレベルや学習目標に合ったものを選ぶのがおすすめです。
例えば初心者に必要なスキルには、Dockerに関する基本的な理解をはじめ、基本的なコマンドの操作やDockerfileの基本的な書き方・理解、イメージとコンテナの違いについての理解などが挙げられます。専門書籍を選ぶ際は、これらの情報が網羅されているかを確認しましょう。
また、初心者向けと書かれていても、想定されている初心者のレベルと自身のレベルがマッチしていないこともあります。高度な知識を持っていることが前提だったり、説明に専門用語が多かったりする書籍もあるので、理解できる内容かを確認することも大切です。
実践的なスキルを習得したい場合は、具体的な手順やプロジェクト例が記載されているものだと実際に手を動かしながら学ぶのに役立ちます。そのほかにも、Docker学習者からのレビューや評価が高いか、理解を深めるための図解が十分に掲載されているか、最新の情報が網羅されているかなども注目したいポイントです。
●Linuxのコマンド操作に慣れておく
DockerはLinux上でしか動かないため、Dockerの習得にはLinuxの知識があることが大前提となります。ちなみにLinux上でしか動かないDocker をWindowやMacで使えるのは、WindowsやMacにLinuxを同居させる技術が用いられているためです。ただし、WindowsやMacに搭載されているソフトウェアでもLinux版が存在しないものは動かせません。
Linuxの基本的な仕組みやコンポーネントに関する知識があればDockerの理解を深めるのに役立ちます。まずは、Dockerで扱うことの多いLinuxのコマンド操作について押さえておきましょう。覚えておきたいLinuxの基本的なコマンドは以下のとおりです。
コマンド | 操作説明 |
---|---|
cd | 指定したディレクトリへ移動する |
ls | 対象ディレクトリの情報を表示する |
pwd | 現在アクセスしているディレクトリを表示する |
mkdir | 新しいフォルダを作成する |
touch | ファイルの新規作成またはタイムスタンプの変更 |
rm | 指定したファイルを削除する |
cp | 対象のファイルをコピーする |
これらの基本的なコマンドを覚えておくと、Dockerの一連のコンテナ操作もある程度できるようになります。
●実際にDockerのコマンドを操作する
Linuxのコマンド操作に慣れたら、いよいよ実際にDockerを触ってみましょう。ただ、Linuxの基本的なコマンドに慣れただけではDockerで好きな環境を構築するのは難しいため、公開されているイメージを活用してコンテナを立ててみるのがおすすめです。イメージやコンテナを扱う感覚に慣れたら、今度は自分でイメージを作り、ステップアップしていきましょう。
●イメージの操作やコンテナ生成に慣れておく
公開されているイメージを活用してコンテナを生成するには、Searchコマンドを使用します。Searchコマンドを使用すれば、Dockerのイメージを共有するための保管場所である公式レジストリ内のイメージの検索が可能です。公式レジストリであるDocker Hubにはさまざまなイメージが保管されており、Searchコマンドは目的に合ったイメージを検索するのに役立ちます。
Searchコマンドを使用する際のフォーマットと主なオプションは以下のとおりです。
【Searchコマンドのフォーマット】
-
docker search [オプション] [ キーワード ]
【Searchコマンドの主なオプション】
オプション | 概説 |
---|---|
--filter=[ ] | フィルターを使って結果を出力する |
--limit=n | 結果出力の最大数の指定 (デフォルトは25、最大値は100) |
--no-trunc | 結果出力の内容を省略しない |
【Searchコマンドの例】
-
$ docker search backup
-
$ docker search --no-trunc httpd
Searchコマンドを使って目的に合ったイメージが見つかったら、pullコマンド(docker container pull)でイメージを取得します。コンテナの生成・起動に使用するのはrunコマンド(Docker run)、コンテナ内で作業を行う時のコマンドはexecコマンドです。
また、必要なくなったコンテナを停止する時はstopコマンド、削除する時はrmコマンドを使用します。これらのコマンドを操作し、イメージの取得やコマンド生成を行えるようにしましょう。
Dockerを動かしてみよう
次にDockerを動かしてみましょう。
- ファイルを作成する
- イメージを作成する
- コンテナを起動する
Dockerをインストールした後の工程のため、事前にインストールを行いましょう。コンテナを起動させてWebサーバを使えるように設定する工程を紹介します。
●1.ファイルを作成する
まずはDockerfileのファイル作成を行います。Dockerfileは、イメージを作成するための設定値が書かれたテキストファイルのことで、テキストエディタやIDEを使って書きます。
●2.イメージを作成する
次にDockerfileからDockerイメージの作成を行います。「docker build」コマンドを実行しましょう。
イメージは、Docker Hubからダウンロードして利用することも可能です。既存のファイルを使用するため、イメージを作る手間を減らせます。Dockerの使い方に慣れたら試してみましょう。
●3.コンテナを起動する
最後に作成したイメージで、コンテナの起動を行ってみましょう。コンテナの起動は「docker run」コマンドを使用します。
おおまかな流れは上記のとおりです。それでは実際に以下のコマンドを実行してWebサーバを立ててみましょう。
$ docker run –name some-nginx -d -p 8080:80 nginx
「-p」のオプションは、ローカルPCのポートとコンテナのポートを結びつけています。つまり上記のコマンドで、ローカルPCの8080番ポートとコンテナの80番ポートをマッピングしたというわけです。この1行だけで、NginxのDockerイメージを取得したうえでコンテナ起動、コンテナの中でNginxを起動しました。ブラウザに「http://ご自身のIPアドレス:8080」と入力して、Webページが表示されたらコンテナの起動は成功です。
Dockerfileやイメージを作成して使用するだけで、コンテナを起動すると簡単に環境を構築できるのがDockerの魅力です。
Dockerで使用頻度が高いコマンド
Dockerでは環境を構築する時以外にもコマンドを使用しますが、その中でも特に使用頻度が高いコマンドについて紹介します。
コマンド | コマンド記述例 | 説明 |
---|---|---|
docker run | $ docker run コンテナ指定 | コンテナを起動する |
docker start/stop/restart | $ docker start コンテナ指定 $ docker stop コンテナ指定 $ docker restart コンテナ指定 |
コンテナを開始・停止・再起動する |
docker exec | $ docker exec コンテナ指定 コマンド | 起動中のコンテナ内でコマンドを実行する |
docker container ls | $ docker container ls | コンテナの一覧を表示する |
docker rm | $ docker rm コンテナ指定 | 停止中のコンテナを削除する |
docker images | $ docker images | ローカルのイメージを全て表示する |
docker rmi | $ docker rmi イメージ指定 | Dockerイメージを削除する |
docker build | $ docker build Dockerfileパス | Dockerfileからイメージを作成する |
docker logs | $ docker logs コンテナ指定 | コンテナのログを取得する |
docker search | $ docker search 検索するイメージ名 | Docker Hubに公開されているDockerイメージを検索する |
docker image pull | $ docker image pull リポジトリ名 | Docker Hubからイメージをダウンロードする |
主要なコマンドは上記のとおりです。実際にDockerを使っているうちに自然と覚えるため、最初から完璧にする必要はありませんが、効率良く作業するために、少しずつ覚えていきましょう。
まとめ
ここまで、コンテナ型のアプリケーション実行環境のDockerについて紹介しました。Dockerは非常に動きが速く開発環境の構築も簡単なため、ストレスなく開発を進めることができます。イメージを渡すだけで同じ環境を構築できるため、複数人で開発を進める時や途中で新しい開発者を追加する時など、共同作業に適した便利なプラットフォームです。
開発プロセス全体の効率化にも貢献できるため、Dockerの知識やスキルを習得しておいて損はありません。ただ、Dockerをゼロから学習して実行環境を構築するのは、学習コストがかかります。Dockerをより確実に活用したいのであれば、Dockerに関する知識・スキルを持った開発会社に発注するというのも一つの手です。
発注ナビではシステム開発会社に特化した発注先選定支援を行っており、全国5000社以上の開発会社の中からご要望や案件内容にマッチする開発会社を最短1日でご紹介いたします。知識豊富な専門スタッフが丁寧にヒアリングしたうえで最適な開発会社をご案内いたしますので、「どのような開発会社が自社に合っているのかわからない」「選定にできるだけ時間をかけたくない」とお考えのご担当者様は、発注ナビへのご相談をぜひ一度ご検討ください。
システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案
■システム開発に関連した記事