Dockerとは?使い方やメリット・デメリットを徹底解説!
Dockerとはアプリケーション作成・デプロイ・実行を簡単にするツールであり、多くの開発環境で活用されています。今回は利便性の高さから注目を集めているDockerの基本から実際の使い方、メリット・デメリット、インストール方法などを解説します。
目次
Dockerとは?
クジラのアイコンが特徴のソフトウェアDockerは、コンテナ型の仮想化サービスです。
コンテナ型の特徴・Dockerと仮想マシンの違いを簡単にご紹介します。
コンテナとは一般的な意味では『(内部に物を納めるための)容器』ですが、ここでのコンテナ型とは『ソースコードやそのすべての依存関係をパッケージ化するソフトウェア』を示します。
つまり、ユーザが作成したコンテナ(ソースコードや環境)をDockerという移送手段を用いて他のパソコンにまるごとそのまま展開することができます。
コンテナ内はDockerの管理下に存在しており、その中ではアプリケーションやライブラリ、ミドルウェアなどをそれぞれ管理します。
Dockerイメージとは?
コンテナで用いるイメージは、コンテナを定義する読み取り専用の動作環境テンプレートです。
イメージには、実行に必要な変数・コマンドやメタデータが含まれています。
先述のコンテナとの違いは、Dockerfileとして必要な構成を作成し、そこにイメージを読み込みテンプレートにしたものを用いてコンテナ実行するという流れを知ると分かりやすいのではないでしょうか。
Dockerfileとは
Dockerfileは、新規にDockerイメージを作成するための設計図(手順を記したテキストファイル)という役割を持っています。
Dockerfileというテキストファイルを作成することで、Dockerイメージを作成する事ができるのです。
どのようなコンテナにするかは、コマンドを書いて表現します。
どんなときにDockerを使うのか
リリース当初は、アプリケーション開発時に使用する用途がほとんどでした。
その理由はOSやバージョン違いの動作に素早く対応でき、デプロイの速度を上げることができるからです。
しかし最近ではDockerの実用性に高い評価があり、開発時だけではなくコンテナの環境をそのままテストや本番環境として利用されるケースが増えています。
仮想マシンとの違いは?
よく比較されるサービスとして、VMwareやVirtualBoxなどの仮想マシンが挙げられます。
大きな違いはDockerが仮想化するのは『コンテナ』で仮想マシンは『OS』を仮想化する点です。
Dockerは1つのOSに対して多数のコンテナを管理するため、マシンごとに独自のOSが搭載され多数のOSを管理する必要がある仮想マシンと比較して軽量で速いという特徴があります。
また、コンテナ作成に必要なリソースが少ないため導入が簡単ですぐに開始でき、開発の密度を高めることが可能です。そのため同じハードウェアでより多くのサービスを実行できるため、コストも削減できます。
しかし同じカーネル上で実行することの副作用として仮想マシンよりも分離度が低くなります。
実行しているOSに依存度が高いということです。
- 簡単に環境構築
- 軽量でスピーディーな開発
- ハードウェアの資源削減
- 共有化されたシステム
- イミュータブル・インフラストラクチャである
- 物理サーバの考慮を後回しにできる
- モダンなエコシステム
\ 簡単3分で適正年収が分かる! /
Dockerのメリット7選
Dockerのメリット① 簡単に環境構築
今までの開発は同じ環境を別のマシンで再現するためには多数の手順があり、操作ミスや手順の記憶違いなどのヒューマンエラーで開発を遅延する可能性がありました。
Dockerは環境がまるっと提供されるので少ない手順で同じ環境が構築できるためよりスピーディーで正確に同じ環境を再現することができます。
Dockerのメリット② 軽量でスピーディーな開発
コンテナは軽量のため、立ち上げる速度は一瞬です。
それと比較して仮想マシンはOSをいくつも立ち上げる必要があり、処理自体がかなり重いです。
コンテナはメモリやディスクの消費量を少なく抑えた状態で仮想化できます。
これにより、立ち上げるスピードも圧倒的に早くなり開発に集中できます。
Dockerのメリット③ ハードウェアの資源削減
コンテナのサイズは非常に小さく、一つの物理サーバに多数のコンテナを稼働させることができます。
その結果、物理サーバを購入するコストが削減されます。
\ IT転職のプロが無料でサポート! /
Dockerのメリット④ 共有化されたシステム
Dockerの特徴はコンテナだけでなく、共有化サービスの『Docker Hub』があります。
『Docker Hub』を通してインターネットを通じて世界中の開発者の成果物を入手したり、成果物をアップロードすることができます。
優れたプログラマが作成したイメージを効率よく、活用する仕組みが整えられています。
Dockerのメリット⑤ イミュータブル・インフラストラクチャである
Dockerを利用したアプリケーション開発では開発環境をそのまま本番環境に適応することがあります。
そのため本番用のシステムには一切手を加えず、「不変の状態である」ということから、イミュータブル(インフラストラクチャ)と呼ばれています。
開発環境と本番環境が同じのため運用コストも下がります。
Dockerのメリット⑥ 物理サーバの考慮を後回しにできる
よくあるシステム開発は、サーバをはじめとする機器の調達など、コンピュータ資源をまず初めに整えることが先決でした。
しかしDockerを活用すれば、自分たちが作りたいアプリケーションから始めることができます。システム開発者はハードウェアを気にせず、開発だけに専念できる分離された仕組みとなっています。
Dockerのメリット⑦ モダンなエコシステム
Dockerを使うとコードを早く提供でき、かつアプリケーションの環境も統一しリソース量を改善して費用を節約できます。
Dockerのシンタックスはシンプルで分かりやすいため、広く使われておりDockerと組み合わせてすぐに使えるツールや既製のアプリケーションとしての強力なエコシステムにもなります。
- 同一のOS(カーネル)を利用すること
- 提供できるホストの種類が少ない
\ IT転職のプロが無料でサポート! /
Dockerの3つのデメリット
Dockerのデメリット① 同一のOS(カーネル)を利用すること
同一のOSから複数のコンテナを作成するため、OS違いの検証は別のマシンまたは仮想マシンを使用しなければなりません。
コンテナの軽量化を図ったための弊害でもあります。
Dockerのデメリット② 提供できるホストの種類が少ない
WindowsやMacで対応されているため、大きなカバーはされていますがWindows Serverには対応していません。
Windows HomeのOSでは『Docker Toolbox』というソフトをインストール必要があります。
これはVirtual Box(仮想マシン)上にDockerを立ち上げる仕組みのソフトです。
Dockerのイメージを共有・使用することが可能ですが結局、仮想マシン上に立ち上げているのでDockerのうまみを100%引き出せているわけではありません。
Windows ProですとHyper-Vという仮想化システムが提供されるため、仮想マシンを立ち上げることなく、Dockerを使用することができます。
Dockerのデメリット③ 習得に時間がかかる
Dockerの習得方法は他の仮想環境とは異なるため、習得に時間がかかります。
Dockerファイルを作製する知識から、独自の構築をすべて理解していないと動作においてトラブルが起きることも多いのです。
そのため、導入したくてもできないといったケースもあります。
\ 自分に合う働き方が分かる! /
Dockerでできること
Dockerを使うことで、開発に必要な複数の異なるプログラミング言語を、コンテナという単位で一括管理することができます。
これがDockerのコンテナであり、まとめてしまえばOSやハードウェアを問わずに実行可能です。
なお且つコンテナは軽量で、複数の環境間で柔軟に移動できるうえに軽量なため、サーバーのリソースを効率的に利用できる点も特徴だと言えるでしょう。
このような特徴によって、以下のことが実現できます。
アプリケーションのパッケージ化と配布
例えばWebアプリケーション開発を行う場合、Python、PHP、MySQL、Linux環境などが必要です。
従来の開発手法では、それぞれの実行環境をそろえるためのサーバーを用意し、インストールして設定を行うという準備が必須でした。
しかしDockerなら1つのコンテナにまとめて、Dockerファイルに必要なOS、ミドルウェア、アプリケーションのインストール手順などを記述するだけという手軽さです。
Dockerイメージは公開も簡単で、他のユーザーはこの公開されたイメージを活用して容易に実行環境を構築できます。
リソースの効率的利用
DockerのOSレベルで仮想化できる特徴を利用すると、複数のアプリケーションを1台のサーバーで稼働させることも可能になります。
仮想化マシンとは異なり、プロセス単位で分離されたコンテナごとにリソースを割り振ることができるからです。
1つのLinuxサーバーに対し複数のコンテナが配置された場合、OSやストレージは共有され、アプリケーションごとにCPUやメモリなどのリソース割合を設定することができます。
このようにリソースを最大限活用できるため、インフラ効率の大幅な向上に寄与しています。
開発・検証・本番環境の統一
開発・検証・本番環境の違いによるエラーの発生は、開発現場において頻発する問題でした。
理由はライブラリのバージョンの違いのような仕様の確認漏れなどです。
しかし開発環境と本番環境を分離しなければアクセス制御の有効性が保証されず、情報漏洩や改ざんといったリスクが発生する可能性があるため、物理的に分離せざるを得ません。
しかしDockerなら、開発から本番まで1つのコンテナで実行可能です。
常に同じ環境を保とうとするDockerのコンテナの特性を活かし、異なる実行環境での動作の差異をなくすことができるのです。
これまでのエラーへの対処が大幅に改善されるため、開発効率を飛躍的に高めることができます。
\ IT転職のプロが無料でサポート! /
Dockerの主要コマンドとは
Dockerコンテナ
Dockerコンテナとは、アプリケーション実行の単位を指す言葉です。
主要コマンドでコンテナの生成、起動、停止、削除などの操作をすることができます。
コンテナを起動する際にIDが割り当てられるため、このIDを指定してコマンドを実行し、制御可能です。
複数のコンテナを連携させ、まとめて定義し1つのサービスとして操作する際には「docker-compose」を使用します。
Dockerイメージ
Dockerファイルを設計図としてDockerイメージをビルドします。
この際必要なのは「docker build」コマンドです。
イメージには、アプリのビルドから実行に必要な命令などが記述されます。
ビルドされたイメージにもイメージIDが付与され、レジストリへのプッシュやコンテナの生成にはこのIDを指定します。
一般的に利用されるのはDockerHubをはじめとしたコンテナレジストリです。
レジストリへの公開には「docker push」、レジストリからの取得には「docker pull」コマンドを使います。
Dockerファイル
Dockerファイルはイメージのビルド手順を記述したテキストファイルです。
「インストール対象 インストール手順」の記述形式で、OS、ミドルウェア、アプリケーションのインストールやファイルのコピー、コマンド実行などの命令文で構成されます。
Dockerファイルの設計によっては、アプリケーション実行に必要なすべての環境がパッケージ化されたDockerイメージの作成も可能です。
Dockerレジストリ
Dockerレジストリは、Dockerイメージを保存し管理できる場所です。
例えばDocker公式のDocker Hubに代表されるパブリックなレジストリと、AWSやGCPなどのプライベートなレジストリがあります。
プッシュすることでイメージを公開し、プルすることでさまざまなアプリケーション環境を利用可能です。
最新バージョンをプルして利用できれば、常にアップデートされた環境が利用できるというメリットがあります。
イメージのビルドや公開、配信はDocker活用において欠かせない流れです。
\ 簡単3分で適正年収が分かる! /
Dockerの使い方(Docker Toolbox for Windows)
ユーザが多いであろうWindows HomeのOSを対象に使い方を説明します。
今回ではnginxのサーバを導入するところまでを実施します。
- Docker Toolboxのインストール
- Select Componentsページの設定
- Select Additional Tasksページの設定
- Docker Quickstart Terminalの起動
- Dockerホストの起動確認
- サーバのIPを確認
- nginxのダウンロード
- nginxの起動確認
手順① Docker Toolboxのインストール
Dockerのオフィシャルサイトから『Docker Toolbox for Windows』のインストーラを入手します。
手順② Select Componentsページの設定
ダウンロード後にインストーラを起動するとまず『Select Components』ページが表示されるので、全てのチェックボックスにチェックを入れて次のページへ遷移します。
手順③ Select Additional Tasksページの設定
次に『Select Additional Tasks』が表示されるので、こちらも全てのチェックボックスにチェックを入れて次のページへ遷移します。
インストールが開始されます。
手順④ Docker Quickstart Terminalの起動
インストールが終了するとデスクトップ上に『Docker Quickstart Terminal』が作成されているのでこちらをダブルクリックします。
手順⑤ Dockerホストの起動確認
コマンドプロンプトのような黒い画面が出てきます。
これはDockerエンジンが動作しているDockerホストの仮想マシンに接続されている証拠です。
手順⑥ サーバのIPを確認
コマンドプロンプト上で『docker-machine ls』を打ち込みEnterを押します。
すると、『tcp://192.168.99.100:2376』のような文字列がありますので、192.168.99.100に該当する部分をメモします。(のちにIPとして使用します)
手順⑦ nginxのダウンロード
コマンドプロンプト上で『 docker run –name some-nginx -d -p 8080:80 nginx』を打ち込みEnterを押します。するとダウンロードとプロセス実行が開始されます。
手順⑧ nginxの起動確認
処理完了後、ブラウザで『http://(手順⑥のIP):8080/』(例:http://192.168.99.100:8080/)を
入力すると『Welcome to nginx!』と表示されていればコンテナ上にnginxのサーバを立ち上げることができました。
\ IT転職のプロが無料でサポート! /
最後に~Dockerが必要な人とは?~
- Dockerはコンテナ型の仮想化サービスソフトウェア
- 1つのOSに対して多数のコンテナを管理する
- OSへの依存度が高いというデメリットもある
- 軽量な環境をスピーディーに立ち上げ、本番展開もできる
Dockerはとても魅力的なサービスとご紹介させていただきました。
しかし、現実世界の話ですがDockerは海外では多数運用されている実績がありますが、日本ではまだほんの一握りのユーザしかいません。
それは企業や個人のやりたいこととできることがマッチしていないことやそもそも仮想マシンとの区別ができておらず、仮想マシンで満足するというケースは少なくありません。
しっかりと用途と目的に沿ってDockerを導入することでコストや運用が楽になるのかを検討してから動きましょう。
\ キャリアのお悩みを解決! /
Dockerを活用して効率的に開発をしよう
Dockerは世界中で注目されており、日本でも普及しつつあるサービスです。
もしもDockerの利用を検討されているのであれば、開発スピードを上げる手段の1つとして是非一度は使用してみることをお勧めします。
開発効率を高めるスキルを持った人材は市場価値が高く、Dockerのスキルが転職に有利に働くケースもあります。
IT・Web・ゲーム業界の転職に強い転職エージェントのGeekly(ギークリー)では、Dockerに関わる職種や企業の情報も保有しています。
Dockerに関連する仕事に興味がある方は、お気軽にご相談ください。
\ IT転職のプロが無料でサポート! /
あわせて読みたい関連記事
この記事を読んでいる人におすすめの記事