Docker Desktop for Mac ユーザーマニュアル

読む時間の目安: 8 分

Docker Desktop へようこそ! Docker Desktop for Mac ユーザーマニュアルでは Docker Desktop 設定をどのように行い、管理していくのかを説明しています。

Docker Desktop のダウンロード、システム要件、インストール手順については Docker Desktop のインストール を参照してください。

Preferences メニュー

Docker の Preferences メニューでは Docker に対する設定として、インストール設定、アップデート、バージョンチャネル設定、Docker Hub ログインなどを行うことができます。

メニューバー上の Docker メニュー クジラメニュー から Preferences を選び、以降に示す実行時オプションを設定します。

General タブ

Preferences

General タブにおいて Docker の起動をいつ行うかなどを設定します。

  • Start Docker Desktop when you log in(ログイン時に Docker Desktop を起動)= セッションを開始したときに自動的に Docker Desktop を起動します。

  • Include VM in Time Machine backups(Time Machine バックアップに VM を含める)= Docker Desktop 仮想マシンのバックアップに関するオプションを設定します。 このオプションはデフォルトでは無効になっています。

  • Use gRPC FUSE for file sharing(ファイル共有での gRPC FUSE の利用)= このチェックボックスをオフにすると、ファイル共有として従来の osxfs を利用します。

  • Send usage statistics(利用統計の送信)= Docker Desktop は、診断情報、クラッシュレポート、利用状況の各情報を送信します。 この情報を通じて Docker は改良を行い、アプリケーションのトラブルシューティングに役立てています。 チェックボックスをオフにすれば、データ送信を行いません。

  • Show weekly tips(1 週間ごとのアドバイス表示)= Docker 利用に関して便利なアドバイスや提案を表示します。

  • Open Docker Desktop dashboard at startup(起動時の Docker Desktop ダッシュボードの自動起動)= Docker Desktop の起動時にダッシュボードを自動的に開きます。

  • Use Docker Compose V2(Docker Compose V2 の利用)= このオプションを選択することで、docker-composeコマンドにより Docker Compose V2 の利用を有効にします。 詳しくは Docker Compose V2 を参照してください。

Resources タブ

Resources タブは、CPU、メモリ、ディスク、プロキシー、ネットワークといったリソースを設定します。

Advanced タブ

Advanced タブでは、Docker におけるリソースの利用制限を設定します。

Advanced Preference
settings-advanced

この Advanced 設定には以下のものがあります。

  • CPU = デフォルトにおいて Docker Desktop は、ホストマシン上で利用可能なプロセッサー数の半分を利用するものとして設定されています。 プロセッサー性能を向上させるには、この設定値を大きくします。 逆に抑止するには設定値を小さくします。

  • メモリ = デフォルトにおいて Docker Desktop は、実行時メモリとして2GB を利用するものとして設定されています。 この値は Mac 上において利用可能な全メモリ容量の中から割り当てられます。 RAM 容量を増やすには、この設定値を大きくします。 逆に減らすには、この設定値を小さくします。

  • スワップ = 必要に応じてスワップファイルサイズを設定します。 デフォルトは 1 GB です。

  • ディスクイメージサイズ = ディスクイメージのサイズを指定します。

  • ディスクイメージの保存場所 = コンテナーやイメージが保存される Linux ボリュームの場所を指定します。

ディスクイメージの保存場所は、別のところにすることができます。 移動させようとした保存場所に、すでにディスクイメージが存在していた場合は、プロンプトが表示され、既存のイメージを利用するか、イメージを置き換えるかが問われます。

File sharing タブ

File sharing(ファイル共有)を利用すると、Mac 内のローカルディレクトリを Linux コンテナー間で共有できるようになります。 たとえばホストにある IDE 環境上でソースコードを編集し、コードの実行やテストはコンテナー内で行うような場合に、大変便利なものです。 デフォルトにおいて/Users/Volume/private/tmp/var/foldersというディレクトリが共有されています。 開発プロジェクトが上記以外のディレクトリにある場合、その一覧にディレクトリを追加する必要があります。 これを行っていないと、実行時エラーとして Mounts denied(マウントが拒否されました)や cannot start service(サービスを起動できません)が発生します。

File share の設定には以下のものがあります。

  • Add a Directory(ディレクトリの追加)= +をクリックして、追加したいディレクトリを指定します。

  • Remove a Directory: Click - next to the directory you want to remove

  • Apply & Restart(適用および再起動)= Docker のバインドマウント(-v)機能を利用して、コンテナー間でのディレクトリ共有を可能にします。

共有フォルダー、パーミッション、ボリュームマウントに関するヒント

  • コンテナーにおいて必要となるディレクトリのみを共有するようにしてください。 ファイル共有にはオーバーヘッドがあります。 ホスト上のファイルへの変更は Linux VM に対する通知を必要とするためです。 共有ファイルが多いと CPU の高負荷を発生させ、ファイルシステムの性能低下を引き起こします。

  • 共有フォルダーは、アプリケーションコードの編集をホスト上で行い、その実行はコンテナー内にて行うということを実現するために用いられます。 ソースコード以外のキャッシュディレクトリやデータベースなどの場合は、データボリューム(名前つきボリューム)や データコンテナー を利用し、Linux VM 内に配置すれば、性能向上を図ることができます。

  • コンテナーに対してホームディレクトリ全体を共有する場合、MacOS からのプロンプトが表示され、ホームディレクトリ内の Reminders や Downloads などのような個人データへのアクセス権を Docker に与えるように示されます。

  • Linux のファイルシステムでは英字の大文字小文字が区別されますが、Mac はデフォルトではその区別は行われません。 Linux 上ではtestTestというファイルは 2 つの別ファイルとして生成可能です。 一方 Mac の場合、この 2 つのファイル名は、同一のファイルを参照することになります。 この状況から考えられるのは、Mac 上においてアプリが正しく動作する(それらのファイル内容を同一として扱う)ものであっても、Linux 上の本番環境に移行させて実行すると、失敗する(ファイル内容を別物として扱う)ということになります。 この状況を回避するために Docker Desktop では、共有ファイルはその元々のファイル名によりアクセスすることを求めています。 つまりtestというファイルが生成されていて、これを開くにはtestとして開かなければならないということです。 Testとして開こうとしたらNo such file or directoryというエラーとします。 同様にtestというファイルを生成しているなら、次にTestを生成しようとしたらエラーにするということです。 詳しくは Volume mounting requires file sharing for any project directories outside of /Users を参照してください。

Proxies タブ

Docker Desktop では macOS の HTTP/HTTPS プロキシー設定を検出して、その内容を Docker に対して自動的に伝えます。 たとえばプロキシー設定をhttp://proxy.example.comとしている場合、Docker はこのプロキシー情報を利用して、コンテナーのプル処理を行います。

If you want to configure proxies manually, turn on the Manual proxy configuration setting.

しかしそのプロキシー設定は、起動したコンテナーには伝えられません。 コンテナーに対してプロキシー設定を行いたい場合は、Linux 上において行うのと同じように、環境変数を使って定義することが必要です。 たとえば以下のとおりです。

$ docker run -e HTTP_PROXY=http://proxy.example.com:3128 alpine env

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=b7edf988b2b5
TERM=xterm
HOME=/root
HTTP_PROXY=http://proxy.example.com:3128

実行中のコンテナーに対して環境変数を設定する方法については 環境変数の設定 を参照してください。

Network タブ

Docker Desktop のネットワーク設定により、仮想プライベートネットワーク(VPN)上で動作するように設定することができます。 インターネットへの接続を有効にするには、ネットワークアドレス変換(NAT)のプリフィックスとサブネットマスクを設定していください。

Docker Engine タブ

Docker Engine のページでは、Docker デーモンに対して、コンテナーを実行させる方法を設定することができます。

テキスト入力欄に JSON 設定ファイルを入力して、デーモンを設定します。 オプションの全一覧についてはDocker Engine の dockerd コマンドラインリファレンス を参照してください。

Apply & Restart をクリックして設定内容を保存し、Docker Desktop を再起動します。

試験的機能タブ

On the Experimental Features page, you can specify whether or not to enable experimental features.

Experimental features provide early access to future product functionality. These features are intended for testing and feedback only as they may change between releases without warning or can be removed entirely from a future release. Experimental features must not be used in production environments. Docker does not offer support for experimental features.

Enable the new Apple Virtualization framework

Select Use the new Virtualization framework to allow Docker Desktop to use the new virtualization.framework instead of the ‘hypervisor.framework’. Ensure to reset your Kubernetes cluster when you enable the new Virtualization framework for the first time.

Enable VirtioFS

Docker Desktop for Mac lets developers use a new experimental file-sharing implementation called virtiofS; the current default is gRPC-FUSE. virtiofs has been found to significantly improve file sharing performance on macOS. For more details, see our blog post Speed boost achievement unlocked on Docker Desktop 4.6 for Mac.

To enable virtioFS:

  1. Verify that you are on the following macOS version:
    • macOS 12.2 or later (for Apple Silicon)
    • macOS 12.3 or later (for Intel)
  2. Select Enable VirtioFS accelerated directory sharing to enable virtioFS.

  3. Click Apply & Restart.

Kubernetes タブ

Docker Desktop には、Mac 上で稼動するスタンドアロンの Kubernetes サーバーが含まれます。 したがって Kubernetes 上に構築した Docker アプリをデプロイするテストができます。 Kubernetes サポートの有効化と、Docker コンテナーとして起動するスタンドアロン Kubernetes インスタンスのインストールを行うためには、Enable Kubernetes(Kubernetes の有効化)を実行します。

  • Select Show system containers (advanced) to view internal containers when using Docker commands.

  • Select Reset Kubernetes cluster to delete all stacks and Kubernetes resources. For more information, see Kubernetes.

  • Click Apply & Restart for your changes to take effect.

Reset タブ

Reset と Restart オプション

Docker Desktop Mac において Restart Docker DesktopReset to factory defaults、その他のリセットオプションは、Troubleshoot メニューにあります。

リセットオプションに関する詳細は ログ機能とトラブルシューティング を参照してください。

ソフトウェア更新

Software Updates(ソフトウェア更新)セクションは、Docker Desktop の最新版が利用可能であるかどうかを通知します。 最新アップデートがあれば、即座にダウンロードすることができます。 または Release Notes(リリースノート)オプションをクリックして、最新バージョンに含まれる内容を確認することもできます。

アップデート自動チェックの無効化

Docker Desktop 4.2.0 からは、Docker Personal や Docker Pro など、すべての Docker サブスクリプションにおいて、このオプションによる自動更新を無効にすることができます。 Docker Desktop 4.2.0 に更新して、この機能を利用してみてください。

チェックボックス Automatically check for updates(アップデートの自動チェック)をオフにすることで、この機能を無効にします。 これを行うと Docker メニューにおける通知が無効になります。 また Docker ダッシュボード上の通知バッチも表示されなくなります。 アップデートを手動でチェックするには、Docker メニューの Check for updates(アップデートのチェック)オプションを実行します。

Docker Desktop による最新アップデートの自動ダウンロードを、バックグラウンド実行により行うには、Always download updates(アップデートの常時ダウンロード)を選びます。 これを選ぶと、アップデートが入手可能になると、最新版がダウンロードされます。 アップデートのダウンロードが終了したら、Apply and Restart(適用と再起動)をクリックして、アップデートをインストールします。 同じことは Docker メニューか、あるいは Docker ダッシュボード内の Updates(更新)セクションからも行うことができます。

ダッシュボード

Docker ダッシュボードを利用すると、コンテナーやアプリケーションとのやりとりが行えるようになり、アプリケーションのライフサイクルを手元のマシンから管理することができます。 ダッシュボードの UI にはすべてのコンテナーが表示され、実行中、停止中、開始中といった状態が示されます。 提供されている UI は直感的になっていて、コンテナーや Docker Compose アプリケーションを確認したり管理したりといった通常操作を行うことができます。 詳しくは Docker ダッシュボード を参照してください。

TLS 証明書の追加

Docker デーモンに対しては、信頼できる認証局(Certificate Authorities; CAs)(レジストリサーバー証明書の確認のため)やクライアント証明書(レジストリの認証のため)を追加することができます。

カスタム CA 証明書の追加(サーバー側)

信頼できる CA (ルート証明書や中間 CA 証明書)はすべてサポートされます。 Docker Desktop では Mac キーチェーンに基づいて、信頼できる CA による証明書バンドルが生成されます。 そしてこれを Moby の信頼できる証明書に追加します。 したがってエンタープライズ向けの SSL 証明書が、ホスト上のユーザーによって認証されていると、それは Docker Desktop によって認証されているものとなります。

カスタマイズした自己署名の証明書を手動で追加するには、まずその証明書を macOS キーチェーンに追加してください。 こうしておけば Docker Desktop が証明書を認識してくれます。 たとえば以下のとおりです。

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt

あるいは、その証明書をローカルな独自キーチェーンにのみ追加したい(全ユーザー向けとはしたくない)場合は、以下のコマンドを実行します。

$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt

証明書のディレクトリ構造 も参照してください。

メモ: キーチェーンや~/.docker/certs.dディレクトリに変更を加えたら、これを有効にするために Docker Desktop を再起動することが必要です。

これを実現するための方法として、ブログ投稿 Adding Self-signed Registry Certs to Docker & Docker Desktop for Mac に説明が網羅されているので参照してください。

クライアント証明書の追加

クライアント証明書は~/.docker/certs.d/<MyRegistry>:<Port>/client.cert~/.docker/certs.d/<MyRegistry>:<Port>/client.keyに置きます。

Docker Desktop のアプリケーションが起動すると、Mac 上の~/.docker/certs.dフォルダーの内容が、Moby(Docker Desktop の仮想マシンxhyve)の/etc/docker/certs.dディレクトリにコピーされます。

  • キーチェーンや~/.docker/certs.dディレクトリに変更を加えたら、これを有効にするために Docker Desktop を再起動することが必要です。

  • レジストリ一覧において、レジストリは 安全な レジストリの扱いになります。 (Docker Engine を参照してください。) Docker Desktop では、安全でない(insecure)レジストリのもとにある証明書は無視します。 そしてクライアント証明書を送信することはなくなります。 docker runなどのコマンドを通じてそのレジストリからプルを行おうとすると、コマンドライン上にエラーメッセージが出力されます。 レジストリ上でもエラー発生します。

証明書のディレクトリ構造

以下のようなディレクトリ構造がすでにある場合は、Mac OS へのログインにあたって、CA を手動で追加する必要はありません。

/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
   ├── ca.crt
   ├── client.cert
   └── client.key

さらに以下では、カスタム証明書を利用する場合の設定状況を示しています。

/etc/docker/certs.d/        <-- 証明書ディレクトリ
└── localhost:5000          <-- ホスト名:ポート
   ├── client.cert          <-- クライアント証明書
   ├── client.key           <-- クライアント鍵
   └── ca.crt               <-- レジストリ証明書により署名された CA

以下のようなディレクトリ構造にすることもできます。 CA 証明書がキーチェーンにも存在しているものとします。

/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
    ├── client.cert
    └── client.key

レジストリにおける CA ルート証明書のインストール方法、あるいはクライアント TLS 証明書の設定方法については、Docker Engine の説明内にある 証明書を使ったリポジトリクライアントの確認 を参照してください。

シェル補完のインストール

Docker Desktop には、dockerdocker-composeコマンドにおいて、入力補完を可能とするスクリプトがあります。 補完スクリプトはContents/Resources/etc/ディレクトリのDocker.app内にあります。 これは Bash および Zsh においてインストールすることができます。

Bash

Bash には 入力補完のためのビルトインサポート があります。 Docker コマンドに対して入力補完を有効にするには、bash_completion.d/ディレクトリに上記ファイルをコピーするかシンボリックリンクを張ります。 たとえば Homebrew から Bash をインストールしている場合は、以下のようにします。

etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.bash-completion $(brew --prefix)/etc/bash_completion.d/docker
ln -s $etc/docker-compose.bash-completion $(brew --prefix)/etc/bash_completion.d/docker-compose

そして以下の記述を~/.bash_profileに追加します。

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

または以下を追加します。

if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi

Zsh

Zsh においては、入力補完システム というものが処理を行ってくれます。 Docker コマンドに対する入力補完を有効にするには、上記ファイルを Zsh のディレクトリsite-functions/にコピーするかシンボリックリンクを張ります。 たとえば Homebrew から Zsh をインストールしている場合は、以下のようにします。

etc=/Applications/Docker.app/Contents/Resources/etc
ln -s $etc/docker.zsh-completion /usr/local/share/zsh/site-functions/_docker
ln -s $etc/docker-compose.zsh-completion /usr/local/share/zsh/site-functions/_docker-compose

Fish-Shell

Fish-shell でも、タブ入力による 入力補完システム をサポートしています。 Docker コマンドに対する入力補完を有効にするには、上記ファイルを Fish-shel のディレクトリcompletions/にコピーするかシンボリックリンクを張ります。

まずcompletionsディレクトリを生成します。

$ mkdir -p ~/.config/fish/completions

Docker の Fish 入力補完を追加します。

$ ln -shi /Applications/Docker.app/Contents/Resources/etc/docker.fish-completion ~/.config/fish/completions/docker.fish
$ ln -shi /Applications/Docker.app/Contents/Resources/etc/docker-compose.fish-completion ~/.config/fish/completions/docker-compose.fish

Docker Hub

Docker Desktop メニューから Sign in /Create Docker ID を選択すれば Docker Hub アカウントを使ってアクセスすることができます。 ログインした後は、Docker Desktop メニューから、Docker Hub リポジトリや組織に直接アクセスすることができます。

詳しい情報については、以下の Docker Hub トピック を参照してください。

2 要素認証

Docker Desktop では Docker Hub へのサインイン時に 2 要素認証(two-factor authentication)を利用することができます。 2 要素認証は Docker Hub アカウントへのアクセス時に、二重のセキュリティを提供するものです。

Docker Desktop 経由で Docker Hub アカウントへのサインインを行う前には、あらかじめ 2 要素認証を有効にしておく必要があります。 その手順については Docker Hub における 2 要素認証の有効化 を参照してください。

2 要素認証の有効化が済んだら、以下を行います。

  1. Docker Desktop メニューから Sign in / Create Docker ID を実行します。

  2. Docker ID とパスワードを入力して Sign in をクリックします。

  3. サインインに成功したら、Docker Desktop が認証コードの入力を求めてきます。 電話に届いた 6 桁のコードを入力して Verify をクリックします。

Docker Desktop の 2 要素認証

認証が正常に行われたら、Docker Desktop メニューから組織やリポジトリに直接アクセスできるようになります。

一時停止/再開

Docker Desktop 4.2 のリリース以降では、Docker Desktop セッションを活用していない場合に、これを一時停止できるようになりました。 これにより、マシンの CPU リソース消費を節約できます。 Docker Desktop を一時停止すると、Docker Engine を稼働させている Linux VM が一時停止します。 そして各コンテナーのその時点での状態が、すべてメモリ上に保存された上で、すべてのプロセスは停止します。 このときには CPU 使用量が軽減され、ノート PC であればバッテリー駆動を長く保つことができます。 Resume(再開)オプションをクリックすれば、いつでも Docker Desktop を再開することができます。

Docker メニューから クジラメニュー > Pause(一時停止)を選べば、Docker Desktop が一時停止されます。

Docker コンテキストメニュー

Docker Desktop は一時停止のステータスであることが Docker メニュー上に表示されます。 同様に Docker ダッシュボード上の Containers / AppsImagesVolumesDev Environment の各画面にも表示されます。 Docker Desktop が一時停止されていても、ダッシュボードの PreferencesTroubleshoot メニューにはアクセスすることができます。

クジラメニュー > Resume(再開)を選べば、Docker Desktop を再開できます。

メモ

Docker Desktop を一時停止すると、Docker CLI において実行中であったコマンドは、後に Docker Desktop を自動的に再開させます。

フィードバックやヘルプ

コミュニティのヘルプを必要とする場合は、最新のユーザートピックを確認し、ディスカッションへの参加、開始をしてみてください。 Docker Desktop for Mac フォーラム にログインして行います。

バグや問題を報告するには、Docker Desktop for Mac 向けの GitHub issue にログインして、コミュニティによって報告済みの issue を確認してください。 そして新たな issue をあげてください。 詳しくは ログ機能とトラブルシューティング を参照してください。

ドキュメントに関するフィードバックや更新提案については ドキュメントへの貢献 を参照してください。

次に読むものは

mac, tutorial, run, docker, local, machine