エンジニア初心者でも分かる!Dockerコンテナの超入門!
thumb_docker_01
エンジニア初心者でも分かる!Dockerコンテナの超入門!
システム運用
アンドエンジニア編集部
2021.12.02
この記事でわかること
Dockerは、Docker社が提供するコンテナを仮想化するコンテナ型仮想環境実現ツールである。
従来型のホスト型仮想環境とコンテナ型仮想環境の大きな違いは、後者はゲストOSを不要とする点にある。
Dockerイメージとはテンプレートであり、DockerコンテナとはDockerイメージを実行してできる仮想実行環境である。

Dockerコンテナ

コンテナ

エンジニアの皆さんは、Dockerやコンテナという言葉を耳にしたことがあるでしょう。仮想化の一種であることは分かっても、なかなかイメージがつかみづらく、理解が難しく思えますが、実は意外にシンプルな概念です。 ここでは、Dockerコンテナに照準を当て、エンジニアの皆さんにぜひ知っておいてほしいことを中心に分かりやすく解説をしていきますので、ぜひ最後まで読んでみてください。

Dockerとは?使いどころやメリット・デメリットについて解説!

そもそもコンテナとは

皆さんは「コンテナ」と聞くと、何をイメージしますか?物流のコンテナをイメージする人も少なくないでしょう。確かに「コンテナ」は物流の世界ではよく利用されています。行き先ごとにコンテナに荷物をまとめ、コンテナ単位で船や列車、トラックにそのまま積み、目的地に運べます。

そのため、物流途上での積み替えや振り分けなど、無駄な作業が省け、効率的な物流を実現できます。Amazonはこのコンテナ物流を利用したことで今の地位を築いたとも言われています。

このように物流業界では「コンテナ」による物流革命が起きましたが、ITの世界でも「コンテナ」が1つの革命を起こしたのです。それが「Dockerコンテナ」です。イメージとしては、次のような関係になります。

               【コンテナA】【コンテナB】

                    【Doker】

                    【OS】

                  【サーバー】

コンテナとはユーザー空間のこと

先ほどのイメージをより分かりやすく説明すると、サーバーにはOSがあり、さらにOSとコンテナを動かすためにDocker(エンジン)があります。 コンテナはユーザー空間と呼んでも構いません。通常、ユーザー空間は1つのOSに対して1つですが、Dockerではユーザー空間をコンテナとして複数設ける事が可能です。

コンテナの中身はアプリケーションとミドルウェア、OSの一部(ライブラリーなど)です。コンテナはOSのカーネルを利用して、それぞれが独立して動きます。

Dockerコンテナ環境と仮想マシン環境との違い

ここまでの説明で、多くの方は「ただの仮想環境と何が違うのか?」と思われたかもしれません。仮確かに仮想マシンを実現する「ハイパーバイザー」と「Docker」の機能は似て見えてしまいますが、実は次の点で大きく異なっています。

「仮想マシン環境」では「ハイパーバイザー」の下に「ゲストOS」を立て、その下でアプリケーションが動きます。つまり仮想マシンはOSそのものの仮想化です。

一方の「コンテナ型仮想環境」では、「ハイパーバイザー」と同じ位置に「Docker」がおり、その下に「コンテナ」が複数あります。「コンテナ」にはOSライブラリー、ミドルウェア、アプリケーションが搭載されていると説明しましたが、Dockerの仮想化対象はコンテナです。

「仮想マシン環境」では必ず「ゲストOS」が必要ですが、「コンテナ環境」ではアプリケーションを動かす際にサーバーOSのカーネル部分を、カーネル以外の部分はコンテナ自体のOSライブラリーを利用するため、ゲストOSを必要としません。

コンテナのDockerとは

コンテナ型の仮想化技術はさまざまあります。LinuxベースのOpenVZなどもコンテナ型仮想化の1つです。そうしたコンテナ型仮想化技術を用いたサービスの中で、最も利用されているのがDockerです。

Dockerは、2013年にDocker社からリリースされ、Windows、Linux、Macなどのさまざまな環境で動作できる点が特徴です。

またDockerにはKubernetes(クベルネテス)やDockerUIなどのGUI管理ツールを用いて、コンテナ管理や自動化が行えるメリットがあります。

現在、Dockerはクラウドの3大サービスであるAWS、Azure、GCPでも対応が進められています。

AWSのコンテナについて初心者にも分かりやすく解説!
クラウドエンジニアを目指す方必見!Azureを分かりやすく紹介!
GoogleのGCPについて知り、エンジニアのスキルに生かそう

Dockerコンテナの利用メリット

メリット

コンテナ型仮想化技術を用いたDockerを利用すると、どんなメリットがあるのでしょうか?メリットを確認することで、Dockerに対する理解をさらに深めていきましょう。

起動までの時間を大きく短縮できる

一般的な仮想サーバーでは、ゲストOS単位で仮想サーバーが生成されるため、OSの起動から利用可能な状態になるまで分単位の時間を要しますが、コンテナ型仮想化では、コンテナ起動に掛かる時間は数秒程度です。この身軽さ、素早さは大きな利点です。

簡単に環境構築ができる

開発したシステムを動かすためには、同一環境を別のマシンで準備しなければなりませんが、同一環境の構築の手間、環境確認や環境テストなど、多くの手順を経ます。しかし、Dockerは環境が丸ごと提供されるため、少ない手順でスピーディーに同じ環境を再現できます。

Dockerイメージの配布により開発環境構築時間の短縮が図れる

作成したDockerイメージはパッケージとして配布ができます。これにより、システム開発などで別のアプリケーションを動かす際にも、Dockerイメージを利用すれば同一環境となり、環境のずれを防止でき、開発環境を準備する時間の短縮にもつながります。

ハードウェアリソースの削減になる

コンテナ自体は、アプリケーションの実行に必要なものだけに限定され、またホストOSのカーネル部分だけを使用するため、無駄がなくパフォーマンスが向上し、リソースの削減も実現します。

Docker Hubが利用できる

Dockerの特徴としてはコンテナ共有化サービスの『Docker Hub』があります。『Docker Hub』を通じて世界中の開発者の成果物が共有できます。これによって、よりレベルの高い優れたイメージを効果的、効率的に活用できます。

他、『Docker Hub』ではWebサイト構築に利用するWordPressやPHP、MySQLなどの環境がコンテナイメージとして提供されていますので、これらを利用してローカルに簡単にコンテナ環境を作成することも可能です。

インフラ調達は後回しにできる

一般的なシステム開発では、サーバなどのインフラ環境を先に整えますが、Dockerコンテナでは、まずはアプリケーション作りから始めて問題がありません。アプリケーション開発が進んだところで、コンテナ単位で本番環境に乗せればよいので、システムエンジニアはインフラを気にせず開発に専念できます。

Dockerコンテナのデメリット

デメリット

良いことだらけに見えるDockerコンテナですが、デメリットもあり、必ずしもオールマイティではありません。そのため利用する際には、デメリットを意識し、対策が必要な場合があります。以下、Dockerコンテナのデメリットを挙げますので、メリットと同様に認識をしておきましょう。

OSの自由度が制限される

Dockerコンテナは1つのOSに依存するため、OSの自由度はありません。コンテナはホストOSのカーネルを使って動作します。したがってWindowsOS上で直接Linuxコンテナは動作させられません。同一マシン上で異なるOSを動作させるにはホスト型の仮想マシン環境が必要です。

分離レベルが落ちる

コンテナはホストOSへの依存度が高く、個別にOSを立てるホスト型の仮想マシンと比較して、OSとの分離レベルが低いというデメリットがあります。OSの脆弱性などに対する外部からの攻撃に対しては、すべてのコンテナが危険にさらされるため、細かいケアや対策が求められます。

Dockerコンテナに関する疑問を解消

疑問解消

Dockerコンテナに関して、ある程度理解は進んだでしょうか?ここでは、Dockerコンテナに関するよくある疑問について採り上げます。

Dockerコンテナの実例は

Dockerコンテナを実際に製品やサービスとして提供しているものには何があるのか見ていきましょう。

▪Docker Cloud Docker社が提供するSaaS型クラウドサービス製品です。実行環境についてはクラウド事業者に委ねられています。

▪AWS Fargate AWS Fargateとは、「Amazon ECS(Elastic Container Service)」および「Amazon EKS(Elastic Kubernetes Service)」 で動作する、コンテナ実行環境です。 コンテナ向けのサーバーを意識せずに利用できるクラウドサービスです。Googleの「Google Cloud Run」、Azureの「Azure Container Instances」なども同様のサービスです。

▪Docker Desktop パソコンなどのローカル環境で簡単にDockerコンテナの開発環境を構築、導入できるソフトです。WindowsやMacなどのOSに対応しています。個人向けプランは無償ですが、企業向けプランは有料化されています。

エンジニア必見! Docker Desktop有料化の影響と対策

Dockerのインストールと実行方法は

Dockerは皆さんのパソコンにインストールをして実際に試すことができます。インストールは『Docker Hub』から入手します。以下のサイトでインストール、実行方法などを確認してみてください。

【参照】:Docker Desktop

Dockerコマンドとは

パソコンにインストールしたDockerを利用するには、コマンドを用います。Windowsであれば、コマンドラインを開いて、直接コマンドを打ち込みます。よく使うコマンドの例を挙げておきます。

>docker version インストールされているDocker Engineのバージョン情報を確認します。

>docker ps 動作中のコンテナ一覧を表示します。

>docker ps -a 停止中のコンテナも含めて全てのコンテナントを一覧表示します。

>docker images 現在取得済みのDockerイメージの一覧を表示します。イメージは主に「Docker Hub」から取得できます。

>docker pull [イメージID] イメージをローカルに取得する際に使うコマンドです。

>docker create --name [コンテナID] [イメージID] 取得したイメージからコンテナ作成を行うコマンドです。 

>docker start  [コンテナID] コンテナを実行するコマンドです。

>docker stop [コンテナID] コンテナを停止するコマンドです。

>docker cp コンテナのコピー、ファイル転送するコマンドです。

いかがですか?すでにDockerイメージがあれば、以上のコマンドだけでDockerコンテナのイメージを取得し、コンテナの作成と実行ができます。

Dockerコンテナは必ず押さえておくべき技術

重要

ここまで、できるだけ分かり易く「Dockerコンテナ」について解説してきました。「Dockerコンテナ」にはさまざまなメリットがあることが理解頂けたと思います。

サーバー仮想化はクラウドサービスを中心に大きく普及しましたが、Dockerを中心とするコンテナ型仮想化は、さらに身近で便利な存在して、普及が進むと見られています。

エンジニアの皆さんは、ぜひDockerコンテナに関する知識を身に付け、システム開発や新たなビジネスで活用してみてください。

気になる人のTwitterをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

eyecatch_visual_coder
Adobe製品を使わない"デザイナー"?「ビジュアルコーダー」が考える、自己満足で終わらないWebデザインとは
三角
2020.06.16

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
この記事をシェア
Twitter
Facebook
LINE
Hatena

編集部おすすめコンテンツ

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT