Docker のインストールを確認する方法: Docker Desktop と Docker Engine

Dockerは、ソフトウェア開発ソリューションを提供するリーダーとなり、コンテナを使用してアプリケーションの開発、テスト、デプロイ、および実行のプロセスを簡素化するツールを提供しています。 そのため、 Docker Desktop などの Docker のさまざまな製品や Docker Engine などのコンポーネントを理解し、それらがどのように連携するかを理解することは、生産性を最大化し、Docker のライセンス条項への準拠を確保しようとする開発者にとって不可欠です。 

この投稿では、Docker Desktop と Docker Engine の違いと類似点を明確にし、エクスペリエンスを最大限に活用できるように、現在どちらを使用しているかを確認するためのガイダンスを提供します。

Docker Desktop と Docker Engine のインストールを区別する方法、追加の Docker ツールがいつ使用されているかを特定する方法、Docker コンテキストを理解する方法、Docker の使用状況を確認して Docker ライセンス契約に準拠していることを確認する方法については、以下をお読みください。

バナードッカーのヒント

バックグラウンド

「Docker」という言葉はコンテナ化と同義語になり、アプリケーションのコンテナ化がアプリケーションの「Docker化」と呼ばれることが増えています。 Dockerは コンテナ化を生み出さなかったが、同社はこのテクノロジーをわかりやすいツールとアーティファクトのセットで開発者コミュニティにもたらした最初の企業だった。 

2015年、Dockerは次のステップに進み、Open Container Initiative(OCI)を作成して、コンテナイメージの構築方法、コンテナイメージの実行方法、およびコンテナイメージの共有方法を定義および指定しました。OCIをLinux Foundationに寄贈することで、Dockerはコンテナテクノロジーのあらゆるアプリケーションに公平な競争の場を提供しました。

Dockerが率いるオープンソースの取り組みは、 Moby Projectです。 Dockerは、車輪の再発明をすることなく、特殊なコンテナシステムを組み立てるために、このオープンフレームワークを作成しました。 数十の標準コンポーネントのビルディングブロックセットと、それらをカスタムプラットフォームに組み立てるためのフレームワークを提供します。 

Moby は、コンテナー エンジン、コンテナー ランタイム、ネットワーク、ストレージ、オーケストレーション システムなど、いくつかのコンポーネントで構成されています。 スタンドアロンの無料 Docker Engine (Docker Community Edition または Docker CE とも呼ばれます) と商用の Docker Desktop は、どちらも Moby Project から生まれました。 しかし、Docker DesktopはMoby Projectを超えて進化し、製品チーム全体が個々の開発者、小規模なチーム、および大規模な開発チームの要件をサポートするための機能とテクノロジーに投資しています。

Docker Engine と Docker Desktop の比較

Docker Desktop は、Docker, Inc. が販売およびサポートする商用製品です。 これには、Docker Engine とその他のオープン ソース コンポーネントが含まれます。プロプライエタリコンポーネント;また、直感的なGUI、同期されたファイル共有、クラウドリソースへのアクセス、デバッグ機能、ネイティブホスト統合、ガバナンス、ECI、エアギャップコンテナ、管理設定管理をサポートするセキュリティ機能などの機能も備えています。 異なるオペレーティングシステム間で一貫したユーザーエクスペリエンスを提供するために、Docker Desktopはホストシステムのネイティブ仮想化を使用して、DockerエンジンのVMを実行および管理します。 これにより、開発者は、あらゆるデバイスやオペレーティングシステムでコンテナ化ツールセットを実行するためのターンキーソリューションを得ることができます。 ユーザーは、Docker Desktopをダウンロードすることで、あらゆるプラットフォームでDocker Engineをコアとして活用できます。

Docker Engine は、Docker Desktop の一部としてではなく、個別に無料でダウンロードできるコンポーネントであり、スタンドアロンとして無料で実行されます。 サポートされている任意のLinuxディストリビューションで実行でき、コマンドを実行するための DockerCLI が含まれています。 Docker EngineはWindowsやmacOSではネイティブに動作せず、GUIやDocker Desktopが提供する高度な機能は付属していません。

Docker Desktop を実行しているのか、Docker Engine だけを実行しているのかは、どうすればわかりますか?

Docker Desktop と Docker Engine のどちらを使用しているかは、さまざまな方法で判断できます。 次のセクションでは、ファイルシステムと、Docker Desktop のコンポーネントでもある Docker CLI ツール内からチェックするためのガイダンスを提供します。

1. GUI またはアイコン

Docker Desktop を使用している場合は、ウィンドウ化された GUI またはクジラのメニューバー/タスクバー アイコンが表示されます (図 1)。

macOSのDockerデスクトップメニューのスクリーンショット。
図 1: macOSメニュー。

2. インストールの確認

Docker Desktop を確認する最も簡単な方法は、インストールを探すことです。これは、スクリプトまたはMDMソリューションを使用して自動化できます。

次の手順では、Docker Desktop が既定の場所にインストールされていることを前提としているため、他のインストール パスを使用すると偽陰性が発生する可能性があることに注意してください。

macOS上のDocker Desktop

macOSでは、 Docker Desktop アプリケーションはディレクトリ /Applications の下にインストールされ、名前が付けられ Docker ます(図 2)。

$ ls -alt /Applications/Docker.app/
total 0
drwxrwxr-x  49 root      admin  1568 Oct 13 09:54 ..
drwxr-xr-x@  9 jschmidt  admin   288 Sep 28 15:36 Contents
drwxr-xr-x@  3 jschmidt  admin    96 Sep  8 02:35 .
macOS上のDockerアプリケーション情報(作成日、変更日、バージョンなど)のスクリーンショット。
図 2: macOSにインストールされたDockerアプリケーション。

Windows 上の Docker Desktop

Windows では、 Docker Desktop アプリケーションはフォルダ C:\Program Files の下にインストールされ、 という名前が付けられ Docker ます (図 3)。

C:\Users\qdzlug>dir "c:\Program Files\Docker"
 Volume in drive C has no label.
 Volume Serial Number is DEFE-FC15

 Directory of c:\Program Files\Docker

09/28/2023  02:22 PM    <DIR>          .
09/28/2023  02:22 PM    <DIR>          ..
09/28/2023  02:22 PM    <DIR>          cli-plugins
09/28/2023  02:21 PM    <DIR>          Docker
               0 File(s)              0 bytes
               4 Dir(s)  52,964,356,096 bytes free

C:\Users\qdzlug>
Windows上のDockerアプリケーションのスクリーンショットで、ファイルフォルダと変更日を示しています。
図 3: WindowsにインストールされたDockerアプリケーション。

Linux 上の Docker Desktop

Linuxでは、 Docker Desktop アプリケーションは にインストールされます /opt/docker-desktop

$ ls -lat /opt/docker-desktop/
total 208528
drwxr-xr-x 7 root root      4096 Sep 29 10:58  .
drwxr-xr-x 2 root root      4096 Sep 29 10:58  locales
drwxr-xr-x 5 root root      4096 Sep 29 10:58  resources
drwxr-xr-x 2 root root      4096 Sep 29 10:58  share
drwxr-xr-x 2 root root      4096 Sep 29 10:58  linuxkit
drwxr-xr-x 2 root root      4096 Sep 29 10:58  bin
drwxr-xr-x 7 root root      4096 Sep 29 10:57  ..
-rw-r--r-- 1 root root   5313018 Sep 27 12:10  resources.pak
-rw-r--r-- 1 root root    273328 Sep 27 12:10  snapshot_blob.bin
-rw-r--r-- 1 root root    588152 Sep 27 12:10  v8_context_snapshot.bin
-rw-r--r-- 1 root root       107 Sep 27 12:10  vk_swiftshader_icd.json
-rw-r--r-- 1 root root    127746 Sep 27 12:10  chrome_100_percent.pak
-rw-r--r-- 1 root root    179160 Sep 27 12:10  chrome_200_percent.pak
-rwxr-xr-x 1 root root   1254728 Sep 27 12:10  chrome_crashpad_handler
-rwxr-xr-x 1 root root     54256 Sep 27 12:10  chrome-sandbox
-rw-r--r-- 1 root root       398 Sep 27 12:10  componentsVersion.json
-rwxr-xr-x 1 root root 166000248 Sep 27 12:10 'Docker Desktop'
-rw-r--r-- 1 root root  10544880 Sep 27 12:10  icudtl.dat
-rwxr-xr-x 1 root root    252920 Sep 27 12:10  libEGL.so
-rwxr-xr-x 1 root root   2877248 Sep 27 12:10  libffmpeg.so
-rwxr-xr-x 1 root root   6633192 Sep 27 12:10  libGLESv2.so
-rwxr-xr-x 1 root root   4623704 Sep 27 12:10  libvk_swiftshader.so
-rwxr-xr-x 1 root root   6402632 Sep 27 12:10  libvulkan.so.1
-rw-r--r-- 1 root root      1096 Sep 27 12:10  LICENSE.electron.txt
-rw-r--r-- 1 root root   8328249 Sep 27 12:10  LICENSES.chromium.html

Dockerの起動アイコンと場所は、使用されているLinuxディストリビューションによって異なることに注意してください。

3. 実行中のインストールを確認する

また、実行中のインストールを確認して、使用されている Docker のバージョンを確認することもできます。 これを行うには、次のコマンドを使用する必要があります docker version 。この Server 行は、使用されているバージョンを示します。

macOS Arm64 上の Docker Desktop

この行は Server: Docker Desktop 4.24.0 (122432) 、Docker Desktop を使用していることを示しています。

$ docker version
Client:
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:28:49 2023
 OS/Arch:           darwin/arm64
 Context:           default

**Server: Docker Desktop 4.24.0 (122432)**
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:31:36 2023
  OS/Arch:          linux/arm64
  Experimental:     true
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Windows 上の Docker Desktop

この行は Server: Docker Desktop 4.24.0 (122432) 、Docker Desktop を使用していることを示しています。

C:\Users\qdzlug>docker version
Client:
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:32:48 2023
 OS/Arch:           windows/amd64
 Context:           default

**Server: Docker Desktop 4.24.0 (122432)**
 Engine:
  Version:          dev
  API version:      1.44 (minimum version 1.12)
  Go version:       go1.20.8
  Git commit:       HEAD
  Built:            Tue Sep 26 11:52:32 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

C:\Users\qdzlug>

Linux 上の Docker Desktop

この行は Server: Docker Desktop 4.31.0 (153195) 、Docker Desktop を使用していることを示しています。

Client:
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.22.3
 Git commit:        5650f9b102
 Built:             Thu Jun  6 18:42:55 2024
 OS/Arch:           linux/amd64
 Context:           desktop-linux
Server: Docker Desktop 4.31.0 (153195)
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:29:22 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Linux 上の Docker エンジン

この行は Server: Docker Engine - Community 、コミュニティ版を使用していることを示しています。

$ docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:31:44 2023
 OS/Arch:           linux/amd64
 Context:           default

**Server: Docker Engine - Community**
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:31:44 2023
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.6.24
  GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
 runc:
  Version:          1.1.9
  GitCommit:        v1.1.9-0-gccaecfc
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker コンテキスト

複数のコンテキストをシステムにインストールできることに注意してください。これは、Docker Desktop と Docker Engine が同じホストにインストールされている Linux で最もよく見られます。 この 2 つを切り替えるには、 docker context use 次のコマンドを使用します。 コンテキスト内では、そのコンテキストのデーモンと通信します。したがって、デュアルインストールの状況では、Docker Desktopのインストールとホストのインストールを切り替えることになります。

コンテキストを表示するには、 を使用してdocker context lsdocker context use CONTEXTNAMEから切り替えます。次の例は、両方がインストールされた Linux システムを示しています。

$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                     KUBERNETES ENDPOINT   ORCHESTRATOR
default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                     
desktop-linux       moby                Docker Desktop                            unix:///home/jschmidt/.docker/desktop/docker.sock               
$ docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:31:44 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:31:44 2023
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          1.6.24
  GitCommit:        61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
 runc:
  Version:          1.1.9
  GitCommit:        v1.1.9-0-gccaecfc
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
$ docker context use desktop-linux
desktop-linux
Current context is now "desktop-linux"
$ docker version
Client: Docker Engine - Community
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.6
 API version:       1.43
 Go version:        go1.20.7
 Git commit:        ed223bc
 Built:             Mon Sep  4 12:31:44 2023
 OS/Arch:           linux/amd64
 Context:           desktop-linux

Server: Docker Desktop 4.24.0 (122432)
 Engine:
  Version:          24.0.6
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.7
  Git commit:       1a79695
  Built:            Mon Sep  4 12:32:16 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

その他のOCIツール

Docker Engine と Docker Desktop はどちらも OCI に準拠しているため、Docker の "直接の代替品" として多くのソリューションが提示され、インストールされます。 このプロセスでは、通常、コマンドを docker エミュレートするためのヘルパーエイリアス、スクリプト、またはバッチプログラムを作成します。 

エイリアスを確認するには、コマンド alias docker を実行してエイリアスが設定されているかどうかを確認します。 これは、Linux と macOS、または Windows 上の WSL2 内の Linux ディストリビューションに当てはまります。

$ alias docker # Docker aliased to podman
docker='podman'
$ alias docker # No alias present

また、CLI からバイナリを docker 一覧表示して、公式の Docker バイナリであることを確認することもできます。

$ ls -l `which docker` # Docker supplied by Homebrew on the Mac
lrwxr-xr-x  1 jschmidt  admin  34 Apr  2 12:03 /opt/homebrew/bin/docker -> ../Cellar/docker/26.0.0/bin/docker


$ ls -l `which docker` # Official Docker binary on the Mac
lrwxr-xr-x  1 root  wheel  54 Jan 10 16:06 /usr/local/bin/docker -> /Applications/Docker.app/Contents/Resources/bin/docker

結論

今回の調査の締めくくりとして、コンテナ化の旅の一環として使用できる、一般的に「Docker」と呼ばれるオファリングもいくつかあることに注意してください。 この投稿では、Docker Engine と Docker Desktop に焦点を当てました。

この時点で、Docker DesktopインストールとDocker Engineインストールを区別し、コマンド名で docker 他のOCIツールが使用されているタイミングを識別できるはずです。 また、このトピックに関連する Docker コンテキストの概要も理解している必要があります。 最後に、 Dockerライセンス契約 に照らして使用状況を確認してコンプライアンスを確認するか、会社の資格情報でログインして調達したエンタイトルメントにアクセスできる必要があります。

さらに詳しく