BLOG

ブログ

2024/02/26 技術系

【Docker】Dockerとは?仮想化技術と使い方について紹介

この記事を書いた人 Y.S
画像1

Dockerというツールはご存知でしょうか?今回は開発業務に欠かせないDockerについて調べてまとめてみました。

Dockerとは?

Dockerは仮想化技術を使用してソフトウェアを簡単に開発、配布、実行するためのツールです。仮想化技術を使用することで、物理的な1台のコンピュータで複数の仮想的なコンピュータを作ることができます。仮想化技術には「コンテナ型仮想化技術」「ホスト型仮想化技術」「ハイパーバイザー型仮想化技術」があり、Dockerは「コンテナ型仮想化技術」を採用しています。

仮想化技術

コンテナ型仮想化技術について

Dockerで使用されている「コンテナ型仮想化技術」には以下の特徴が挙げられます。

  • ホストOS(物理的なコンピュータ上で実行を行うOS)でアプリケーションを実行します。そのため、異なるアプリケーションを同じホスト上で隔離して実行しています。
  • 構築する環境にゲストOSをインストールする必要がないため、「イメージ」を軽量化できます。(イメージにはアプリケーションやその実行に必要なファイル、ライブラリ、設定が含まれます。)イメージを軽量化すると、軽量かつ素早く起動することができます。

コンテナとイメージの関係性

コンテナはイメージを元にして生成されます。イメージとはアプリケーションの「設計図」であり、コンテナはその設計図に基づいて動作する「実行可能なインスタンス」です。コンテナはイメージから作成され、実際に動作する役割があります。

Dockerの特徴

上記のコンテナ型仮想化技術の特徴を踏まえたDockerの特徴は下記の通りです。

  • 環境の統一性
    開発者がローカルで作成した環境が、本番環境や他の環境でも同じように動作します。自分で作成した環境を開発チームに配布し、配布先のPCと同様のOSであれば同じように動作させることが可能です。
  • リソース効率が良い
    ホストOSで実行するため、リソースの効率的な利用が可能です。負荷の変動や需要の変化に応じてリソースを動的に調整することができます。
  • Dockerコミュニティが活発
    Dockerを使用している開発者、エンジニア、システム管理者さんがDockerに関連するさまざまなトピックについて知識を共有しています。Docker HubにはさまざまなDockerイメージが共有されていたり、ドキュメントやリソースの提供もあります。

ホストOS型仮想化技術について

コンテナ型とは異なる仮想化の技術として「ホストOS型仮想型技術」があります。ホストOS型はコンテナ型と比較すると、処理速度を高速化させる点よりも異なるゲストOSをインストールできる点で強みがあります。

ホストOS型仮想型技術の特徴

  • コンテナ型と同様に、ホストOSでアプリケーションを実行します。
  • コンテナ型とは異なり、構築する環境ごとに独自のゲストOS(例:Windows、Linux、macOSなど)をインストールする必要があります。そのため、ホストOSとゲストOSを組み合わせた環境構築が可能です。

ハイパーバイザー型仮想化技術について

「ハイパーバイザー」とは仮想化ソフトウェアのことで、サーバー上にインストールして仮想マシンを稼働させます。

ハイパーバイザー型仮想型技術の特徴

  • コンテナ型とは全く異なりホストOSを必要とせず、ゲストOSをインストールします。ゲストOSのインストールによるリソースの消費が大きいですが、ホストOSを動かさないため処理速度が早いのが特徴です。

Dockerを使ってみる

Dockerをインストール

公式サイトより、Dockerをインストールします。インストールが完了したら「Docker Desktop」を起動し、コマンドライン上でバージョン確認コマンドを実行してみます。無事インストールできていればバージョンが表示されます。(今回はこちらのコマンド使用してみました。)

$ docker version --format '{{.Server.Version}}' 
24.0.2

アプリをDockerで動かしてみる

hello-worldコンテナの実行

docker run [イメージ名]」でコンテナを実行することができます。今回は公式で用意されている「hello-world」コンテナを実行して、「Hello from Docker!」が表示されているか確認します。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
478afc919002: Pull complete 
Digest: sha256:4bd78111b6914a99dbc560e6a20eab57ff6655aea4a80c50b0c5491968cbc2e6
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

上記の実行内容については、まず「hello-world」イメージを検索しています。今回は「hello-world」イメージが存在しなかったためDocker Hubからイメージを取得(pull)を行って実行している旨が表示されています。そして取得後、「Hello from Docker!」が表示されていることを確認できました。

Dockerイメージ一覧を表示

初めて「docker run hello-world」を実行した場合に自動で「hello-world」イメージを取得するため、ローカルのDockerに「hello-world」が追加されていることを確認できます。

$ docker images
REPOSITORY              TAG              IMAGE ID       CREATED         SIZE
hello-world             latest           ee301c921b8a   8 months ago    9.14kB

Dockerコンテナ一覧を表示

「hello-world」コンテナは実行後にコンテナを停止するため、起動中のコンテナを表示してみても表示されません。そのため、コンテナ一覧を表示するコマンド「docker ps」を実行しても下記のように表示されないのが正常な動作となります。

$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

-a オプションを付けることで停止中のコンテナも表示します。実行してみると、「hello-world」コンテナを確認できます。

$ docker ps -a
CONTAINER ID   IMAGE                   COMMAND                   CREATED          STATUS                        PORTS     NAMES
e1ea8c5d3948   hello-world             "/hello"                  27 minutes ago   Exited (0) 27 minutes ago               boring_golick

最後に

Dockerの仮想化技術のまとめとインストールから簡単なコンテナの起動までを紹介しました。Dockerを中心とした仮想化技術の特徴を調べていく中で、今回の内容は応用情報技術者試験の問題にも出題されている事を知りました。

さまざまな仮想化技術がある中でDockerはデメリットとしてホストOSに依存して動作するため、ホストOSに異常があれば対応が必要になりますが、軽量でリソース効率が良い点などのメリットもあります。状況に応じた技術選択が大事なのだと勉強になりました。Dockerや仮想化技術の理解に少しでも手助けになれば幸いです。

参考記事

【公式ドキュメント】Docker overview

【超入門】「仮想マシン」「ゲストOS」「ホストOS」を図解でわかりやすく解説します

Dockerとは?初心者のためにメリットと基本的な使い方を解説

サーバ仮想化 – ハイパーバイザー型とコンテナ型の違い

Docker入門 ~Hello World~



株式会社ウイングドアは福岡のシステム開発会社です。
現在、私達と一緒に"楽しく仕事が出来る仲間"として、新卒・中途採用を絶賛募集しています!
ウイングドアの仲間達となら楽しく仕事できるかも?と興味をもった方、
お気軽にお問い合わせ下さい!

アーカイブ