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 タブ
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 設定には以下のものがあります。
-
CPU = デフォルトにおいて Docker Desktop は、ホストマシン上で利用可能なプロセッサー数の半分を利用するものとして設定されています。 プロセッサー性能を向上させるには、この設定値を大きくします。 逆に抑止するには設定値を小さくします。
-
メモリ = デフォルトにおいて Docker Desktop は、実行時メモリとして
2
GB を利用するものとして設定されています。 この値は 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 上では
test
とTest
というファイルは 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:
- Verify that you are on the following macOS version:
- macOS 12.2 or later (for Apple Silicon)
- macOS 12.3 or later (for Intel)
-
Select Enable VirtioFS accelerated directory sharing to enable virtioFS.
- 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 Desktop、Reset 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 には、docker
やdocker-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 要素認証の有効化が済んだら、以下を行います。
-
Docker Desktop メニューから Sign in / Create Docker ID を実行します。
-
Docker ID とパスワードを入力して Sign in をクリックします。
-
サインインに成功したら、Docker Desktop が認証コードの入力を求めてきます。 電話に届いた 6 桁のコードを入力して Verify をクリックします。
認証が正常に行われたら、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 Desktop は一時停止のステータスであることが Docker メニュー上に表示されます。 同様に Docker ダッシュボード上の Containers / Apps、Images、Volumes、Dev Environment の各画面にも表示されます。 Docker Desktop が一時停止されていても、ダッシュボードの Preferences と Troubleshoot メニューにはアクセスすることができます。
> Resume(再開)を選べば、Docker Desktop を再開できます。
メモ
Docker Desktop を一時停止すると、Docker CLI において実行中であったコマンドは、後に Docker Desktop を自動的に再開させます。
フィードバックやヘルプ
コミュニティのヘルプを必要とする場合は、最新のユーザートピックを確認し、ディスカッションへの参加、開始をしてみてください。 Docker Desktop for Mac フォーラム にログインして行います。
バグや問題を報告するには、Docker Desktop for Mac 向けの GitHub issue にログインして、コミュニティによって報告済みの issue を確認してください。 そして新たな issue をあげてください。 詳しくは ログ機能とトラブルシューティング を参照してください。
ドキュメントに関するフィードバックや更新提案については ドキュメントへの貢献 を参照してください。
次に読むものは
-
はじめよう に示されているウォークスルーを試してみてください。
-
Docker Labs にあるウォークスルーやソースコードを参照して、理解を深めてください。
-
コマンドラインインターフェース(CLI)コマンドのまとめについては Docker CLI リファレンスガイド を参照してください。
-
ブログ投稿 What’s New in Docker 17.06 Community Edition (CE) を確認してみてください。