Docker Desktop と代替ツールの機能検証まとめ
はじめに
こんにちは。今年クラウドエース株式会社に新卒入社し、現在 SRE をしている渋谷と申します。
自分の愛車は MAZDA の RX-8 という車なのですが、この車に搭載されているロータリーエンジン(おにぎりエンジン)にちなんで、自分が執筆する記事のアイキャッチは 🍙 にすることにしました。
さて、この記事では GUI を用いてコンテナを管理・操作する際に使用されるコンテナ管理ツールとして代表的な以下の 3つのツールを紹介し、機能検証を行います。
- Docker Desktop
- Rancher Desktop
- 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
となることを確認済み
- GUI から
-
- 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 アプリケーションを使用します。
-
環境構築
- GUI ツールインストール
- セットアップ
- CLI ツールの導入
- Docker Compose の導入
-
操作性
- コンテナイメージ管理
- コンテナ管理
- ボリューム管理
- 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 をクリックしてライセンスに同意します。
ライセンスに同意すると、以下のようにセットアップオプションを選択する画面が表示されるので、デフォルトのまま Finish をクリックします。
これでセットアップは完了です。
【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 をクリックします。
次に、以下のようにアクセス権に関する設定画面が表示されるので、デフォルトのまま OK をクリックします。
これでセットアップは完了です。
【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 CLI のインストールが完了すると、Initialize and start というボタンが表示されるので、クリックします。
Podman is running と表示されればセットアップは完了です。
【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 をクリックすることで、インストールできます。
以下のコマンドを実行して、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 アプリケーションを使用します。
-
操作性
- コンテナイメージ管理
- コンテナ管理
- ボリューム管理
-
CLI 互換性
- 管理系コマンド
- image 系コマンド
- container 系コマンド
- レジストリ系コマンド
- network 系コマンド
- volume 系コマンド
- compose 系コマンド
本章では、評価結果を以下のような記号で表現します。
-
○
: 可能 -
△
: 一部可能もしくは類似機能あり -
×
: 不可能
コンテナイメージ管理
各ツールの GUI 操作でコンテナイメージを作成・取得・配布することの難易度を評価します。
【Docker Desktop】コンテナイメージ管理
検証結果
×
【Docker Desktop】コンテナイメージの作成 (build)
- コンテナイメージ作成の機能なし
- コンテナイメージ作成は Docker CLI を使用する必要あり
○
【Docker Desktop】コンテナイメージの削除 (rm)
- Images タブを選択
- 削除したいイメージを選択
- Actions のゴミ箱ボタンをクリック
△
【Docker Desktop】コンテナイメージの取得 (pull)
- Images タブを選択
- Hub タブを選択
- 取得したいイメージにオンカーソルし Pull をクリック
- 完了するとダイアログが表示される
△
【Docker Desktop】リポジトリに送信 (push)
- Images タブを選択
- Push したいイメージを選択
- ケバブメニューから "Push to Hub" をクリック
△
【Docker Desktop】イメージ詳細情報の取得 (inspect)
- Images タブを選択
- 詳細情報を確認したいイメージをクリック
- 脆弱性スキャンの結果が表示される
- 4段階で脆弱性の深刻度を評価
- リンクから脆弱性の詳細情報を確認可能
【Rancher Desktop】コンテナイメージ管理
検証結果
×
【Rancher Desktop】コンテナイメージの作成 (build)
- Images タブを選択
- Add Image をクリック
- Build タブを選択し、イメージ名を入力
- Build をクリック
- ダイアログから Dockerfile を選択
○
【Rancher Desktop】コンテナイメージの削除 (rm)
- Images タブを選択
- 削除したいイメージを選択
- ケバブメニューから Delete をクリック
○
【Rancher Desktop】コンテナイメージの取得 (pull)
- Images タブを選択
- Add Image をクリック
-
Pull タブを選択し、イメージ名を入力
- ※ 検証では
debian
を入力
- ※ 検証では
- Pull ボタンをクリック
×
【Rancher Desktop】リポジトリに送信 (push)
- Images タブを選択
- Push したいイメージを選択
- ケバブメニューから Push をクリック
△
【Rancher Desktop】イメージ詳細情報の取得 (inspect)
- Images タブを選択
- 詳細情報を確認したいイメージを選択
- ケバブメニューから Scan をクリック
- 4段階で脆弱性の深刻度を評価
- リンクから脆弱性の詳細情報を確認可能
【Podman Desktop】コンテナイメージ管理
検証結果
○
【Podman Desktop】コンテナイメージの作成 (build)
- Images タブを選択
- Build an Image をクリック
- ダイアログが表示されるので、以下の項目を入力
- Containerfile path: Dockerfile のパス(Finder)
- Build context directory: Dockerfile が存在するディレクトリのパス(Finder)
- Image Name: イメージ名
- Build をクリック
○
【Podman Desktop】コンテナイメージの削除 (rm)
- Images タブを選択
- 削除したいイメージを選択
- Actions の項目にあるゴミ箱ボタンをクリック
○
【Podman Desktop】コンテナイメージの取得 (pull)
- Images タブを選択
- Add Image をクリック
- Pull an image をクリック
- イメージ名を入力
- ※ 検証では
debian
を入力
- ※ 検証では
- Pull image ボタンをクリック
×
【Podman Desktop】リポジトリに送信 (push)
- Settings からリポジトリを追加
- Images タブを選択
- Push したいイメージを選択
- ケバブメニューから "Push Image" をクリック
○
【Podman Desktop】イメージ詳細情報の取得 (inspect)
- Images タブを選択
- 詳細情報を確認したいイメージを選択
- ケバブメニューから Show History をクリック
- Inspect タブを選択
【コンテナイメージ管理】検証結果
コンテナイメージ管理について、各コンテナ管理ツールの検証結果を以下にまとめます。
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)
- Images タブを選択
- コンテナを作成したいイメージを選択
- Actions の項目にある再生ボタンをクリック
- ダイアログが表示されるので、必要な設定を行う
- Container name: コンテナ名を指定
- Ports: ポートフォワーディングを設定
- Volumes: ボリュームを設定
- Environment Variables: 環境変数を設定
- 完了するとログが表示される
○
【Docker Desktop】コンテナの停止 (stop)
- Containers タブを選択
- 停止したいコンテナを選択
- Actions の項目にある停止ボタンをクリック
○
【Docker Desktop】コンテナの削除 (rm)
- Containers タブを選択
- 削除したいコンテナを選択
- Actions の項目にあるゴミ箱ボタンをクリック
【Rancher Desktop】コンテナ管理
検証結果
【Podman Desktop】コンテナ管理
検証結果
○
【Podman Desktop】コンテナの作成 (run)
- Images タブを選択
- コンテナを作成したいイメージを選択
- ACTIONS の項目にある再生ボタンをクリック
- ダイアログが表示されるので、必要な設定を行う
- Container name: コンテナ名を指定
- Entrypoint: コンテナ起動時に実行するコマンドを指定
- Command: コンテナ起動時に実行するコマンドを指定
- Volumes: ボリュームを設定
- Port mappings: ポートフォワーディングを設定
- Start Container をクリック
○
【Podman Desktop】コンテナの停止 (stop)
- Containers タブを選択
- 停止したいコンテナを選択
- Actions の項目にある停止ボタンをクリック
○
【Podman Desktop】コンテナの削除 (rm)
- Containers タブを選択
- 削除したいコンテナを選択
- Actions の項目にあるゴミ箱ボタンをクリック
【コンテナ管理】検証結果
コンテナ管理について、各コンテナ管理ツールの検証結果を以下にまとめます。
Docker Desktop | Rancher Desktop | Podman Desktop | |
---|---|---|---|
コンテナの作成 | ○ | × | ○ |
コンテナの起動 | ○ | × | ○ |
コンテナの停止 | ○ | × | ○ |
コンテナの削除 | ○ | × | ○ |
上記の結果から、GUI でのコンテナ管理は Docker Desktop と Podman Desktop が優秀であることがわかりました。
ボリューム管理
各ツールの GUI 操作でボリュームを作成・削除することの難易度を評価します。
【Docker Desktop】ボリューム管理
検証結果
○
【Docker Desktop】ボリュームの作成 (create)
- Volumes タブを選択
- Create a volume をクリック
- ボリューム名を入力して Create をクリック
○
【Docker Desktop】ボリュームの削除 (rm)
- Volumes タブを選択
- 削除したいボリュームを選択
- Actions の項目にあるゴミ箱ボタンをクリック
【Rancher Desktop】ボリューム管理
検証結果
【Podman Desktop】ボリューム管理
検証結果
○
【Podman Desktop】ボリュームの作成 (create)
- Volumes タブを選択
- Create a volume をクリック
- ボリューム名を入力して Create をクリック
○
【Podman Desktop】ボリュームの削除 (rm)
- Volumes タブを選択
- 削除したいボリュームを選択
- Actions の項目にあるゴミ箱ボタンをクリック
【ボリューム管理】検証結果
ボリューム管理について、各コンテナ管理ツールの検証結果を以下にまとめます。
ボリューム管理 | 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 rm
❯ docker 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 程度
- 起動に時間がかかる
-
GUI は高機能だが、その分ボタンやメニューが多い
- もう少しシンプルな方が初心者にはわかりやすいかもしれない
Rancher Desktop
Rancher Desktop は Docker Desktop と同様に、Docker CLI がすぐに利用できる点が良いと思いました。
商用利用も無料でOK なので、社用 PC で簡単な検証を行う場合は候補に入ってくると思います。
以下に、実際に触ってみて感じた Rancher Desktop のメリットとデメリットをまとめます。
Rancher Desktop のメリット
-
Docker CLI が利用できる
-
dockerd
とcontainerd
を選択して使用することが可能 - あとから変更もできるため、柔軟性がある
-
-
インストールから使用までが簡単
- Homebrew でインストールしてすぐに使用できる
-
docker-compose を別途インストールする必要がない
- Docker CLI のサブコマンドとして
docker compose
が使用できる
- Docker CLI のサブコマンドとして
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 CLI が使用できる
-
podman compose
が標準で使用できない- Podman CLI で
docker-compose
を使用するには別途インストールが必要 - GUI から docker-compose をインストールすることが可能
- インストール後は
podman compose
で使用可能
- Podman CLI で
-
VSCode の拡張機能を利用する際に設定の変更が必要になる
- UNIX ソケットの設定を変更しないと動かない
自分が選んだコンテナ管理ツール
私は記事の最初に書いた通り、Rancher Desktop を選択しました。
理由としては、Docker CLI が利用できることとイメージの脆弱性スキャンができることが大きいです。
私の場合は業務上、社用 PC で Docker を使用する必要があるため、商用利用も無料で OK な Rancher Desktop か Podman 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
検証環境はmacOSのようですが、Podman machineの仮想マシンタイプはOSにより異なります。
参考にしてください。
Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
まずは本記事を読んでいただき、ありがとうございます。
上記については把握しておりましたが、対象読者を Mac を使用している初心者 と定義したため、本記事では Linux と Windows については言及しませんでした。
しかしながら、非常に参考になる情報をありがとうございます。
Hypervisor.framework を利用した podman、個人的に試してみようかと思います。
Podman DesktopにはDocker Desktop Extentionを読み込み機能があり、現在のところTrivyを追加してローカルでイメージスキャンを行うことができます。
Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
こちらは存じ上げませんでした。
参考 URL まで貼っていただき、ありがとうございます。
Podman Desktop ではイメージスキャンができないような記述は修正いたします。
Docker DesktopのコンテナランタイムがDocker Engineとなっていますが、一般的なコンテナランタイムの定義やPodman Desktopとの比較を記すならcontainerdやruncの方が表現としては正しいのではないでしょうか。これはRuncher Desktopの方も同じです。
Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
上記について、ご指摘の通りかと思います。
現在の私の認識は以下のようになっておりますが、改めて調べた上で内容を修正させていただきます。
【現在の認識】
Docker Desktopの仮想化エンジンもOSによって複数選択肢があります
Shion Tanaka 様
コメントいただきありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
こちらは存じ上げませんでした。
前述の理由から、Linux と Windows については本記事では言及しませんが、macOS については追記させていただきます。
最後に、4件に渡りコメントをいただき、誠にありがとうございました。
自分の理解も深まり、大変参考になりました。
macOS限定なら、OrbStackも代替ツールの候補となると思います。
Docker Desktopと同じくビジネス利用は有料で、個人利用は無料のツールです。
Docker Desktop for macからのマイグレーション機能もあるため、代替ツールとしてはスムーズに切り替えやすいと思います。Docker contextの切り替えにより同居も可能です
azu 様
コメントありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
ご指摘いただいた通り、OrbStack は環境構築も簡単でインストール後すぐに Docker を使用できる優れたツールです。
実は本検証を行う際に OrbStack の検証も行う予定だったのですが、社用 PC で検証するにはライセンスのことがありましたので、今回は見送りました。
私用 PC には OrbStack をインストールしており、Docker だけでなく Linux VM を驚くほど簡単に作成できる点に驚きました。
また、コンテナ内のシェルにワンクリックで入れる点も良いと思いました。
今後機会があれば OrbStack の検証記事も書いてみたいと思います。
Rancher Desktopを使ってます
業務でOrbStackに課金していますが、
もうほかのDocker Desktopツールと明らかにパフォーマンスが圧倒的に上、DXも優れている。
マウントしたイメージをそのままFinderにマウントされる等、
macOS使っている人ならOrbStack一択ですね。
基本人権な存在になってきました。
パフォーマンスの差の違いを考えると、
新しいMacBookを買わなくて良くなるので、
$8/月 の価値はあると実感しています。
設定変更は必要ですが、Rancher Desktopの最近のバージョン (最新版は1.13.1)では「Apple Hypervisor Framework (Apple Siliconのみ)」もサポートされています。WASMもサポートしています。
ytooyama 様
コメントありがとうございます。
記事を執筆したクラウドエース渋谷と申します。
いただいたコメントにつきまして、記事に反映いたします。
情報のご提供に感謝いたします。