DockerデスクトップなしでmacOSにdocker-engineをインストールする方法は?

DockerデスクトップなしでmacOSにdocker-engineをインストールする方法は?

最近、Dockerは特定のタイプのユーザーにDocker Desktopがもはや無料ではないと発表しました。お知らせを参照してくださいブログ投稿

Docker Desktop®独自の機能は必要ありません。私はDebianがインストールされているノートブックでドッカーを使用していますが、このバージョンで十分です。

macOSにLinuxバージョンのDockerをインストールする方法はありますか??エンジンとCLIツールが必要です。それがすべてです。ビルドコマンド、プッシュ、タグ、実行、docker-composeなどを実行します。

答え1

dockerに代わるものがあります。ポッドキャスト

  1. 取付ける:brew install podman
  2. 仮想マシンをダウンロードして準備します。podman machine init
  3. 仮想マシンを開きます。podman machine start
  4. ドッカーの使用:podman run -d -p 8000:80 nginx
  5. コンテナチェック:podman ps
  6. 相互作用:curl localhost:8000

それを使うQEMU以下の仮想化とマシン設定のためにFedora CoreOS基本的に。

インストール後にデフォルトのマシンと仮想化環境の詳細にアクセスするには:

cat ~/.config/containers/podman/machine/qemu/podman-machine-default.json

答え2

私のMacbookでは、homebrewを介してdockerをインストールしました。

brew install docker docker-compose docker-machine xhyve docker-machine-driver-xhyve

(これはdocker Desktopがnon-freeになる前でしたが、まだ動作すると思います)

xhyveを仮想マシンとして使用するため、デフォルトではxhyve内でLinuxディストリビューションを実行し、そのLinuxディストリビューション内でDockerを実行します。

いくつかの構成を実行する必要があります。私は従いました。この記事

仮想マシンを生成するコマンドラインは次のとおりです。

docker-machine create default --driver xhyve --xhyve-experimental-nfs-share=true --xhyve-disk-size "40000"

答え3

私が知っている限り、DockerはMacOSと機能的に互換性がありません。私のMacbookで実行されているDockerデスクトップがあり、私が知っている限り、これはDockerデスクトップを持つLinux仮想マシンを作成し、その中でDockerエンジンを実行することによって行われます。

これは、Docker DesktopがDockerエンジン自体とは無関係の「ディスクイメージサイズ」を含むリソース割り当ての概念を持つ理由を説明します。


macOSにLinuxバージョンのDockerをインストールする方法はありますか?

いいえ、Linux仮想マシンがなければ不可能です。 Dockerはラッパーだからです。名前空間そしてcgroupこれはすべてLinuxの概念であり、MacOSカーネルでは実装されていません。

これら2つの機能はコンテナ技術の中核であるため、Docker以外のソリューション(Podmanを含む)が機能する可能性はほとんどありません。Linux仮想マシンを使用しない限り。


Docker Desktop®独自の機能は必要ありません。

私はあなたの要求を知らないかもしれません。ただし、Dockerデスクトップの一部の機能が「機能」であることを認識していないまま使用している可能性があることに注意してください。たとえば、dockerバインドマウントはdockerの重要な概念ですが、Macで動作するには、docker DesktopがMacOSとLinux仮想マシン間のギャップを減らす役割も担当する必要があります。


独自の仮想マシンを実行するには、次のハイパーバイザーの使用を検討できます。仮想ボックスMacで独自のLinux仮想マシンを実行してみてください。

答え4

DockerがDocker Desktopがもはや無料ではないと発表したとき、私は代わりにいくつかの研究を行い、macOSホストでDocker CLIを使用している間にDebian VMでDockerエンジンを実行する方法を見つけました。 「Mac M1」というタイトルの記事で、Mac M1でこれを行う方法についてのガイドラインを文書化しました。Debian 10.4 Dockerエンジンを使用するようにmacOS M1 Arm64にDockerを設定します。

当初はDocker Desktop 4.0より前のバージョンで無料で提供されているDocker CLIを使用していましたが、2022年11月現在は非常に古くて古いCLIなので、Docker DesktopなしでDocker CLIをインストールするにはBrewを使用してください。

$ brew install docker docker-compose

その後、Linuxを実行するには一種の仮想マシンが必要です。 Intel Macを使用している場合は、VirtualBoxのようなオプションがありますが、ARM M1 Macでは、当時の最高の無料ソリューションは次のとおりです。UTM。一つダウンロードしましたテンプレートライブラリのDebian VM次にDocker Webサイトの指示に従ってください。Debian に Docker エンジンをインストールする:

以前のDockerコンポーネントとインストールリポジトリの削除 - Debian VMで実行

$ sudo apt-get remove docker docker-engine docker.io containerd runc

$ sudo apt-get update

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

$ sudo mkdir -p /etc/apt/keyrings

$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Debian VM に Docker エンジンと Docker Compose をインストールする

最後のステップは、Linuxに最新バージョンのDockerをインストールすることです。

$ sudo apt-get update -y && sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

仮想マシンへのopenssl-serverのインストール

ホストCLIを仮想マシンに接続するには、SSHポート転送を使用してホストのソケットを/var/run/docker.sockに接続する必要があります。ホストがネットワーク経由でVMのSSHポートに接続できるように、DebianサーバーにSSHをインストールして設定し、UTM設定でポートを開く必要があります。 UTM ではホスト ポート 22022 をゲスト ポート 22 に転送したため、次の手順ではポート 22022 への参照を表示できます。

Debian 仮想マシンで:

$ sudo apt-get update -y && sudo apt-get install openssl-server

ホストCLIをVMに接続し、コンテナを実行します。

Dockerをこのように実行するときは、ホストと仮想マシンの間にSSHトンネルを作成し、接続されたソケットを指すようにDOCKER_HOSTを設定します。

macOS ホストで実行:

$ ssh [email protected] -p 22022 -N -L/tmp/docker-on-debian.sock:/var/run/docker.sock ssh://[email protected]

$ export DOCKER_HOST=unix:///tmp/docker-on-debian.sock

接続をリセットするために仮想マシンを再起動するたびに、この手順を実行する必要があります。 bashスクリプトを使用して自動化できます。ここに一連のbashスクリプトを作成しました。ドッカーデブそのための店。

自動的に発生しないもう1つのことは、コンテナがリッスンしているポートを開くことです。これは仮想マシンで行うことができますが、再構成するために仮想マシンをシャットダウンする必要がないようにSSHポート転送を再利用する方が便利です。

たとえば、ポート4444でリッスンするコンテナを実行するには、トンネルも作成する必要があります。

macOS ホストで実行:

$ ssh [email protected] -p 22022 -N -L4444:127.0.0.1:4444

次にコンテナを実行します。

macOS ホストで実行:

$ docker run --rm -it -p 4444:4444 --shm-size 2g seleniarm/standalone-chromium:latest

ポートが開いていることを確認するために、curl -L http://localhost:4444/status200 OK応答を取得できます。

婦人声明

多くの場合、私は大きな問題なしでpodmanとpodman-machineを使います。ただし、このDocker / Debian VM設定は、Podmanの競合が発生した場合に便利でした。たとえば、私はCIサーバー上でDockerのbuildxを使用して複数のアーキテクチャコンテナを構築することを好みます。そのため、ローカルで作業している間、UTM VMでこのDocker設定を使用してリンゴとリンゴを比較しました。

私はこれがMacでDockerを実行する最も簡単な方法だとは思わない。多くの一般的なユースケースでは、他の答えの1つで十分です。しかし、Dockerが内部的にどのように機能するのかを理解したい場合は、仮想マシンで直接実行してみるとよりよく理解できると言います。

関連情報