Dockerとは?使い方から基本コマンドまでサンプル付きで解説!
2023.11.18

Web系のアプリケーション開発業務をするときに、よく聞くようになった「Docker」という単語。


Dockerとは何なのか、VirtualBoxやHyper-Vといった仮想環境と何が違うのかを詳しく紹介していきます。


1.Dockerとは?

Dockerは、「コンテナ仮想化」と呼ばれる仮想環境を構築するソフトウェアです。

ホストとなるPCやサーバー上に仮想的なOSを立ち上げることで、別なOS・環境を立ち上げられます。

①仮想マシンとの違い

有名な仮想化ソフトウェアには、大きく分けて3種類が存在します。

  1. ホスト型仮想化
  2. ハイパーバイザ型仮想化
  3. コンテナ仮想化

ホスト型やハイパーバイザ型はいわゆる「仮想マシン」を提供するソフトウェアで、ハードウェアも仮想化の対象とします。そのため、その仮想マシン専用のCPUやメモリ、GPUを割り当てることが可能です。


一方で、コンテナ仮想化はOSの「カーネル部分」を共用し、OSのコア機能よりも上位のみを仮想化します。

「カーネル部分」を共用することで、軽量かつ高速な動作を可能とするのです。

仮想化ソフトウェアの仮想化範囲の違い

②Dockerの使いどころ

Dockerは、主にアプリケーションサーバーの構築に利用されます。

「CPUやメモリといったリソースを効率よく使う」ことが得意であるDockerは、現時点ではクラウドを活用するWeb系のアプリケーション開発に利用されています。


実は、Dockerのコア技術であるコンテナ仮想化は、軽量に動作する反面ハードウェアを占有できません。

これはつまり、GPUを利用するようなVDI(仮想デスクトップ)の運用には向いていないことを意味します。

「従来の仮想マシン環境のすべてを代替できるわけではない」ことに注意しましょう。



2.Dockerで何ができる?


次に、Dockerを使うメリットを紹介します。

①アプリケーションをすばやく構築・テスト・デプロイできる

Dockerを利用して「コンテナイメージ」を作成することで、アプリケーションの開発環境や本番環境を容易に作成できます。

ホスト型やハイパーバイザ型の仮想マシンと異なり、コンテナ仮想化は非常に高速に動作します。


ハイパーバイザであれば、OSの起動だけで数十秒かかるところが、コンテナであれば数秒で起動できるのです。


また、OSやミドルウェア、バイナリといったデータをまとめた「イメージファイル」の容量が小さいことも大きなメリットで、ネットワークを通じた展開も高速に進みます。

②どこでも誰でも同じ環境を作れる

コンテナイメージには、バイナリデータの他にTomcatやApacheといったミドルウェアを含めることが一般的です。


これが何を意味するかというと、「コンテナイメージをダウンロードして実行するだけで実行環境が立ち上がる」ということです。


これまでは、


・ソースのダウンロード

・ビルド

・アップロード

といった作業が各個人に必要だったのですが、Dockerを活用することでその手順が省略されます。

Docker自体もコマンドですぐ実行できるため、コマンドひとつでローカルに開発環境を構築できるということになります。

③開発環境による問題を減らせる

Dockerコンテナ上のOSはどの環境でも一律になるため、WindowsとMacでそれぞれ開発をしても、Docker上で動作するOSは同じです。


そのため、たとえばWindowsとMac、Linuxの間で起きるような環境差異による問題が起きにくくなります。


特に、Windowsでよく発生する文字コードによる問題が起きないことは大きなメリットと言えるでしょう。



3.Docker入門者が覚えておくべき用語


基本的な特徴やメリットを押さえたところで、次はDockerを使ううえで覚えておくべき用語を紹介します。

①コンテナ

「コンテナ」は、Docker上で動作する仮想環境を指します。

実は、この「コンテナ」の考え方はDockerのオリジナルではなく、Linux自体に存在する機能です。


詳細は割愛しますが、カーネルより上位の機能を分離することで、OSやミドルウェアの動作を独立させるために開発されました。

Dockerを利用するうえでは、「仮想環境として動作する1単位」とまずは理解するとよいでしょう。

②Docker Engine

Dockerのコンテナを操作するコア機能を指します。

主に、


・Dockerをコマンドラインから利用する「CLI」

・外部から利用するための「API」

・Dockerコンテナを管理する「Daemon(デーモン)」

から構成されています。

③Dockerイメージ

Dockerイメージは、Dockerで利用できるコンテナの情報が格納されたイメージファイルです。

主に、


・OS

・ミドルウェア

・アプリケーション

・データ

といった、Docker上で動作するコンテナに関する情報をひとまとめにしたものです。

Dockerでは、このイメージファイルを元に「コンテナ」を起動します。

④Dockerfile

Dockerfileは、上述のDockerイメージを作成するためのスクリプトファイルです。

Dockerfileには、主に以下のような情報を記載します。


・インストールするアプリケーション

・環境変数

・コピーするバイナリファイル

Dockerfileを用いてDockerイメージを作成する、と覚えましょう。



4.Dockerのエコシステム

基本的な概念を理解したところで、Dockerを用いたエコシステムを紹介します。

①Docker Hub

Docker Hubは、Dockerイメージが公開されている場所です。

GitHubがソースコードを公開する場なのに対し、Docker HubはDockerイメージを公開する場所です。


さまざまなイメージが公開されていますので、Dockerでミドルウェアを利用したい場合にはまずは探してみるとよいでしょう。


Docker Hub

②Docker Compose

Docker Composeは、Dockerで複数のコンテナを利用する際に便利なアプリケーションです。

docker-compose.yamlというファイルを作成することで、複数のコンテナを一度に起動できます。


たとえば、Javaのアプリケーションサーバーとデータベースサーバーのふたつのコンテナが必要な場合、Docker Composeを利用することでふたつのコンテナを一緒に管理できます。

③Kubernetes

Kubernetesは、「コンテナオーケストレーション」と呼ばれているサービス。大規模なアプリケーションの実行環境を管理できるソフトウェアです。


Dockerは、主にコンテナの起動や終了といった部分を管理します。それに対し、Kubernetesは複数のホストサーバーを同時に管理し、適切にコンテナをデプロイできます。


ロードバランシングや自動でコンテナを再起動する機能など、Docker単体にはない管理機能を持っているのがKubernetesの大きな特徴です。


ローカルではDockerを、運用ではKubernetesを利用する場合もあります。
Dockerを利用する開発に携わるのであれば、Kubernetesの存在はしっかりと押さえておきましょう。

④Docker Desktop

Docker Desktopは、WindowsまたはmacOS上で動作するデスクトップアプリケーションで、GUIを通じてDockerを利用できます。


ただし、Docker Desktopは完全無料ではないため注意しましょう。


公式サイトによると、以下の条件の場合には料金を支払う必要があります。

250名以上もしくは11億円以上の企業でDocker Desktopを利用する場合には、有料となります。


個人利用であればWindowsやMacでもDocker Desktopを自由に使えますが、上記の条件に合致する企業で業務利用する場合には注意が必要です。


Docker Official


ちなみに、この料金はDocker Desktopが対象です。
LinuxにDockerをインストールして利用する分には料金は発生しません。



5.Dockerをインストールしてみよう


それでは、実際にDocker Desktopをインストールしてみましょう。

Docker DesktopはOSやインストーラも提供されていますが、コマンド経由で簡単にインストールできます。


今回は、コマンドを利用して簡単にインストールする方法を紹介します。

なお、前述の通りDocker Desktopは完全無料のソフトウェアではありません。業務で利用する場合にはライセンス違反とならないように注意しましょう。

①Windowsの場合

Windows10またはWindows11の最新版を利用しているのであれば、「Windowsパッケージマネージャ」を利用して最新のDocker Desktopをインストールできます。

前提条件

WindowsでDockerを起動する場合には、VT-x(Intel CPUの場合)またはAMD-V(AMD CPUの場合)が有効である必要があります。

仮想環境(WSL2)の有効化

Windows上でDockerを利用する場合、まずはLinuxの仮想機能であるWSL2を有効化する必要があります。

PowerShellを管理者モードで起動し、以下のコマンドを実行しましょう。

wsl --install -d Ubuntu

少し時間がかかるので待ちましょう。

Docker Desktopのインストール

WSLのインストールが完了したら、次はDocker Desktopをインストールします。

winget install docker.dockerdesktop

あとは、自動でインストールが終了します。

Docker Desktopの起動

インストールが完了すれば、デスクトップにアイコンが出るので、ダブルクリックで起動します。

Docker Desktopのアイコンをダブルクリックで起動

以下のようなメッセージが表示された場合には、一度サインアウトし、再度ログインしましょう。

Docker Desktopにより表示された「Requires log out」のウィンドウ

再度ログインすることで、正常にDockerが起動します。

タスクバーにDockerのアイコンが表示されていればインストールは完了です。

タスクバーにDockerのアイコンが表示されている

②Macの場合

Mac向けのDocker Desktopは、IntelチップとM1チップでそれぞれ異なるインストーラが提供されています。


公式サイトからもダウンロードできますが、Homebrewを利用すれば自動で判別してインストールされるので、そちらを利用するとよいでしょう。

brew install --cask docker

もしHomebrewを利用していないのであれば、下記のサイトを参考にインストールしてみてください。

Homebrew

Docker Desktopの起動

インストールが完了したら、アプリケーションランチャーにアプリが追加されるのでクリックして起動しましょう。

アプリケーションランチャーにDockerが追加されている

以下のようなアラートが出るので、「開く」を選択します。

アプリケーションを開くときに表示されるアラートで「開く」を選択

Dockerを利用するためにアクセス権を付与する必要があるので、「OK」を選択してmacOSのユーザーIDとパスワードを入力して認証しましょう。

アクセス権の付与を求めるダイアログで「OK」を選択し、パスワードとIDで認証

しばらくすると、Dockerがメニューバーに表示され、以下のように「Docker Desktop is running」と表示されれば起動完了です。

メニューバーにDockerが表示され、「Docker Desktop is running」となっている




6.Dockerの基本的な使い方


さいごに、Dockerの基本的な使い方を紹介します。

WindowsやmacOSに関わらず、同じコマンドを用いて利用できますので、基本的なコマンドをマスターすればどのOS上でも利用できます。

①バージョン確認:versionコマンド

versionは、インストールされているDockerのバージョンを確認するコマンドです。

docker version

②コンテナの確認:psコマンド

Docker上で動作しているコンテナの情報を表示します。

docker ps

また、停止中のコンテナも表示したい場合には、-aをつけます。

docker ps -a

エラーなどで停止したコンテナの情報も表示されるため、有効活用しましょう。

③イメージの確認:imagesコマンド

ローカルに保持しているDockerイメージを表示します。

docker images

④イメージの取得:pullコマンド

Dockerイメージを取得するためには、pullコマンドを利用します。

Docker Hubに存在するイメージであれば、イメージ名を指定するだけで簡単にイメージを取得できます。

docker pull <イメージ名>

たとえば、Tomcatを含むイメージをダウンロード(pull)したい場合、以下のようなコマンドを実行します。

docker pull tomcat

⑤Dockerを実行:runコマンド

Dockerのイメージをもとにコンテナを起動する場合に利用するのが「run」コマンドです。

docker run <イメージ名>

⑥Dockerイメージを作成:buildコマンド

オリジナルのDockerイメージを作成する場合に利用するのが「build」コマンドです。

Dockerfileを作成し、以下のコマンドを実行することでオリジナルのDockerイメージが作成されます。

docker build -t <イメージ名>

⑦その他よく使うコマンド一覧

その他、以下のようなコマンドを覚えておくとよいでしょう。

コマンド名説明
startすでに存在するコンテナを起動します
stop起動しているコンテナを停止します
logsコンテナのログを表示します
rm停止しているコンテナを削除します
cpDockerコンテナにファイルをコピー、またはコンテナからファイルをコピーします。



この記事をシェア