コンテナといえばDocker、Dockerといえばコンテナ。というほどポピュラーになってきたDockerですが、Mac OSやWindowsで使う場合は無料で使えない条件があったり、一般ユーザーでは動作しなかったりします。
今回の内容は、Dockerが無料で使えない環境や条件についてと、該当する人がお金を支払わずに済む方法についてお話します。
細かい部分の話は省略して、概要的な内容で書いていきます。意思決定の手助けになったら嬉しいです。
Dockerを無料で使えない人の条件
あまり知られていないことだと思いますが、Dockerといっても、DockerEngineとDockerDesktopの2種類があります。DockerEngineは完全無料であるのに対して、DockerDesktopは条件によって有料になります。
そしてWindowsやMac OSでDockerを場合、基本的にはDockerDesktopしか選択肢がありません。無料のDockerEngineはLinuxでしか使えないんです。
DockerDesktopのパーソナルサブスクリプションは無料です。パーソナルという名前であるものの、企業も基本、このパーソナルサブスクリプションで使うことができます。
ただし、従業員が250人以上、または年間1000万ドル以上売り上げている企業(以後「中規模以上の企業」としましょう)が、営利目的の活動にDockerDesktopを使う場合には、有料になります。企業の活動のほとんどは営利目的です。営利目的でない活動というのは、オープンソースプロジェクトや調査目的の活動に限られます。
公式情報:
→Docker Personal
→FAQ
僕の勤め先でDockerDesktopを導入した当時はまだ、従業員数や売り上げに関係なく全ての企業が無料でDockerDesktopを使うことができていました。
でも途中からいきなり「大きい企業には無料で使わせませ〜ん」てきな規約変更があり、後出し詐欺のように感じたのを今でも覚えています。😭
年間1000万ドル以上売り上げている企業なら必要なものには積極的に投資していく文化があるとは思いますが、従業員が250人以上いるにもかかわらず売り上げがそれほど高いわけでもない企業はそんな余裕は無いことが多いですよね。ちなみに僕の勤め先は後者です。
DockerDesktopの金額
DockerDesktopのサブスクリプションは、無料で使えるPersonal、月間5ドルのPro、月間9ドルのTeam、月間24ドルのBusinessの4タイプがあります。
Personal | 無料 |
Pro | $5/month |
Team | $9/month |
Business | $24/month |
中規模以上の企業では、Pro、Team、Businessのサブスクリプションから選択する必要があります。
このブログ記事としてはDockerDesktop金を払わない方法をテーマにしているワケですが、きちんと使用料を支払いつつも最小限の金額に抑える考え方でもいいと思います。
例えば、DockerDesktopを使う人間を1人に絞ることで、1人分の料金で済ませることもできます。サブスクは人単位で課金されるので、1人の担当が何台のマシンにインストールしても、そこでDockerDesktopを使う人が特定の1人であれば、1人分の料金でいいのです👓🤞
Docker subscriptions are per user. This means that if a user has multiple machines, they will only need one license to use Docker Desktop on all of their machines.
Docker FAQs
DockerEngineは課金が不要
ということでここからは中規模以上の企業向けの内容になります。
DockerDesktopは有料ですが、DockerEngineは無料です。つまりDockerEngineを使うことで課金を回避することができます。DockerDesktopからGUI管理画面の機能を除いたものがDockerEngineだと思ってください。
ただ、DockerEnginedだけでのインストールが可能なのはLinuxだけです。とはいえ、WindowsやMac OSの場合は、Linuxの仮想環境を作成し、そこにDockerEngineをインストールする方法ならイケます。
Windowsの場合はWSL2上にLinux環境を、Mac OSの場合はParallels上にLinux環境を作ることができます。
LinuxにDockerEngineをインストールする方法はこちら
MacでWindowsを使えるソフトウェア【Parallels】Dockerに準拠した無料のPodman
DockerDesktopの代わりにDockerEngineを使う方法は、Linux環境を用意する必要がありました。
しかしPodmanを使うと、Mac OS上でそのままコンテナを動作させることができます。
podmanはbrewで簡単にインストールできます。インストールしたら、DockerのCLIと同じように使うことができます。
brew install podman
podman machine init
podman machine start
podman run -d --name apache2-container -e TZ=Asia/Tokyo -p 8080:80 ubuntu/apache2
podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68d2a46a598c docker.io/ubuntu/apache2:latest apache2-foregroun... 32 seconds ago Up 32 seconds 0.0.0.0:8080->80/tcp apache2-container
dockerコマンドを使うのと同じようにapache2サーバーコンテナを立ち上げてみました。ブラウザからアクセスしてちゃんとapache2の動作も確認できます。
podmanのドキュメントによると、コマンドは全てdockerと互換性を持たせているとのことですけど、podman machine
コマンドで仮想環境を作る必要がある点など、Dockerと違う部分もあるので注意がいります。
ちなみにpodmanは、管理者権限無しでも動きます。
僕は仕事用のMacアカウントは一般ユーザーとして作っているので、DockerDocktopは動きません。それに対してpodmanは管理者権限が不要なので、一般ユーザーの環境で使えています。この部分、地味にありがたい。
docker-composeやpodman-composeが使える
podmanのコマンドはdockerのコマンドと互換性を持たせているようですが、docker-composeを使いたいってなると、少し話が違ってきます。
podman用にpodman-composeというコマンドが作られていて、それを使うとdocker-composeと同じようなことができます。よっぽど手の込んだdocker-compose.ymlを使わない限り、ほぼ同じように使えると思ってもらって問題ありません。
# podman-composeはPythonパッケージとしてインストール
pip install podman-compose
# docker-compose.ymlが用意してあるフォルダへ移動
cd dir-for-docker-compose-file
# コンテナアップはdocker-composeと同じようにできる
podman-compose up -d
# コンテナの一覧も同じように確認できる
podman-compose ps
ただし手の込んだことをする必要がある場合、つまり比較的マイナーな機能を使うような場合には、うまく動かないこともあります。そういった場合には回避策の検討が必要です。
選択肢として、docker-composeとpodmanを連携して使うこともできます。ただし、深みにハマる可能性が高いです。podman-composeはPythonパッケージとしてイッパツでインストールできてそのままサクッと動作もするので、特に理由がなければpodman-composeでやりくりすると不幸にならずに済みますよ。
ちなみに僕の仕事レベルは、podman-composeでやりくりできています。(たまにdocker-compose.ymlの書き方を工夫させられることはある)
Podmanプロジェクトチームの推奨はpodman kube
podman-composeは、podmanプロジェクトのサブプロジェクトというわけではなく、有志がpodman-composeプロジェクトを作っているにすぎません。
podmanプロジェクトチームは、podman kube
コマンドを自ら開発しているし、推奨もしています。podman kube
コマンドは、Kubernetes準拠のYAMLファイルを使ってボリュームやコンテナを管理します。
ちなみに僕はKubernetesには詳しくないです。なのであまり踏み込んだ説明はできないけど、これだけはハッキリしています。docker-composeよりKubernetesのほうがパワフルです。
また、Kubernetesと同じような機能を持つDocker Swarmなるものが開発されていたことがありました。でも「やっぱりKubernetesあるからDocker Swarmいらんよね」ってことで今となっては開発が終了しています。
こういった状況なので、docker-composeを無理して使うより、拡張性ありで、引き続きデファクトスタンダードであり続けるKubernetes準拠を優先したpodmanプロジェクトチームの判断は正しいんじゃないかなと思います。
ただ、podman kube
は敷居が高い選択肢ではあります。まずはKubernetesの勉強から始めないと理解できないことでしょう。そのあたり自分の事情に合わせて現実的な選択をするのがいいと思います。
繰り返しになるけど、僕はpodman-composeで間に合っちゃってます。
まとめ
ということで、まとめです。
- DockerDesktopは基本無料だけど従業員250人以上または1000万ドル以上稼ぐ企業が使う場合は有料
- そんな中規模以上の企業でもDockerEngineは無料で使える
- DockerEngineはLinuxにしかインストールできない
- WSL2やParallelsなどで作った仮想環境のLinuxにもDockerEngineをインストールすることができる
- Mac OSなら無料のPodmanがお手軽に使える
- podmanで複数のコンテナを一緒に管理したい場合はdocker-compose、podman-compose、podman kubeなどの選択肢がある
- ケンヂまるはpodman-composeで十分間に合っている