🍙

Docker Desktop と代替ツールの機能検証まとめ

2024/01/15に公開
12

はじめに

こんにちは。今年クラウドエース株式会社に新卒入社し、現在 SRE をしている渋谷と申します。
自分の愛車は MAZDA の RX-8 という車なのですが、この車に搭載されているロータリーエンジン(おにぎりエンジン)にちなんで、自分が執筆する記事のアイキャッチは 🍙 にすることにしました。

さて、この記事では GUI を用いてコンテナを管理・操作する際に使用されるコンテナ管理ツールとして代表的な以下の 3つのツールを紹介し、機能検証を行います。

  1. Docker Desktop
  2. Rancher Desktop
  3. Podman Desktop

それぞれのコンテナ管理ツールのメリット・デメリットを解説し、最後に自分が選んだコンテナ管理ツールを紹介します。
自分の用途に合ったコンテナ管理ツールを選択することで、より快適に Docker を使用することができるようになると思いますので、ぜひ参考にしてみてください。

対象読者

  • Homebrew 導入済み
  • Docker を使用したことがある(初心者)
  • とりあえず Docker Desktop を使用している
  • Docker Desktop 以外のコンテナ管理ツールを知りたい
    • メリット・デメリットを知りたい
  • 自分の用途に合ったコンテナ管理ツールを知りたい
  • docker コマンドにあまり慣れておらず、GUI で操作したい

やること・やらないこと

やること

  • Docker Desktop と代替ツールの紹介
  • 各ツールのインストール方法の解説
  • 各ツールの機能検証
  • 各ツールのメリット・デメリットの解説
  • 自分が選んだコンテナ管理ツールの紹介
  • あなたが選ぶべきコンテナ管理ツールの紹介

やらないこと

  • Docker についての説明
  • インストーラーを使用したインストール方法の解説
    • 本記事では Homebrew を使用したインストール方法を解説します
  • docker-compose (Compose V1) の検証
    • docker-compose (Compose V1) は非推奨となっており、代わりに docker compose (Compose V2) を使用することが推奨されているため
    • Docker Desktop, Rancher Desktop
      • 標準で Compose V2 を使用可能
    • Podman Desktop
      • GUI から docker-compose をインストールすることで Compose V2 を使用
      • ※ ここでインストールする docker-compose は、docker compose へエイリアスされる(参考
      • docker-compose version コマンドの結果が Docker Compose version v2.xx.xx となることを確認済み
  • Kubernetes の動作検証
    • 次回以降のネタとして取っておきます
  • 各ツールを並行してインストールした場合の競合確認
    • 今後のネタとして取っておきます
    • 各ツールをインストールする際に、他のツールをアンインストールしておきます

結論

先に結論を書きます。
私個人としては、Rancher Desktop を使用することにしました。
理由としては以下の通りです。

  • Docker Desktop と同等の機能を持ちながら、無料で使用できる
  • Docker CLI が使用できる
    • Docker Desktop と同じ操作性で使用できる
  • Docker Compose が使用できる
    • 別途インストールする必要がなく、Rancher Desktop をセットアップした時点で使用できる
  • VSCode との連携も問題なくできる
  • CLI 操作がメインのため、Rancher Desktop で十分と判断した

よく使用されているコンテナ管理ツール

GUI 操作でコンテナを管理・操作する際には、以下のようなコンテナ管理ツールを使用することが多いです。
これらのメリットは、GUI 上で Docker を操作できることです(CLI も可)。
また、アプリケーションをインストールするだけで Docker を使用できるようになるので、初心者にとってはハードルが低いというメリットもあります。

  • Docker Desktop
  • Rancher Desktop
  • Podman Desktop

もしくは、以下のような方法で Docker を使用することもできます。
以下の方法では、CLI のみで Docker を操作することになります。

  • Multipass + Docker CLI
  • lima + Docker CLI
  • colima + Docker CLI

本記事の対象読者を初心者としているため、インストール・セットアップが簡単であるという点にフォーカスを当て、Docker Desktop、Rancher Desktop、Podman Desktop の 3つのツールを選定し、これらの機能検証を行います。
以下に、それぞれのコンテナ管理ツールの概要をまとめます。

Docker Desktop 概要

項目 詳細
公式サイト https://www.docker.com/ja-jp/products/docker-desktop/
ライセンス体系 Docker Subscription Service Agreement
コスト Team ライセンスの契約が必要(商用利用の場合)
仮想化エンジン HyperKit、Apple Hypervisor Framework (Apple Silicon)
高レベルランタイム dockerd
低レベルランタイム runc
CLI ツール Docker CLI
Docker Compose の利用 可能(docker サブコマンドの compose を使用)
Kubernetes 実行環境 あり

Rancher Desktop 概要

項目 詳細
公式サイト https://rancherdesktop.io
ライセンス体系 Apache License, Version 2.0
コスト 無料
仮想化エンジン Qemu (lima)
高レベルランタイム dockerd
低レベルランタイム runc
CLI ツール Docker CLI, nerdctl
Docker Compose の利用 可能(docker サブコマンドの compose を使用)
Kubernetes 実行環境 あり

Podman Desktop 概要

項目 詳細
公式サイト https://podman-desktop.io
ライセンス体系 Apache License, Version 2.0
コスト 無料
仮想化エンジン QEMU (podman machine)
高レベルランタイム Podman
低レベルランタイム runc(crun)
CLI ツール Podman CLI
Docker Compose の利用 可能 (GUI から docker-compose をインストール)
Docker CLI の利用 可能 (Homebrew で Formulae 版の docker をインストール)
Kubernetes 実行環境 あり

検証項目

上記の 3つのコンテナ管理ツールについて、以下の項目を検証します。
サンプルとして、簡単な TODO アプリケーションを使用します。

  1. 環境構築
    1. GUI ツールインストール
    2. セットアップ
    3. CLI ツールの導入
    4. Docker Compose の導入
  2. 操作性
    1. コンテナイメージ管理
    2. コンテナ管理
    3. ボリューム管理
    4. CLI の操作性

検証環境

本記事における検証環境は以下の通りです。

項目 詳細
PC 14 inch MacBook Pro 2021
OS macOS Ventura 13.5.2
CPU Apple M1 Pro
アーキテクチャ ARM 64-bit
メモリ 32 GB LPDDR5
ストレージ 512 GB SSD
シェル zsh 5.9 (x86_64-apple-darwin23.0)

環境構築

まずは、各コンテナ管理ツールのインストールとセットアップを行います。
本記事では、Homebrew を使用したインストール方法を解説します。

本章では、評価結果を以下のような記号で表現します。

  • : 簡単
  • : 少々複雑
  • ×: 難しい

【Docker Desktop】環境構築

検証結果

【Docker Desktop】 インストール

以下のコマンドを実行して、Docker Desktop をインストールします。

❯ brew install --cask docker

【Docker Desktop】 セットアップ

インストールが完了したら、/Applications/Docker.app を実行して Docker Desktop を起動します。
Docker Desktop を起動すると、以下のような画面が表示されるので Accept をクリックしてライセンスに同意します。
docker_setup_01

ライセンスに同意すると、以下のようにセットアップオプションを選択する画面が表示されるので、デフォルトのまま Finish をクリックします。
これでセットアップは完了です。
docker_setup_02

【Docker Desktop】 CLI ツールの導入

Docker Desktop には Docker CLI が同梱されているため、特に追加でインストールする必要はありません。
以下のコマンドを実行して Docker コマンドが実行できることを確認します。

docker version

【Docker Desktop】 Docker Compose の導入

Docker サブコマンドとして compose が用意されているため、特に追加でインストールする必要はありません。
以下のコマンドを実行して Docker Compose が実行できることを確認します。

docker compose version

【Docker Desktop】 アンインストール

以下のコマンドを実行して、Docker Desktop をアンインストールします。

❯ brew uninstall --cask docker --force

【Rancher Desktop】環境構築

検証結果

【Rancher Desktop】 インストール

以下のコマンドを実行して、Rancher Desktop をインストールします。

❯ brew install --cask rancher

【Rancher Desktop】 セットアップ

インストールが完了したら、/Applications/Rancher Desktop.app を実行して Rancher Desktop を起動します。
Rancher Desktop を起動すると、以下のようにセットアップオプションを選択する画面が表示されるので、デフォルトのまま Accept をクリックします。
rancher_setup_01

次に、以下のようにアクセス権に関する設定画面が表示されるので、デフォルトのまま OK をクリックします。
これでセットアップは完了です。
rancher_setup_02

【Rancher Desktop】 CLI ツールの導入

Rancher Desktop には Docker CLI が同梱されているため、特に追加でインストールする必要はありません。
以下のコマンドを実行して Docker コマンドが実行できることを確認します。

docker version

【Rancher Desktop】 Docker Compose の導入

Docker サブコマンドとして compose が用意されているため、特に追加でインストールする必要はありません。
以下のコマンドを実行して、Docker Compose が実行できることを確認します。

docker compose version

【Rancher Desktop】 アンインストール

以下のコマンドを実行して、Rancher Desktop をアンインストールします。

❯ brew uninstall rancher --force

【Podman Desktop】環境構築

検証結果

【Podman Desktop】 インストール

以下のコマンドを実行して、Podman Desktop をインストールします。

❯ brew install podman-desktop

【Podman Desktop】 セットアップ

インストールが完了したら、/Applications/Podman Desktop.app を実行して Podman Desktop を起動します。
Podman Desktop を起動すると、以下のように Podman CLI をインストールするように促されるので、Install をクリックします。
podman_setup_01

Podman CLI のインストールが完了すると、Initialize and start というボタンが表示されるので、クリックします。
podman_setup_02

Podman is running と表示されればセットアップは完了です。

podman_setup_03

【Podman Desktop】 CLI ツールの導入

Podman Desktop には Podman CLI が同梱されているため、特に追加でインストールする必要はありません。

# Podman CLI のバージョン確認podman version

# Docker CLI を導入した場合docker version

【Podman Desktop】 Docker Compose の導入

Podman Desktop には Docker Compose が同梱されていないため、GUI 上から docker-compose をインストールする必要があります。
以下のように、GUI のフッターにある Compose をクリックすることで、インストールできます。

podman_setup_04

以下のコマンドを実行して、Docker Compose が実行できることを確認します。

# podman compose コマンドを使用する場合podman compose version

【Podman Desktop】 アンインストール

以下のコマンドを実行して、Podman Desktop をアンインストールします。

❯ brew uninstall podman-desktop --force

【環境構築】検証結果

環境構築について、各コンテナ管理ツールの検証結果を以下にまとめます。

項目 Docker Desktop Rancher Desktop Podman Desktop
インストール
セットアップ
Docker CLI のインストール
Docker Compose のインストール
評価理由

と評価した理由は以下の通りです。

  • Podman Desktop
    • セットアップ
      • Podman Desktop は、Initialize がいつまで経っても完了しない場合、再起動が必要になるため
    • Docker CLI のインストール
      • Docker CLI を使用するためにはコマンドを打つ必要があるため
    • Docker Compose のインストール
      • GUI から追加でインストールする必要があるため

上記の結果から、環境構築は Docker Desktop と Rancher Desktop が簡単であることがわかりました。

機能検証

さて、ここからは各コンテナ管理ツールの機能検証を行います。
検証項目は以下の通りです。
なお、「操作性」と 「拡張性」の検証は GUI 操作を想定しています。
CLI の互換性」の検証は、CLI 操作を想定しています。

ビルドサンプルとして、以下の TODO アプリケーションを使用します。

  1. 操作性
    1. コンテナイメージ管理
    2. コンテナ管理
    3. ボリューム管理
  2. CLI 互換性
    1. 管理系コマンド
    2. image 系コマンド
    3. container 系コマンド
    4. レジストリ系コマンド
    5. network 系コマンド
    6. volume 系コマンド
    7. compose 系コマンド

本章では、評価結果を以下のような記号で表現します。

  • : 可能
  • : 一部可能もしくは類似機能あり
  • ×: 不可能

コンテナイメージ管理

各ツールの GUI 操作でコンテナイメージを作成・取得・配布することの難易度を評価します。

【Docker Desktop】コンテナイメージ管理

検証結果
× 【Docker Desktop】コンテナイメージの作成 (build)
  1. コンテナイメージ作成の機能なし
    1. コンテナイメージ作成は Docker CLI を使用する必要あり
【Docker Desktop】コンテナイメージの削除 (rm)
  1. Images タブを選択
  2. 削除したいイメージを選択
  3. Actions のゴミ箱ボタンをクリック

docker_image_rm_01

【Docker Desktop】コンテナイメージの取得 (pull)
  1. Images タブを選択
  2. Hub タブを選択
  3. 取得したいイメージにオンカーソルし Pull をクリック
  4. 完了するとダイアログが表示される

docker_image_pull_01

docker_image_pull_02

【Docker Desktop】リポジトリに送信 (push)
  • Images タブを選択
  • Push したいイメージを選択
  • ケバブメニューから "Push to Hub" をクリック

docker_image_push_01

【Docker Desktop】イメージ詳細情報の取得 (inspect)
  1. Images タブを選択
  2. 詳細情報を確認したいイメージをクリック
  3. 脆弱性スキャンの結果が表示される
    1. 4段階で脆弱性の深刻度を評価
    2. リンクから脆弱性の詳細情報を確認可能

docker_image_inspect_01
docker_image_inspect_02

【Rancher Desktop】コンテナイメージ管理

検証結果
× 【Rancher Desktop】コンテナイメージの作成 (build)
  1. Images タブを選択
  2. Add Image をクリック
  3. Build タブを選択し、イメージ名を入力
  4. Build をクリック
  5. ダイアログから Dockerfile を選択

rantcher_image_build_01

rantcher_image_build_02

【Rancher Desktop】コンテナイメージの削除 (rm)
  1. Images タブを選択
  2. 削除したいイメージを選択
  3. ケバブメニューから Delete をクリック

rantcher_image_rm_01

【Rancher Desktop】コンテナイメージの取得 (pull)
  1. Images タブを選択
  2. Add Image をクリック
  3. Pull タブを選択し、イメージ名を入力
    1. ※ 検証では debian を入力
  4. Pull ボタンをクリック

rantcher_image_pull_01

× 【Rancher Desktop】リポジトリに送信 (push)
  • Images タブを選択
  • Push したいイメージを選択
  • ケバブメニューから Push をクリック

rantcher_image_push_02

【Rancher Desktop】イメージ詳細情報の取得 (inspect)
  1. Images タブを選択
  2. 詳細情報を確認したいイメージを選択
  3. ケバブメニューから Scan をクリック
    1. 4段階で脆弱性の深刻度を評価
    2. リンクから脆弱性の詳細情報を確認可能

rantcher_image_inspect_01

rantcher_image_inspect_02

【Podman Desktop】コンテナイメージ管理

検証結果
【Podman Desktop】コンテナイメージの作成 (build)
  1. Images タブを選択
  2. Build an Image をクリック
  3. ダイアログが表示されるので、以下の項目を入力
    1. Containerfile path: Dockerfile のパス(Finder)
    2. Build context directory: Dockerfile が存在するディレクトリのパス(Finder)
    3. Image Name: イメージ名
  4. Build をクリック

podman_image_build_01

podman_image_build_02

podman_image_build_03

【Podman Desktop】コンテナイメージの削除 (rm)
  1. Images タブを選択
  2. 削除したいイメージを選択
  3. Actions の項目にあるゴミ箱ボタンをクリック

podman_image_rm_01

【Podman Desktop】コンテナイメージの取得 (pull)
  1. Images タブを選択
  2. Add Image をクリック
  3. Pull an image をクリック
  4. イメージ名を入力
    1. ※ 検証では debian を入力
  5. Pull image ボタンをクリック

podman_image_pull_01

podman_image_pull_02

× 【Podman Desktop】リポジトリに送信 (push)
  1. Settings からリポジトリを追加
  2. Images タブを選択
  3. Push したいイメージを選択
  4. ケバブメニューから "Push Image" をクリック
【Podman Desktop】イメージ詳細情報の取得 (inspect)
  1. Images タブを選択
  2. 詳細情報を確認したいイメージを選択
  3. ケバブメニューから Show History をクリック
  4. Inspect タブを選択

podman_image_inspect_01

podman_image_inspect_02

【コンテナイメージ管理】検証結果

コンテナイメージ管理について、各コンテナ管理ツールの検証結果を以下にまとめます。

Docker Desktop Rancher Desktop Podman Desktop
コンテナイメージの作成 × ×
コンテナイメージの削除
コンテナイメージの取得
リポジトリに送信 × ×
イメージ詳細情報の取得
【△】評価理由

と評価した理由は以下の通りです。

  • Docker Desktop
    • コンテナイメージの取得
      • Docker Hub 以外のリポジトリからのイメージ取得がうまくいかないため
    • リポジトリに送信
      • Docker Hub 以外のリポジトリへの Push がうまくいかないため(Artifact Registry など)
    • イメージ詳細情報の取得
      • inspect の内容のような詳細情報は表示されないため
      • 代わりに脆弱性スキャンの機能があるため、 とした
  • Rancher Desktop
    • イメージ詳細情報の取得
      • inspect の内容のような詳細情報は表示されないため
      • 代わりに脆弱性スキャンの機能があるため、 とした

上記の結果から、GUI でのコンテナイメージ管理は Podman Desktop が優秀であることがわかりました。

コンテナ管理

各ツールの GUI 操作でコンテナを作成・起動・停止・削除することの難易度を評価します。

【Docker Desktop】コンテナ管理

検証結果
【Docker Desktop】コンテナの作成 (run)
  1. Images タブを選択
  2. コンテナを作成したいイメージを選択
  3. Actions の項目にある再生ボタンをクリック
  4. ダイアログが表示されるので、必要な設定を行う
    1. Container name: コンテナ名を指定
    2. Ports: ポートフォワーディングを設定
    3. Volumes: ボリュームを設定
    4. Environment Variables: 環境変数を設定
  5. 完了するとログが表示される

docker_container_create_01

docker_container_create_02

docker_container_create_03

【Docker Desktop】コンテナの停止 (stop)
  1. Containers タブを選択
  2. 停止したいコンテナを選択
  3. Actions の項目にある停止ボタンをクリック

docker_container_stop_01

【Docker Desktop】コンテナの削除 (rm)
  1. Containers タブを選択
  2. 削除したいコンテナを選択
  3. Actions の項目にあるゴミ箱ボタンをクリック

docker_container_rm_01

【Rancher Desktop】コンテナ管理

検証結果

【Podman Desktop】コンテナ管理

検証結果
【Podman Desktop】コンテナの作成 (run)
  1. Images タブを選択
  2. コンテナを作成したいイメージを選択
  3. ACTIONS の項目にある再生ボタンをクリック
  4. ダイアログが表示されるので、必要な設定を行う
    1. Container name: コンテナ名を指定
    2. Entrypoint: コンテナ起動時に実行するコマンドを指定
    3. Command: コンテナ起動時に実行するコマンドを指定
    4. Volumes: ボリュームを設定
    5. Port mappings: ポートフォワーディングを設定
  5. Start Container をクリック

podman_container_create_01

podman_container_create_02

【Podman Desktop】コンテナの停止 (stop)
  1. Containers タブを選択
  2. 停止したいコンテナを選択
  3. Actions の項目にある停止ボタンをクリック

podman_container_stop_01

【Podman Desktop】コンテナの削除 (rm)
  1. Containers タブを選択
  2. 削除したいコンテナを選択
  3. Actions の項目にあるゴミ箱ボタンをクリック

podman_container_rm_01

【コンテナ管理】検証結果

コンテナ管理について、各コンテナ管理ツールの検証結果を以下にまとめます。

Docker Desktop Rancher Desktop Podman Desktop
コンテナの作成 ×
コンテナの起動 ×
コンテナの停止 ×
コンテナの削除 ×

上記の結果から、GUI でのコンテナ管理は Docker Desktop と Podman Desktop が優秀であることがわかりました。

ボリューム管理

各ツールの GUI 操作でボリュームを作成・削除することの難易度を評価します。

【Docker Desktop】ボリューム管理

検証結果
【Docker Desktop】ボリュームの作成 (create)
  1. Volumes タブを選択
  2. Create a volume をクリック
  3. ボリューム名を入力して Create をクリック

docker_volume_create_01

docker_volume_create_02

docker_volume_create_03

【Docker Desktop】ボリュームの削除 (rm)
  1. Volumes タブを選択
  2. 削除したいボリュームを選択
  3. Actions の項目にあるゴミ箱ボタンをクリック

docker_volume_rm_01

【Rancher Desktop】ボリューム管理

検証結果

【Podman Desktop】ボリューム管理

検証結果
【Podman Desktop】ボリュームの作成 (create)
  1. Volumes タブを選択
  2. Create a volume をクリック
  3. ボリューム名を入力して Create をクリック

podman_volume_create_01

podman_volume_create_02

【Podman Desktop】ボリュームの削除 (rm)
  1. Volumes タブを選択
  2. 削除したいボリュームを選択
  3. Actions の項目にあるゴミ箱ボタンをクリック

podman_volume_rm_01

【ボリューム管理】検証結果

ボリューム管理について、各コンテナ管理ツールの検証結果を以下にまとめます。

ボリューム管理 Docker Desktop Rancher Desktop Podman Desktop
ボリュームの作成 ×
ボリュームの削除 ×

上記の結果から、GUI でのボリューム管理は Docker Desktop と Podman Desktop が優秀であることがわかりました。

CLI 互換性

本章では、各ツールに付属する CLI の機能を検証します。
代表的なコマンドを用いて、各ツールの操作性を比較し、もっとも使いやすい CLI を選定します。

CLI の機能検証に使用するコマンド

今回の検証では、以下のコマンドを使用します。
Docker の代表的なコマンドが各ツールで問題なく使用できるかを検証します。

検証コマンド一覧
  • 管理系コマンド
    • docker version
    • docker help
    • docker info
  • image 系コマンド
    • docker image build
    • docker image ls
    • docker image inspect
    • docker image history
    • docker image rm
    • docker image save
    • docker image tag
  • Container 系コマンド
    • docker container build
    • docker container start
    • docker container commit
    • docker container pause
    • docker container unpause
    • docker container stop
    • docker container restart
    • docker container run
    • docker container exec
    • docker container kill
    • docker container rm
    • docker container stats
    • docker container attach
    • docker container logs
  • レジストリ系コマンド
    • docker image pull
    • docker image push
    • docker serch
  • network 系コマンド
    • docker network ls
    • docker network create
    • docker network rm
  • volume 系コマンド
    • docker volume ls
    • docker volume create
    • docker volume rm
    • docker volume inspect
  • compose 系コマンド
    • docker compose build
    • docker compose up
    • docker compose down
    • docker compose start
    • docker compose stop
    • docker compose ps
    • docker compose exec

管理系コマンド

検証結果
docker version
【○】Docker Desktop
docker version
Client: Docker Engine - Community
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.21.3
 Git commit:        afdd53b4e3
 Built:             Thu Oct 26 07:06:42 2023
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.25.0 (126437)
 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:     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
【○】Rancher Desktop
docker version
Client:
 Version:           24.0.2-rd
 API version:       1.42 (downgraded from 1.43)
 Go version:        go1.20.4
 Git commit:        e63f5fa
 Built:             Fri May 26 16:40:56 2023
 OS/Arch:           darwin/arm64
 Context:           rancher-desktop

Server:
 Engine:
  Version:          23.0.6
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.20.4
  Git commit:       9dbdbd4b6d7681bd18c897a6ba0376073c2a72ff
  Built:            Fri May 12 13:54:36 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          v1.7.0
  GitCommit:        1fbd70374134b891f97ce19c70b6e50c7b9f4e0d
 runc:
  Version:          1.1.7
  GitCommit:        860f061b76bb4fc671f0f9e900f7d80ff93d4eb7
 docker-init:
  Version:          0.19.0
  GitCommit:
【○】Podman Desktop
podman version
Client:       Podman Engine
Version:      4.6.2
API Version:  4.6.2
Go Version:   go1.21.0
Git Commit:   5db42e86862ef42c59304c38aa583732fd80f178
Built:        Tue Aug 29 04:16:42 2023
OS/Arch:      darwin/arm64

Server:       Podman Engine
Version:      4.7.0
API Version:  4.7.0
Go Version:   go1.20.8
Built:        Thu Sep 28 03:24:25 2023
OS/Arch:      linux/arm64
docker help
【○】Docker Desktop
docker help
Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Common Commands:
  run         Create and run a new container from an image
  exec        Execute a command in a running container
  ps          List containers
  build       Build an image from a Dockerfile
  pull        Download an image from a registry
  push        Upload an image to a registry
  .
  .
  .
【○】Rancher Desktop
docker container run --help
Usage:  docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

Create and run a new container from an image

Aliases:
  docker container run, docker run

Options:
      ...
【○】Podman Desktop
podman container run --help
Run a command in a new container

Description:
  Runs a command in a new container from the given image

Usage:
  podman container run [options] IMAGE [COMMAND [ARG...]]

Examples:
  podman container run imageID ls -alF /etc
  podman container run --network=host imageID dnf -y install java
  podman container run --volume /var/hostdir:/var/ctrdir -i -t fedora /bin/bash

Options:
    ...
docker info
【○】Docker Desktop
docker info
Client: Docker Engine - Community
 Version:    24.0.7
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.2-desktop.5
    Path:     /Users/user.name/.docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.23.0-desktop.1
    Path:     /Users/user.name/.docker/cli-plugins/docker-compose
【○】Rancher Desktop
docker info
Client:
 Version:    24.0.2-rd
 Context:    rancher-desktop
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.11.0
    Path:     /Users/user.name/.docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.19.0
    Path:     /Users/user.name/.docker/cli-plugins/docker-compose
【○】Podman Desktop
podman info
host:
  arch: arm64
  buildahVersion: 1.32.0
  cgroupControllers:
  - cpu
  - io
  - memory
  - pids
  cgroupManager: systemd
  cgroupVersion: v2

image 系コマンド

検証結果
docker image build
【○】Docker Desktop
docker image build . -t usernametest/docker-desktop

[+] Building 12.5s (14/14) FINISHED                                                                                 docker:desktop-linux
【○】Rancher Desktop
docker image build -t getting-started .
[+] Building 22.0s (12/12) FINISHED                                docker:rancher-desktop
【○】Podman Desktop
podman image build -t podman-test .
STEP 1/7: FROM node:14-alpine
STEP 2/7: RUN apk add --no-cache python3 g++ make
Successfully tagged localhost/podman-test:latest
54e3659ef30b11be60605c59bd3b19fd8d897c178ddd8841af6d4f8d316c98ed
docker image ls
【○】Docker Desktop
docker image ls
REPOSITORY                        TAG       IMAGE ID       CREATED              SIZE
usernametest/docker-desktop   latest    74ecde28e831   About a minute ago   485MB
【○】Rancher Desktop
docker image ls
REPOSITORY        TAG      IMAGE ID       CREATED        SIZE
getting-started   latest   bb0e26ee433e   42 hours ago   485MB
【○】Podman Desktop
podman image ls
REPOSITORY                     TAG         IMAGE ID      CREATED       SIZE
docker.io/library/podman-test  latest      abe2e1222fdd  16 hours ago  501 MB
docker.io/library/node         14-alpine   d561716d42b6  7 months ago  123 MB
docker image inspect
【○】Docker Desktop
docker image inspect usernametest/docker-desktop
[
    {
        "Id": "sha256:",
        "RepoTags": [
            "usernametest/docker-desktop:latest"
        ],
    }
]
【○】Rancher Desktop
docker image inspect getting-started
[
    {
        "Id": "hoge",
        "RepoTags": [
            "getting-started:latest"
        ],
    }
]
【○】Podman Desktop
podman image inspect podman-test
[
     {
          "Id": "hoge",
          "Digest": "sha256:d652031168f5933f1f8865c11bc7a7340208a92a41b49303934d764d6609331a",
          "RepoTags": [
               "docker.io/library/podman-test:latest"
          ],
     }
]
docker image history
【○】Docker Desktop
docker image history usernametest/docker-desktop
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
74ecde28e831   5 minutes ago   EXPOSE map[3000/tcp:{}]                         0B        buildkit.dockerfile.v0
<missing>      5 minutes ago   CMD ["node" "src/index.js"]                     0B        buildkit.dockerfile.v0
<missing>      5 minutes ago   RUN /bin/sh -c yarn install --production # b…   83MB      buildkit.dockerfile.v0
<missing>      5 minutes ago   COPY . . # buildkit                             4.59MB    buildkit.dockerfile.v0
<missing>      5 minutes ago   WORKDIR /app                                    0B        buildkit.dockerfile.v0
<missing>      5 minutes ago   RUN /bin/sh -c apk add --no-cache python3 g+…   279MB     buildkit.dockerfile.v0
.
.
.
【○】Rancher Desktop
docker image history getting-started
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
bb0e26ee433e   42 hours ago   EXPOSE map[3000/tcp:{}]                         0B        buildkit.dockerfile.v0
<missing>      42 hours ago   CMD ["node" "src/index.js"]                     0B        buildkit.dockerfile.v0
<missing>      42 hours ago   RUN /bin/sh -c yarn install --production # b…   83MB      buildkit.dockerfile.v0
<missing>      42 hours ago   COPY . . # buildkit                             4.59MB    buildkit.dockerfile.v0
<missing>      42 hours ago   WORKDIR /app                                    0B        buildkit.dockerfile.v0
<missing>      42 hours ago   RUN /bin/sh -c apk add --no-cache python3 g+…   279MB     buildkit.dockerfile.v0
.
.
.
【○】Podman Desktop
podman image history podman-test
ID            CREATED       CREATED BY                                     SIZE        COMMENT
b7d1a4fd781a  16 hours ago  /bin/sh -c #(nop) EXPOSE 3000                  0B          FROM 0a6594b2a658
<missing>     16 hours ago  /bin/sh -c #(nop) CMD ["node", "src/index....  0B          FROM b7d1a4fd781a
<missing>     16 hours ago  /bin/sh -c yarn install --production           90.6MB      FROM 9ed8a023536c
9ed8a023536c  16 hours ago  /bin/sh -c #(nop) COPY dir:b6fd2753c97459d...  4.63MB      FROM a34fc3f9bbf9
c554c2626c53  16 hours ago  /bin/sh -c #(nop) WORKDIR /app                 0B          FROM c554c2626c53
<missing>     16 hours ago  /bin/sh -c apk add --no-cache python3 g++ ...  282MB       FROM docker.io/library/node:14-alpine
.
.
.
docker image rm
【○】Docker Desktop
docker image build -t rm-test .docker image rm rm-test
Untagged: rm-test:latest

❯ docker image ls | grep rm-test
# 出力なし
【○】Rancher Desktop
docker image build -t rm-test .docker image rmdocker image rm rm-test
Untagged: rm-test:latest

❯ docker image ls | grep rm
# 出力なし
【○】Podman Desktop
podman image build -t rm-test .podman image rm image-rm-test
Untagged: localhost/image-rm-test:latest
Deleted: cd193047baed1506a6fd72e698425d6fe0c847d8696978ebbecdaf00f5a428b4
Deleted: d918bc902c617d6fefd7075ab8c8c0b3b8db31ac16b718d18ca5abec1c0d77ef
Deleted: 376557ac5cca2d2a845037f89e3bd1bd3bce2f61433281a87425ab07d7543b95
Deleted: 5b3cbf1337135288d78d0afb37a188dfc87dae9603dc99f530891aabab583024
Deleted: afc7ee83f63492b25b2a4b0dd31bdc16adbb6d1dc98fcf0009824dc5522bfa0f
Deleted: cba47fbab045e1604671495e20f06336e69e9505e740f175fe05fb73a9109d95

❯ podman image ls | grep rm
# 出力なし
docker image save
【○】Docker Desktop
docker image save usernametest/docker-desktop | gzip > docker-desktop-test.tar.gz

❯ ls | grep tar.gz
docker-desktop-test.tar.gz
【○】Rancher Desktop
docker image save getting-started | gzip > getting-started.tar.gz

❯ ls | grep tar.gz
getting-started.tar.gz
【○】Podman Desktop
podman image save podman-test | gzip > podman-test.tar.gz

❯ ls | grep tar.gz
podman-test.tar.gz
docker image tag
【○】Docker Desktop
docker image tag usernametest/docker-desktop:latest \
usernametest/docker-desktop:docker-desktop

❯ docker image ls
REPOSITORY                        TAG              IMAGE ID       CREATED         SIZE
usernametest/docker-desktop   docker-desktop   74ecde28e831   9 minutes ago   485MB
usernametest/docker-desktop   latest           74ecde28e831   9 minutes ago   485MB
【○】Rancher Desktop
docker tag getting-started:latest getting-started:test

❯ docker image ls
REPOSITORY        TAG      IMAGE ID       CREATED        SIZE
getting-started   latest   bb0e26ee433e   43 hours ago   485MB
getting-started   test     bb0e26ee433e   43 hours ago   485MB
【○】Podman Desktop
podman tag podman-test:latest podman-test:tag-test

❯ podman image ls
REPOSITORY                     TAG         IMAGE ID      CREATED       SIZE
docker.io/library/podman-test  latest      abe2e1222fdd  16 hours ago  501 MB
localhost/podman-test          tag-test    abe2e1222fdd  16 hours ago  501 MB
docker.io/library/node         14-alpine   d561716d42b6  7 months ago  123 MB

container 系コマンド

検証結果
docker container create
【○】Docker Desktop
docker container create --name docker-desktop-test \
-p 3000:3000 usernametest/docker-desktop

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED              STATUS    PORTS     NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   About a minute ago   Created             docker-desktop-test
【○】Rancher Desktop
docker container create -p 3000:3000 getting-started
d676820b8752eb653a1ab430b5e5347b423009252d6793401210cd43037d0d32

❯ docker ps
CONTAINER ID   IMAGE ...             STATUS ...
d676820b8752   getting-started ...   CREATED ...
【○】Podman Desktop
podman container create --name podman-test -p 3000:3000 podman-test

❯ podman container ls
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS         PORTS                   NAMES
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  41 minutes ago  Up 41 minutes  0.0.0.0:3000->3000/tcp  podman-test
docker container start
【○】Docker Desktop
docker container start docker-desktop-test
docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS          PORTS                    NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   6 minutes ago   Up 43 seconds   0.0.0.0:3000->3000/tcp   docker-desktop-test
【○】Rancher Desktop
docker container start 2aa6376b2344
2aa6376b2344

❯ docker ps -a
CONTAINER ID   IMAGE ...             STATUS ...
2aa6376b2344   getting-started ...   Up 5 seconds ...
【○】Podman Desktop
podman container start 5c8675f5c8fd

❯ podman container ls --all
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS        PORTS                   NAMES
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  14 minutes ago  Up 9 seconds  0.0.0.0:3000->3000/tcp  podman-test
docker container commit
【○】Docker Desktop
docker container commit docker-desktop-test commit-test

❯ docker image ls
REPOSITORY                        TAG              IMAGE ID       CREATED          SIZE
commit-test                       latest           5239c575f956   32 seconds ago   485MB
usernametest/docker-desktop   docker-desktop   74ecde28e831   18 minutes ago   485MB
usernametest/docker-desktop   latest           74ecde28e831   18 minutes ago   485MB
【○】Rancher Desktop
docker container commit rancher-desktop-test commit-test

❯ docker image ls
REPOSITORY                         TAG              IMAGE ID       CREATED          SIZE
commit-test                        latest           5239c575f956   32 seconds ago   485MB
usernametest/rancher-desktop   docker-desktop   74ecde28e831   18 minutes ago   485MB
usernametest/rancher-desktop   latest           74ecde28e831   18 minutes ago   485MB
【○】Podman Desktop
podman container commit c94c277b63db commit-test

❯ podman image ls
REPOSITORY              TAG         IMAGE ID      CREATED         SIZE
localhost/commit-test   latest      7d30ea0da0c7  34 seconds ago  501 MB
localhost/podman-test   latest      54e3659ef30b  49 minutes ago  501 MB 
docker container pause
【○】Docker Desktop
docker container pause docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                  PORTS                    NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   9 minutes ago   Up 3 minutes (Paused)   0.0.0.0:3000->3000/tcp   docker-desktop-test
【○】Rancher Desktop
docker container pause d676820b8752
d676820b8752

❯ docker container ls
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS
d676820b8752   getting-started   "docker-entrypoint.s…"   23 hours ago   Up 23 hours (Paused)
【○】Podman Desktop
podman container pause 5c8675f5c8fd

❯ podman container ls --all
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS      PORTS                   NAMES
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  16 minutes ago  Paused      0.0.0.0:3000->3000/tcp  podman-test 
docker container unpause
【○】Docker Desktop
docker container unpause docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS         PORTS                    NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   10 minutes ago   Up 4 minutes   0.0.0.0:3000->3000/tcp   docker-desktop-test
【○】Rancher Desktop
docker container unpause d676820b8752
d676820b8752

❯ docker container ls
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS
d676820b8752   getting-started   "docker-entrypoint.s…"   23 hours ago   Up 23 hours 
【○】Podman Desktop
podman container unpause 5c8675f5c8fd

❯ podman container ls --all
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS        PORTS                   NAMES
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  18 minutes ago  Up 4 minutes  0.0.0.0:3000->3000/tcp  podman-test
docker container stop
【○】Docker Desktop
docker container stop docker-desktop-test
docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED         STATUS                      PORTS     NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   5 minutes ago   Exited (0) 37 seconds ago             docker-desktop-test
【○】Rancher Desktop
docker container stop 2aa6376b2344
2aa6376b2344

❯ docker ps -a
CONTAINER ID   IMAGE ...             STATUS ...
2aa6376b2344   getting-started ...   Exited (0) 6 seconds ago ...
【○】Podman Desktop
podman container stop 5c8675f5c8fd

❯ podman container ls --all
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS                     PORTS                   NAMES
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  11 minutes ago  Exited (0) 11 seconds ago  0.0.0.0:3000->3000/tcp  podman-test
docker container restart
【○】Docker Desktop
docker container restart docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS         PORTS                    NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   12 minutes ago   Up 3 seconds   0.0.0.0:3000->3000/tcp   docker-desktop-test
【○】Rancher Desktop
docker container restart d676820b8752
d676820b8752

❯ docker container ls
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS
d676820b8752   getting-started   "docker-entrypoint.s…"   23 hours ago   Up 23 seconds
【○】Podman Desktop
podman container restart 5c8675f5c8fd

❯ podman container ls --all
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS             PORTS                   NAMES
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  20 minutes ago  Up About a minute  0.0.0.0:3000->3000/tcp  podman-test
docker container run
【○】Docker Desktop
docker container run -dp 3000:3000 docker-desktop-test
2aa6376b2344effe74bf715da6949caade7956de398db73d38d18785e31acbf7

❯ docker container ps
CONTAINER ID   IMAGE ...                 STATUS ...
2aa6376b2344   docker-desktop-test ...   Up 1 minute ago ...
【○】Rancher Desktop
docker container run -dp 3000:3000 getting-started
2aa6376b2344effe74bf715da6949caade7956de398db73d38d18785e31acbf7

❯ docker container ps
CONTAINER ID   IMAGE ...             STATUS ...
2aa6376b2344   getting-started ...   Up 1 minute ago ...
【○】Podman Desktop
podman container run -dp 3000:3000 getting-started
c6cb44349afcc72741a89f8574efdf3a792becb32636b89ef91843d6d3983f57

❯ podman container ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                       NAMES
c6cb44349afc   getting-started              "docker-entrypoint.s…"   20 seconds ago   Up 19 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   pedantic_sutherland
docker container exec
【○】Docker Desktop
docker container exec -it docker-desktop-test /bin/sh
/app # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.17.3
PRETTY_NAME="Alpine Linux v3.17"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
【○】Rancher Desktop
docker container exec -i -t d676820b8752 /bin/sh
/app # ls
Dockerfile    node_modules  package.json  spec          src           yarn.lock

/app # uname -a
Linux d676820b8752 6.1.30-0-virt #1-Alpine SMP Fri, 26 May 2023 06:53:59 +0000 aarch64 Linux

/app # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.17.3
PRETTY_NAME="Alpine Linux v3.17"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"
【○】Podman Desktop
podman container exec -it 5c8675f5c8fd /bin/sh
/app # ls -l
total 164
-rw-r--r--    1 root     root           183 Oct 16 06:34 Dockerfile
drwxr-xr-x  167 root     root          8192 Oct 26 02:02 node_modules
-rw-r--r--    1 root     root           645 Oct 16 06:27 package.json
drwxr-xr-x    4 root     root            39 Oct 16 06:27 spec
drwxr-xr-x    5 root     root            69 Oct 16 06:27 src
-rw-r--r--    1 root     root        147266 Oct 16 06:27 yarn.lock

/app # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.17.3
PRETTY_NAME="Alpine Linux v3.17"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://gitlab.alpinelinux.org/alpine/aports/-/issues"

/app # uname -a
Linux 5c8675f5c8fd 6.5.6-200.fc38.aarch64 #1 SMP PREEMPT_DYNAMIC Fri Oct  6 19:34:05 UTC
 2023 aarch64 Linux
docker container kill
【○】Docker Desktop
docker container kill docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE                             COMMAND                  CREATED          STATUS                       PORTS     NAMES
87427ca64fb4   usernametest/docker-desktop   "docker-entrypoint.s…"   14 minutes ago   Exited (137) 6 seconds ago             docker-desktop-test
【○】Rancher Desktop
docker kill d676820b8752
d676820b8752

❯ docker container ls --all
CONTAINER ID   IMAGE             COMMAND                  CREATED        STATUS
d676820b8752   getting-started   "docker-entrypoint.s…"   23 hours ago   Exited (137) 14 seconds ago
【○】Podman Desktop
podman container kill 5c8675f5c8fd

❯ podman container ls --all
CONTAINER ID  IMAGE                         COMMAND            CREATED         STATUS
5c8675f5c8fd  localhost/podman-test:latest  node src/index.js  25 minutes ago  Exited (137) 1 second ago
docker container rm
【○】Docker Desktop
docker container rm docker-desktop-test

❯ docker container ls -all
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
【○】Rancher Desktop
docker container rm 2aa6376b2344
2aa6376b2344

❯ docker ps -a | grep getting-started
# 出力なし
【○】Podman Desktop
podman container rm podman-test
podman-test

❯ podman ps -a | grep podman-test
# 出力なし
docker container stats
【○】Docker Desktop
docker stats ubuntu
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
5352c7465672   ubuntu    0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
【○】Rancher Desktop
docker stats d676820b8752
CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O   PIDS
d676820b8752   sweet_bassi   4.12%     11.64MiB / 5.781GiB   0.20%     806B / 0B   0B / 0B     11
【○】Podman Desktop
podman stats d676820b8752
ID            NAME         CPU %       MEM USAGE / LIMIT  MEM %       NET IO        BLOCK IO    PIDS        CPU TIME    AVG CPU %
5c8675f5c8fd  podman-test  0.00%       17.37MB / 1.98GB   0.88%       1.5kB / 656B  0B / 0B     11          134.306ms   0.83%
docker container attach
【○】Docker Desktop
docker container run -it -d --name ubuntu ubuntu:latest

❯ docker container attach ubuntu
root@201740cffaf2:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
【×】Rancher Desktop
docker container attach d676820b8752
# フリーズして動かず
【○】Podman Desktop
podman container attach ubuntu
root@3c6634668ae2:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
docker container logs
【○】Docker Desktop
docker container logs ubuntu
root@201740cffaf2:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
.
.
.
【○】Rancher Desktop
docker container logs d676820b8752
Using sqlite database at /etc/todos/todo.db
Listening on port 3000
【○】Podman Desktop
podman container logs 5c8675f5c8fd
Using sqlite database at /etc/todos/todo.db
Listening on port 3000

レジストリ系コマンド

検証結果
docker image pull
【○】Docker Desktop

※ 先に Podman Desktop の検証を行なっていたため、Podman Desktop のタグがついたイメージを pull しています。

❯ gcloud auth configure-docker asia-northeast1-docker.pkg.dev

❯ docker image pull \
asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/\
docker-desktop:latest
【○】Rancher Desktop
docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
bfbe77e41a78: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest


❯ docker container run --name ubuntu-test -it ubuntu
root@e792dc416925:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
【○】Podman Desktop
podman image pull ubuntu
Resolved "ubuntu" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/ubuntu:latest...
Getting image source signatures
Copying blob sha256:bfbe77e41a78ee38147c5761aa8bc896d9f6e1e648b23468f294065ffe03c107
Copying config sha256:e343402cadef796b4f12c2ee20b7346978a42a8d95516619c36c6397c4b0c766
Writing manifest to image destination
e343402cadef796b4f12c2ee20b7346978a42a8d95516619c36c6397c4b0c766


❯ podman container run --name ubuntu -it ubuntu
root@d58ce5f47271:/# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
docker image push
【○】Docker Desktop
docker image tag \
asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/\
podman-desktop:latest \
asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/\
docker-desktop:latest

❯ docker image push \
asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/\
docker-desktop:latest
【○】Rancher Desktop
docker tag getting-started:latest asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/rancher-desktop:latest

❯ docker push asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/rancher-desktop:latest
The push refers to repository 
[asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/rancher-desktop]
77cd906617c4: Layer already exists
7d731a2c8cd2: Layer already exists
5b389205719a: Layer already exists
7ac816694741: Layer already exists
23350eaaee74: Layer already exists
df8e43203da9: Layer already exists
92a6bff90f79: Layer already exists
26cbea5cba74: Layer already exists
latest: digest: sha256:cf09144325eacf027f3608a24a3e98f343fae1a6f5b447ab066d1dc70c10bc98 size: 1999
【○】Podman Desktop
podman image pull asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/rancher-desktop

❯ podman image tag asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/rancher-desktop:latest asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/podman-desktop:latest

❯ podman image push asia-northeast1-docker.pkg.dev/ca-shibuya-test/docker-verification/podman-desktop:latest
Getting image source signatures
Copying blob sha256:5b389205719a256b66cfac9eb7697ad555d697028f6b356add218475c2c9ddf6
Copying blob sha256:26cbea5cba74143fbe6f584f5fc5321543155aedc4a434fcaa63b643877b5a74
Copying blob sha256:92a6bff90f79b0038c236e530dfe1c6621a66080b4bb0db7d0f844ad6b22c06a
Copying blob sha256:df8e43203da902781f1c166542222b886d19d02cf150aa6f6d89c2f99a1b6798
Copying blob sha256:23350eaaee74eb7489cf166e7ea3f4234c74eb57a8f6757cb9fdcab8352eaaa0
Copying blob sha256:7ac8166947416933ca0d44d4fe59706add0eeca98772d10c85cb1845cbe8ea01
Copying blob sha256:7d731a2c8cd222eb1715afe9eb6f8f655f9de38c060efe91115f0bf179c2edb2
Copying blob sha256:77cd906617c42f1e148f78bf31088dc0f041508c2f405c9e62c218a9691c0b90
Copying config sha256:bb0e26ee433e37da00611abde4c004d96b521e75f408af9b75d6bfcdca2b5eda
Writing manifest to image destination
docker search
【○】Docker Desktop
docker search ubuntu
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   16518     [OK]
.
.
.
【○】Rancher Desktop
docker search ubuntu
NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   16487     [OK]
.
.
.
【○】Podman Desktop
podman search ubuntu
NAME                                      DESCRIPTION
docker.io/library/ubuntu                  Ubuntu is a Debian-based Linux operating sys...
docker.io/library/websphere-liberty       WebSphere Liberty multi-architecture images...
.
.
.

network 系コマンド

検証結果
docker network ls
【○】Docker Desktop
docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
7ce366f0c8b2   bridge    bridge    local
023b1573260d   host      host      local
58ac2e55c38f   none      null      local
【○】Rancher Desktop
docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
fc8a32e7ac0e   bridge    bridge    local
97ee017ee9e5   host      host      local
4ca2fe75d946   none      null      local
【○】Podman Desktop
podman network ls
NETWORK ID    NAME        DRIVER
2f259bab93aa  podman      bridge
docker network create
【○】Docker Desktop
docker network create --subnet 192.168.1.0/24 test-network

❯ docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
7ce366f0c8b2   bridge         bridge    local
023b1573260d   host           host      local
58ac2e55c38f   none           null      local
f4413c431706   test-network   bridge    local
【○】Rancher Desktop
docker network create --subnet 192.168.1.0/24 test-network
5b02d7167db81dc74ac23bc633d9e911725cf1a189b67076221c9ebfb53e4a99

❯ docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
fc8a32e7ac0e   bridge         bridge    local
97ee017ee9e5   host           host      local
4ca2fe75d946   none           null      local
5b02d7167db8   test-network   bridge    local
【○】Podman Desktop
podman network create --subnet 192.168.1.0/24 test-network

❯ podman network ls
NETWORK ID    NAME          DRIVER
2f259bab93aa  podman        bridge
8485fd90b5b9  test-network  bridge
docker network rm
【○】Docker Desktop
docker network rm test-network

❯ docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
7ce366f0c8b2   bridge    bridge    local
023b1573260d   host      host      local
58ac2e55c38f   none      null      local
【○】Rancher Desktop
docker network rm test-network
test-network

❯ docker network ls
NETWORK ID     NAME           DRIVER    SCOPE
fc8a32e7ac0e   bridge         bridge    local
97ee017ee9e5   host           host      local
4ca2fe75d946   none           null      local
【○】Podman Desktop
podman network rm test-network

❯ podman network ls
NETWORK ID    NAME        DRIVER
2f259bab93aa  podman      bridge
docker network inspect
【○】Docker Desktop
docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "7ce366f0c8b22a6d7a59c09cdbfbee7f5c1ca52942f45be958df5d1757f0462b",
        "Created": "2023-10-27T07:51:00.7122515Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
    }
]
【○】Rancher Desktop
docker network inspect fc8a32e7ac0e
[
    {
        "Name": "bridge",
        "Id": "fc8a32e7ac0e7da4a8ad75b7f4d5e6ba517226f809fc01c9301e52fe949e4474",
        "Created": "2023-10-12T07:22:02.011294261Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
    }
]
【○】Podman Desktop
podman network inspect podman
[
     {
          "name": "podman",
          "id": "2f259bab93aaaaa2542ba43ef33eb990d0999ee1b9924b557b7be53c0b7a1bb9",
          "driver": "bridge",
          "network_interface": "podman0",
          "created": "2023-10-26T14:48:00.104742308+09:00",
          "subnets": [
               {
                    "subnet": "10.88.0.0/16",
                    "gateway": "10.88.0.1"
               }
          ],
          "ipv6_enabled": false,
          "internal": false,
          "dns_enabled": false,
          "ipam_options": {
               "driver": "host-local"
          }
     }
]

volume 系コマンド

検証結果
docker volume ls
【○】Docker Desktop
docker volume ls
DRIVER    VOLUME NAME
【○】Rancher Desktop
docker volume ls
DRIVER    VOLUME NAME
【○】Podman Desktop
podman volume ls
DRIVER      VOLUME NAME
local       podman-test-volume
docker volume create
【○】Docker Desktop
docker volume create test-volume

❯ docker volume ls
DRIVER    VOLUME NAME
local     test-volume
【○】Rancher Desktop
docker volume create test-volume
test-volume

❯ docker volume ls
DRIVER    VOLUME NAME
local     test-volume
【○】Podman Desktop
podman volume ls
DRIVER      VOLUME NAME
local       cli-test-volume
local       podman-test-volume
docker volume rm
【○】Docker Desktop
docker volume rm test-volume

❯ docker volume ls
DRIVER      VOLUME NAME
【○】Rancher Desktop
docker volume rm test-volume
test-volume

❯ docker volume ls
DRIVER    VOLUME NAME
【○】Podman Desktop
podman volume rm podman-test-volume

❯ podman volume ls
DRIVER      VOLUME NAME
local       cli-test-volume
docker volume inspect
【○】Docker Desktop
docker volume inspect test-volume
[
    {
        "CreatedAt": "2023-10-27T10:21:13Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-volume/_data",
        "Name": "test-volume",
        "Options": null,
        "Scope": "local"
    }
]
【○】Rancher Desktop
docker volume inspect test-volume

[
    {
        "CreatedAt": "2023-10-18T08:46:24Z",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test-volume/_data",
        "Name": "test-volume",
        "Options": null,
        "Scope": "local"
    }
]
【○】Podman Desktop
podman volume inspect cli-test-volume
[
     {
          "Name": "cli-test-volume",
          "Driver": "local",
          "Mountpoint": "/var/home/core/.local/share/containers/storage/volumes/cli-test-volume/_data",
          "CreatedAt": "2023-10-26T14:51:27.272629201+09:00",
          "Labels": {},
          "Scope": "local",
          "Options": {},
          "MountCount": 0,
          "NeedsCopyUp": true,
          "NeedsChown": true,
          "LockNumber": 0
     }
]

compose 系コマンド

検証結果
docker compose build
【○】Docker Desktop
docker compose build

[+] Building 8.7s (14/14) FINISHED                                                                                  docker:desktop-linux
【○】Rancher Desktop
docker compose build
[+] Building 4.8s (12/12) FINISHED
【○】Podman Desktop
podman compose build
>>>> Executing external compose provider "/usr/local/bin/docker-compose". Please refer to the documentation for 
details. <<<<

Sending build context to Docker daemon     556B
Successfully tagged docker.io/library/docker-compose-sample-app:latest
1ef12e6af4c8c042eab7e3ba1d71aeb5d553c1d4a85082c7412f4bdf81ff64d9
Successfully built 1ef12e6af4c8
Successfully tagged docker-compose-sample-app
docker compose up
【○】Docker Desktop
docker compose up
[+] Building 0.0s (0/0)                                              docker:desktop-linux
[+] Running 2/0
 ✔ Network docker-compose-sample_default  Created                                 0.0s
 ✔ Container docker-compose-sample-app-1  Created                                 0.0s
Attaching to docker-compose-sample-app-1
docker-compose-sample-app-1  | [27-Oct-2023 10:24:57] NOTICE: fpm is running, pid 1
docker-compose-sample-app-1  | [27-Oct-2023 10:24:57] NOTICE: ready to handle connections
【○】Rancher Desktop
docker compose up
[+] Running 2/0
 ✔ Network docker-compose-sample_default  Created                                    0.0s
 ✔ Container docker-compose-sample-app-1  Created                                    0.0s
Attaching to docker-compose-sample-app-1
docker-compose-sample-app-1  | [18-Oct-2023 11:01:19] NOTICE: fpm is running, pid 1
docker-compose-sample-app-1  | [18-Oct-2023 11:01:19] NOTICE: ready to handle connections
【○】Podman Desktop
podman compose up
>>>> Executing external compose provider "/usr/local/bin/docker-compose". 
Please refer to the documentation for details. <<<<

[+] Running 2/0
 ✔ Network docker-compose-sample_default  Created                                    0.0s
 ✔ Container docker-compose-sample-app-1  Created                                    0.1s
Attaching to docker-compose-sample-app-1
docker-compose-sample-app-1  | [26-Oct-2023 10:03:42] NOTICE: fpm is running, pid 1
docker-compose-sample-app-1  | [26-Oct-2023 10:03:42] NOTICE: ready to handle connections
docker compose down
【○】Docker Desktop
docker compose down

[+] Running 2/2
 ✔ Container docker-compose-sample-app-1  Removed                               0.1s
 ✔ Network docker-compose-sample_default  Removed                               0.0s
【○】Rancher Desktop
docker compose down

[+] Running 2/2
 ✔ Container docker-compose-sample-app-1  Removed                                    0.2s
 ✔ Network docker-compose-sample_default  Removed                                    0.1s
【○】Podman Desktop
podman compose down
>>>> Executing external compose provider "/usr/local/bin/docker-compose". 
Please refer to the documentation for details. <<<<

[+] Running 2/0
 ✔ Container docker-compose-sample-app-1  Removed                                    0.0s
 ✔ Network docker-compose-sample_default  Removed                                    0.0s
docker compose start
【○】Docker Desktop
docker compose start

[+] Running 1/1
 ✔ Container docker-compose-sample-app-1  Started                                 0.1s

❯ docker compose ls
NAME                    STATUS              CONFIG FILES
docker-compose-sample   running(1)          /Users/user.name/Documents/GitHub/docker-compose-sample/docker-compose.yml
【○】Rancher Desktop
docker compose start

❯ docker compose ls
NAME                    STATUS      CONFIG FILES
docker-compose-sample   running(1)  /Users/user.name/Documents/GitHub/docker-compose-sample/docker-compose.yml
【○】Podman Desktop
podman compose start
>>>> Executing external compose provider "/usr/local/bin/docker-compose".
 Please refer to the documentation for details. <<<<

[+] Running 1/0
 ✔ Container docker-compose-sample-app-1  Started                                    0.1s

❯ podman compose ls
>>>> Executing external compose provider "/usr/local/bin/docker-compose". Please refer to the documentation for details. <<<<

NAME                    STATUS              CONFIG FILES
docker-compose-sample   running(1)          /Users/user.name/Documents/GitHub/docker-compose-sample/docker-compose.yml
docker compose stop
【○】Docker Desktop
docker compose stop

[+] Stopping 1/1
 ✔ Container docker-compose-sample-app-1  Stopped                                 0.1s

❯ docker compose ls --all
NAME                    STATUS              CONFIG FILES
docker-compose-sample   exited(1)           /Users/user.name/Documents/GitHub/docker-compose-sample/docker-compose.yml
【○】Rancher Desktop
docker compose stop

❯ docker compose ls
NAME                    STATUS      CONFIG FILES
【○】Podman Desktop
podman compose stop
>>>> Executing external compose provider "/usr/local/bin/docker-compose". 
Please refer to the documentation for details. <<<<

[+] Stopping 1/0
 ✔ Container docker-compose-sample-app-1  Stopped                                    0.1s

❯ podman compose ls --all
>>>> Executing external compose provider "/usr/local/bin/docker-compose". Please refer to the documentation for details. <<<<

NAME                    STATUS              CONFIG FILES
docker-compose-sample   exited(1)           /Users/user.name/Documents/GitHub/docker-compose-sample/docker-compose.yml
docker compose ps
【○】Docker Desktop
docker compose ps
NAME                          IMAGE                       COMMAND                  SERVICE   CREATED         STATUS        PORTS
docker-compose-sample-app-1   docker-compose-sample-app   "docker-php-entrypoi…"   app       3 minutes ago   Up 1 second   9000/tcp
【○】Rancher Desktop
docker compose ps
NAME                          IMAGE                       COMMAND                  SERVICE    CREATED             STATUS              PORTS
docker-compose-sample-app-1   docker-compose-sample-app   "docker-php-entrypoi…"   app        About an hour ago   Up 5 seconds        9000/tcp
【○】Podman Desktop
podman compose ps
>>>> Executing external compose provider "/usr/local/bin/docker-compose". Please refer to the documentation for details. <<<<

NAME                          IMAGE                                                COMMAND     SERVICE   CREATED         STATUS     
docker-compose-sample-app-1   docker.io/library/docker-compose-sample-app:latest   "php-fpm"   app       5 minutes ago   Up 1 second
docker compose exec
【○】Docker Desktop
docker compose exec app bash

root@c608f9de9e39:/data# php -v
PHP 8.1.20 (cli) (built: Jun 13 2023 09:37:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.20, Copyright (c) Zend Technologies
root@c608f9de9e39:/data# composer -V
Composer version 2.2.22 2023-09-29 10:53:45
【○】Rancher Desktop
docker compose exec app bash
root@e37631238069:/data# php -v
PHP 8.1.20 (cli) (built: Jun 13 2023 09:37:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.20, Copyright (c) Zend Technologies

root@e37631238069:/data# composer -V
Composer version 2.2.22 2023-09-29 10:53:45
【○】Podman Desktop
podman compose exec app bash
>>>> Executing external compose provider "/usr/local/bin/docker-compose". 
Please refer to the documentation for details. <<<<

root@42f228e523e5:/data# php -v
PHP 8.1.20 (cli) (built: Jun 13 2023 09:37:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.20, Copyright (c) Zend Technologies
root@42f228e523e5:/data# composer -V
Composer version 2.2.22 2023-09-29 10:53:45

【CLI 互換性】検証結果

CLI 互換性について、各コンテナ管理ツールの検証結果を以下にまとめます。

CLI の操作性 コマンド Docker Desktop Rancher Desktop Podman Desktop
管理系 version
help
info
image 系 image build
image ls
image inspect
image history
image rm
image save
image tag
container 系 container create
container start
container commit
container pause
container unpause
container stop
container restart
container run
container exec
container kill
container rm
container stats
container attach ×
container logs
レジストリ系 image pull
image push
search
network 系 network ls
network create
network rm
volume 系 volume ls
volume create
volume rm
volume inspect
compose 系 compose build
compose up
compose down
compose start
compose stop
compose ps
compose exec

上記の結果から、どのクライアントも基本的な CLI 操作は可能であることがわかりました。
しかしながら、Podman Desktop は Docker CLI ではなく Podman CLI がメインとなるため、扱いやすさで言えば Docker Desktop と Rancher Desktop の方が優れていると感じました。

各ツールのメリットとデメリット

Docker Desktop

Docker Desktop は流石に公式ツールだけあって、大体のことはできる印象でした。
GUI の操作性も悪くなく、Docker Desktop であれば Docker を使用する上で困ることはないと思います。
しかし、商用利用にはライセンス料が必要になるため、業務における簡単な検証用途であれば不向きかと思います。

以下に、実際に触ってみて感じた Docker Desktop のメリットとデメリットをまとめます。

Docker Desktop のメリット

  • 公式ツールである
    • 安定した動作が期待できる
  • GUI が使いやすい
    • 初心者でも扱いやすい
    • レスポンスが早い
      • 作成や削除など、操作に対する反応が早い
  • Docker CLI が利用できる
    • Docker Desktop でできないことは Docker CLI で補える
  • イメージの脆弱性スキャンが高機能
    • コンテナセキュリティの向上につながる
    • ※ Rancher Desktop でも同様の機能はある

Docker Desktop のデメリット

  • 商用利用にはライセンス料が必要
  • ソフトウェアが重い
    • 起動に時間がかかる
      • 3つのツールの中で一番時間がかかった
    • メモリを多く消費する
      • 常時 6GB 以上のメモリを消費していた
      • VM で 5GB、 Docker Desktop で 1GB 程度
        docker-desktop-memory
  • GUI は高機能だが、その分ボタンやメニューが多い
    • もう少しシンプルな方が初心者にはわかりやすいかもしれない

Rancher Desktop

Rancher Desktop は Docker Desktop と同様に、Docker CLI がすぐに利用できる点が良いと思いました。
商用利用も無料でOK なので、社用 PC で簡単な検証を行う場合は候補に入ってくると思います。

以下に、実際に触ってみて感じた Rancher Desktop のメリットとデメリットをまとめます。

Rancher Desktop のメリット

  • Docker CLI が利用できる
    • dockerdcontainerd を選択して使用することが可能
    • あとから変更もできるため、柔軟性がある
  • インストールから使用までが簡単
    • Homebrew でインストールしてすぐに使用できる
  • docker-compose を別途インストールする必要がない
    • Docker CLI のサブコマンドとして docker compose が使用できる

Rancher Desktop のデメリット

  • GUI でできることが他の 2つと比べると少ない
    • コンテナ操作に関連することは GUI 上で操作不可能
    • また、ボリューム操作に関しても機能なし
    • inspect などのイメージ詳細情報の取得も不可能
      • ただし、イメージの脆弱性スキャンは可能
  • あまり GUI 操作をメインに考えない方が良い
    • GUI はあくまで補助的なものと考えた方が良い
    • ボタンで操作したい場合は VSCode の拡張機能を使用した方ができることが多い
      • ※ VSCode の拡張機能は Docker Desktop でも Podman Desktop でも使用可能

Podman Desktop

Podman Desktop は Docker Desktop と同様に、GUI が使いやすい点が良いと思いました。
また、3つのツールの中で唯一、イメージの詳細情報が表示できる点も痒いところに手が届くと感じました。

以下に、実際に触ってみて感じた Podman Desktop のメリットとデメリットをまとめます。

Podman Desktop のメリット

  • GUI が使いやすい
    • Docker Desktop と同様に、初心者でも扱いやすい
    • レスポンスが早い
      • 作成や削除など、操作に対する反応が早い
  • Docker CLI の使用も可能
    • Homebrew で Formulae 版の docker をインストールすることで、Docker CLI の使用が可能
  • イメージの詳細情報の表示が可能
    • Docker Desktop と Rancher Desktop では表示できないイメージの詳細情報を表示できる
    • docker image inspect と同様の情報が表示できる
    • ただし、イメージの脆弱性スキャンは不可能
      • Docker Desktop 拡張を読み込ませることで trivy によるイメージの脆弱性スキャンが可能(2024/02/14 追記)
  • Docker Desktop よりもコンテナ作成時に設定可能なオプションが多い
    • Entrypoint や Cmd などが設定できる

Podman Desktop のデメリット

  • Docker CLI が利用できない
    • 代わりに Podman CLI が使用できる
      • 普段の docker コマンドの docker に当たる部分を podman に置き換えるだけで、基本的には同じように使用できる
  • podman compose が標準で使用できない
    • Podman CLI で docker-compose を使用するには別途インストールが必要
    • GUI から docker-compose をインストールすることが可能
    • インストール後は podman compose で使用可能
  • VSCode の拡張機能を利用する際に設定の変更が必要になる
    • UNIX ソケットの設定を変更しないと動かない

自分が選んだコンテナ管理ツール

私は記事の最初に書いた通り、Rancher Desktop を選択しました。

理由としては、Docker CLI が利用できることイメージの脆弱性スキャンができることが大きいです。

私の場合は業務上、社用 PC で Docker を使用する必要があるため、商用利用も無料で OKRancher DesktopPodman Desktop が候補になりました。
その上で、私は基本的に GUI は使用せずコマンド操作で Docker を使用するため、Docker Engine と Docker CLI の組み合わせで使用できる Rancher Desktop が一番使いやすいと感じました。

また、イメージの脆弱性スキャンはコンテナセキュリティの向上につながるため、これも重要なポイントとなりました。

業務では Artifact Registry にコンテナイメージを保存することが多いため、イメージの脆弱性スキャンは Artifact Analysis で行うことも可能です。

しかし、Artifact Analysis は Artifact Registry に保存されているイメージに対してのスキャンになるため、ローカルで作成したイメージに対してスキャンを行うことはできません。

そのため、ローカルで作成したイメージに対して事前に脆弱性スキャンを行い、その上で CI/CD パイプラインで Artifact Analysis による脆弱性スキャンを行うことで、よりセキュアなコンテナイメージを作成することができると考えました。

あなたが選ぶべきコンテナ管理ツール

Docker Desktop を選ぶべき人

  • dockerd と Docker CLI の組み合わせで Docker を使用したい
  • やはり公式ツールが安心
  • 多少のライセンス料は気にならない
  • CLI 操作がメインだが、GUI 操作もできると嬉しい
  • コンテナイメージの脆弱性スキャンを重視する
    • Docker Scout は高機能
  • ハイスペックな PC を使用している
    • 多少のメモリ消費は気にならない

Rancher Desktop を選ぶべき人

  • インストールとセットアップは簡単な方が良い
  • Docker Hub のアカウントを持っていない
  • dockerd と Docker CLI の組み合わせで Docker を使用したい
  • 無料で使用したい
    • 「業務で Docker を使用する必要があるが、ライセンス料は出せない」など
  • GUI 操作はあまり必要ない
    • CLI 操作がメイン
    • GUI 操作は VSCode の拡張機能で補えば良い
  • コンテナイメージの脆弱性スキャンを重視する
    • OSS の trivy を使用した脆弱性スキャンを実行可能

Podman Desktop を選ぶべき人

  • インストールとセットアップが多少面倒でも良い
  • Docker Hub のアカウントを持っていない
  • Docker CLI にこだわりがない
  • 無料で使用したい
    • 「業務で Docker を使用する必要があるが、ライセンス料は出せない」など
  • GUI 操作がメイン
    • CLI 操作はあまりできない、またはしたくない
    • GUI 操作でコンテナを作成したい
  • 軽量なアプリケーションが良い
    • メモリ消費を抑えたい

おわりに

この記事では、Docker を使用する際に用いるコンテナ管理ツールについていくつか紹介し、その機能を検証しました。
Docker を使用するためには様々な方法があり、それぞれにメリット・デメリットがありますが、自分の用途に合ったコンテナ管理ツールを選択することで、より快適に Docker を使用することができるようになると思います。

  • CLI 操作がメインの人
  • GUI 操作がメインの人
  • 脆弱性スキャンを重視する人
  • デーモンレスな Docker を使用したい人
  • 公式ツールが一番安心な人

など、様々な人がいると思いますが、この記事を参考にして自分に合ったコンテナ管理ツールを選択してみてください。
ここまで読んでいただき、ありがとうございました 🍙

変更履歴

  • 2024/01/15
    • 本記事を公開しました
  • 2024/01/17
    • 記事タイトルを変更しました
    • Docker クライアント というワードを コンテナ管理ツールに変更しました
  • 2024/02/14
    • Podman Desktop で Trivy を使用した脆弱性スキャンが可能な旨を追記しました
    • コンテナランタイムについての記述を修正しました
    • 各ツールが使用する仮想化エンジンについての記述を修正しました

Discussion

Shion TanakaShion Tanaka

検証環境はmacOSのようですが、Podman machineの仮想マシンタイプはOSにより異なります。

  • Linux: QEMUのみ
  • macOS: QEMU(デフォルト)、AppleHV(開発中、リリース後はこちらがデフォルトに)
  • Windows: WSL2(デフォルト)、Hyper-V(v4.8.0で追加)
    参考にしてください。
クラウドエース株式会社クラウドエース株式会社

Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
まずは本記事を読んでいただき、ありがとうございます。

上記については把握しておりましたが、対象読者を Mac を使用している初心者 と定義したため、本記事では Linux と Windows については言及しませんでした。

しかしながら、非常に参考になる情報をありがとうございます。
Hypervisor.framework を利用した podman、個人的に試してみようかと思います。

Shion TanakaShion Tanaka

Podman DesktopにはDocker Desktop Extentionを読み込み機能があり、現在のところTrivyを追加してローカルでイメージスキャンを行うことができます。
https://podman-desktop.io/extend

クラウドエース株式会社クラウドエース株式会社

Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。

こちらは存じ上げませんでした。
参考 URL まで貼っていただき、ありがとうございます。
Podman Desktop ではイメージスキャンができないような記述は修正いたします。

Shion TanakaShion Tanaka

Docker DesktopのコンテナランタイムがDocker Engineとなっていますが、一般的なコンテナランタイムの定義やPodman Desktopとの比較を記すならcontainerdやruncの方が表現としては正しいのではないでしょうか。これはRuncher Desktopの方も同じです。
https://docs.docker.com/engine/

クラウドエース株式会社クラウドエース株式会社

Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。

上記について、ご指摘の通りかと思います。
現在の私の認識は以下のようになっておりますが、改めて調べた上で内容を修正させていただきます。

【現在の認識】

  • Docker daemon
    • API のリクエストを受け取り Dockerオブジェクトを管理する
      • イメージ、コンテナ、ネットワーク、ボリューム等
    • Docker オブジェクトの管理を行う際は以下のコンテナランタイムを使用している
      • 高レベル:containerd
      • 低レベル:runC
  • containerd
    • 高レベルコンテナランタイム
    • Docker daemon と runC の中間
    • コンテナのライフサイクル管理
      • イメージ管理
      • コンテナの実行(実際に起動させるのは runC)
      • ネットワーキング
      • etc
  • runC
    • 低レベルコンテナランタイム
    • コンテナを実際に実行するツール
    • cgroups や namespaces などの Linux カーネルの機能を利用している
Shion TanakaShion Tanaka

Docker Desktopの仮想化エンジンもOSによって複数選択肢があります

  • Linux: KVM(+QEMU)
  • Windows: WSL2またはHyper-V
  • macOS: HyperkitまたはApple Hypervisor Framework(Apple Siliconのみ)
クラウドエース株式会社クラウドエース株式会社

Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。

こちらは存じ上げませんでした。
前述の理由から、Linux と Windows については本記事では言及しませんが、macOS については追記させていただきます。

最後に、4件に渡りコメントをいただき、誠にありがとうございました。
自分の理解も深まり、大変参考になりました。

azuazu

macOS限定なら、OrbStackも代替ツールの候補となると思います。
Docker Desktopと同じくビジネス利用は有料で、個人利用は無料のツールです。

Docker Desktop for macからのマイグレーション機能もあるため、代替ツールとしてはスムーズに切り替えやすいと思います。Docker contextの切り替えにより同居も可能です

クラウドエース株式会社クラウドエース株式会社

azu 様
コメントありがとうございます。
記事を執筆したクラウドエース渋谷と申します。

ご指摘いただいた通り、OrbStack は環境構築も簡単でインストール後すぐに Docker を使用できる優れたツールです。
実は本検証を行う際に OrbStack の検証も行う予定だったのですが、社用 PC で検証するにはライセンスのことがありましたので、今回は見送りました。

私用 PC には OrbStack をインストールしており、Docker だけでなく Linux VM を驚くほど簡単に作成できる点に驚きました。
また、コンテナ内のシェルにワンクリックで入れる点も良いと思いました。

今後機会があれば OrbStack の検証記事も書いてみたいと思います。

Gunther BrunnerGunther Brunner

業務でOrbStackに課金していますが、
もうほかのDocker Desktopツールと明らかにパフォーマンスが圧倒的に上、DXも優れている。
マウントしたイメージをそのままFinderにマウントされる等、
macOS使っている人ならOrbStack一択ですね。
基本人権な存在になってきました。

パフォーマンスの差の違いを考えると、
新しいMacBookを買わなくて良くなるので、
$8/月 の価値はあると実感しています。