Docker for Mac を始めよう

Docker Desktop へようこそ!

Docker Desktop for Mac のセクションは、Docker Desktop コミュニティ安定版リリース(Community Stable release)に関する情報を扱います。エッジリリース(Edge release)に関する情報は、 Edge リリースノート を御覧ください。Docker デスクトップ・エンタープライズ(DDE)リリースに関する情報は Docker Desktop Enterprise を御覧ください。

Docker とは、コンテナ化したアプリケーションを構築・実行・共有するための、全てが揃った開発プラットフォームです。Mac 上で Docker を使い始めるためには、Docker Desktop が最も良い方法です。

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

バージョンの確認

dockerdocker-compose が更新され、 Docker.app と互換性があるバージョンかどうか確認しましょう。異なるバージョンを実行していれば、以下のような表示とは異なるでしょう。

$ docker --version
Docker version 19.03, build c97c6d6

アプリケーションの探索

1. コマンドライン・ターミナルを開き、シンプルな Docker イメージ hello-world を実行し、インストールが正常に終わったかどうかを確認します。

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
...

2. Docker 化したウェブサーバを開始します。先ほどの `hello-world`イメージのように、もしもイメージがローカルで見つからなければ、Docker は Docker Hub から取得します。

$ docker run --detach --publish=80:80 --name=webserver nginx

3. ウェブ・ブラウザで http://localhost を指定し、nginx のスタートページを開きます( :80 を追加する必要はありません。 docker コマンドで標準の HTTP ポートを指定したからです)。

4. 詳細を確認( docker container ls または docker ps )すると、ウェブサーバが実行中( running )と分かります。

$ docker container ls
CONTAINER ID   IMAGE   COMMAND                  CREATED              STATUS              PORTS                         NAMES
56f433965490   nginx   "nginx -g 'daemon off"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 443/tcp   webserver

5. 以下のコマンドを実行し、コンテナの停止とイメージを削除します。停止したコンテナを確認するには、 "all" (すべて)フラグ( --all または -a)を使います。

$ docker container ls
$ docker container stop webserver
$ docker container ls -a
$ docker container rm webserver
$ docker image ls
$ docker image rm nginx

Preferences (設定)

メニューバーの Docker メニュー(鯨アイコン) > Preference (設定)を選択すると、以下で説明している実行時のオプションを調整できます。

General(一般的な設定)

設定画面の General タブでは、Docker の起動と更新を設定できます。

  • Start Docker when you log in - セッションの開始時、自動的に Docker Desktop を起動します。
  • Automatically check for updates - デフォルトでは、Docker Desktop は自動的に更新を確認し、更新版が利用可能な場合は通知します。承諾して更新版をインストールするには OK をクリックします(あるいは、現在のバージョンを維持する場合は、キャンセルします)。メインの Docker メニューから Check for Updates (更新を確認)で、手動での更新ができます。
  • Include VM in Time Machine backups (タイムマシン・バックアップに仮想マシンを含める) - このオプションを選択すると、Docker Desktop 仮想マシンをバックアップします。このオプションは、デフォルトでは無効です。
  • Securely store Docker logins in macOS keychain (macOS キーチェーンに Docker ログイン情報を安全に保管) - Docker Desktop は、Docker login 認証情報を macOS キーチェーンにデフォルトで保存します。
  • Send usage statics - デフォルトでは、Docker Desktop は診断情報・クラッシュ報告・利用データを送信します。この情報は、 Docker の改善やアプリケーションの問題解決に役立ちます。止めるにはチェックボックスを空にします。Docker は定期的に更なる情報を訊ねるかもしれません。

Switch to the Edge version (Edge バージョンの切り替え)をクリックすると、Docker Desktop Edge リリースに関する情報を学べます。

Resources(リソース)

ADVANCED(高度な設定)

Advanced タブでは、 Docker が利用できるリソースに制限をかけます。

Advanced 設定とは、

  • CPUs (CPU): デフォルトでは、 ホスト・マシン上で利用可能なプロセッサ数の半分を、Docker Desktop が使います。総理能力を向上するには、この値を高くします。減らすには、数値を低くします。
  • Memory (メモリ): デフォルトでは、 マシン上で利用可能な全メモリから 2 GB の実行メモリを使用する設定です。RAM を増やすには、この値を高くします。減らすには、値を低くします。
  • Swap (スワップ): 必要になるスワップ・ファイル容量を設定します。デフォルトは 1 GB です。
  • Disk image size (ディスク・イメージ容量): ディスク・イメージの容量を指定します。
  • Disk image location (ディスク・イメージの場所): Linux ボリュームの場所を指定します。ここにコンテナとイメージを置きます。

また、ディスク・イメージは別の場所に移動できます。ディスク・イメージの指定先に既にイメージがある場合は、既存のイメージを使うか置き換えるか訊ねる画面を表示します。

FILE SHARING(ファイル共有)

Linux コンテナと共有したいローカルのディレクトリを選択します。これはホスト上の IDE を用い、コンテナ内でコードの実行やテストをしている場合、ソースコードの編集に特に役立ちます。デフォルトでは /Users/Volume/private/tmp/var/folders ディレクトリが共有されます。プロジェクトがこのディレクトリ外であれば、必ずこのリストに追加する必要があります。そうしなければ、 Mounts denied (マウント拒否)や cannot start serice (サービスを開始できない)エラーが実行時に出るでしょう。

ファイル共有を設定するには:

  • Add a Directory(ディレクトリの追加) : + をクリックし、追加したいディレクトリを選択します。
  • Apply & Restart (適用と再起動)によって、対象ディレクトリが Docker のバインド・マウント( -v )機能で利用できるようになります。

詳しい情報は、こちらをご覧ください。

PROXIES(プロキシ)

Docker Desktop は、HTTP/HTTPS プロキシ設定を調整し、自動的に Docker とコンテナに対して情報を伝達(propagate)します。例えば、 http://proxy.example.com に対してプロキシ設定をすると、Docker はコンテナの取得時にこのプロキシを使います。

コンテナが実行中であれば、コンテナ内にプロキシ設定が伝わっているかどうか確認できます。例:

$ docker run -it 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
http_proxy=http://proxy.example.com:3128
no_proxy=*.local, 169.254/16

こちらの結果では、 HTTP_PROXYhttp_proxyno_proxy 環境変数が設定されているのが分かります。プロキシ設定を変更した場合は、新しい設定を適用するために、Docker は自動的に再起動します。再起動後もコンテナを実行し続けたい場合には、 再起動ポリシー の利用を検討すべきでしょう。

NETWORK (ネットワーク)

Docker Desktop のネットワーク機能を、仮想プライベート・ネットワーク(VPN)でも機能するように設定できます。インターネットとの疎通を有効にするには、ネットワーク・アドレス変換(NAT)プリフィックスとサブネットマスクを設定します。

Docker Engine (Docker エンジン)

Docker Engine のページでは、Docker デーモンの設定や、どのようにしてコンテナを実行するかを決められます。

デーモンの設定をするには、テキストボックス内に JSON 形式の設定ファイルとして入力します。オプションの一覧については、 Docker Engine の dockerd コマンドライン・リファレンス を御覧ください。

Apply & Restart (適用と再起動)をクリックし、設定を保存して Docker Desktop を再起動します。

Command Line (コマンドライン)

コマンドラインのページでは、experimental features(実験的機能)を有効にするかどうかを指定できます。

実験的機能は、今後提供する機能を先行利用できます。各機能は、テストやフィードバックを意図した、参考程度のものです。そのため、リリース時までに警告が出たり、今後のリリースでは削除されたりする場合があります。本番向けの環境では、実験的機能を決して使わないでください。Docker は実験的機能に対するサポートを提供していません。

注意

Docker コマンドラインツールで実験的機能を有効にするには、 config.json ファイルを編集し、 experimental を有効化するよう指定します。

Docker Desktop のメニューから実験的機能を有効にするには、 Settings (設定) → Command Line (コマンドライン)をクリックし、 Enable experimental features (実験的機能の有効化)ボタンを押します。 Apply & Restart (適用と再起動)をクリックします。

Docker Desktop Edge リリースは、デフォルトで Docker エンジンの実験的なバージョンが有効です。詳細は Git Hub 上の Docker 実験的機能 README(英語) を御覧ください。

Docker Desktop Edge と Stable リリースのいずれでも、実験的機能の有効化と無効化を切り替えできます。実験的機能を無効化すると、Docker Desktop は現時点の Docker エンジン安定版リリースを使います。

実験的機能が有効かどうかを確認するには、 docker version を実行します。実験的モードは Server データ下の一覧に状態があります。もしも以下のように Experimental (実験的)が true (真)であれば、Docker は実験的モードで動作しています。( false であれば、実験的機能なオフです)

> docker version

Client: Docker Engine - Community
 Version:           19.03.1
 API version:       1.40
 Go version:        go1.12.5
 Git commit:        74b1e89
 Built:             Thu Jul 25 21:18:17 2019
 OS/Arch:           darwin/amd64
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          19.03.1
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.5
  Git commit:       74b1e89
  Built:            Thu Jul 25 21:17:52 2019
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          v1.2.6
  GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
 runc:
  Version:          1.0.0-rc8
  GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Kubernetes

Docker Desktop には単独の Kubernetes サーバを含みます。Kubernetes は Mac ホスト上で実行できますので、Kubernetes 上に Docker ワークロードを試験的にデプロイできます。

Kubernetes クライアント・コマンドの kubectl が組み込まれており、ローカルの Kubernetes サーバに接続するよう設定済みです。もしも既に kubectl をインストール済みで、 minikube や GKE クラスタのような他の環境を向いている場合は、 kubectldocker-for-desktop を指し示すように切り替わっているかどうか確認します。

$ kubectl config get-contexts
$ kubectl config use-context docker-desktop

もしも :code:kubectl` を Homebrew でインストールする場合や、他の手法を使うかして、何らかの競合が発生する場合は /usr/local/bin/kubectl を削除します。

  • Kubernetes サポートを有効化し、Kubernetes の独立したインスタンスを Docker コンテナとしてインストールするには、 Enable Kubernetes (Kubernetes 有効化)をクリックします。Kubernetes を デフォルトのオーケストレータ に指定するには、 Deploy Docker Stack to Kubernetes by default を選択します。

Apply & Restart (適用と再起動)をクリックし、設定を保存します。 Kubernetes サーバをコンテナとして実行するために必要なイメージが実体化(インスタンス化)され、 /usr/local/bin/kubectl コマンドが Mac 上にインストールされます。

Kubernetes を有効化して実行している場合は、Docker Desktop 設定ダイアログの右横に、ステータス・バーの追加アイテムを表示します。

Docker メニューの Kubernetes のステータスは、作業対象を docker-desktop と表示します。

  • デフォルトで、Kubernetes コンテナは docker service ls のようなコマンドで非表示です。この理由は、手動での(Kubernetes)管理がサポートされていないからです。これらを表示するには Show system containers (advances) (システムコンテナの表示〔高度〕)を選びます。多くの利用者には不要なオプションです。
  • Enable Kubernetes (Kubernetes 有効化)のチェックボックスをクリアしたら、Kubernetes サポートはいつでも無効にできます。無効により、この Kubernetes コンテナを停止及び削除し、 /usr/local/bin/kubectl コマンドも削除します。

Docker Desktop で Kubernetes 統合機能を使う詳しい情報は、 Kubernetes 上にデプロイ をご覧ください。

リセット

注釈

リセットと再起動オプション

Docker Desktop Mac では、 Troubleshoot (トラブルシュート)のメニュー上から、 Restart Docker Desktop (Dockerデスクトップの再起動)と Reset to factory defaults (初期値にリセットする)オプションを利用できます。

詳しい情報は ログとトラブルシューティング を御覧ください。

ダッシュボード

Docker Desktop ダッシュボードを通して、マシン上にあるコンテナとアプリケーションを用いる、アプリケーションのライフサイクルと管理をやりとりできます。ダッシュボードの UI を通して見えるのは、全ての実行中、停止中、開始中のコンテナと状態です。直感的なインターフェースを通して、コンテナや Docker Compose アプリケーションに対する調査と管理といった共通動作が行えます。より詳しい情報は、 Docker Desktop ダッシュボード をご覧ください。

TLS 証明書の追加

Docker デーモンが、レジストリ・サーバ証明書と クライアント証明書 の検証用に、信頼できる 認証局(CA; Certificate Authorities) を追加してレジストリを認証できます。

カスタム 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

また、 mac-directory-structures-for-certificates もご覧ください。

注釈

キーチェーンに対する何らかの変更をするか、 ~/.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 の再起動が必要です。
  • レジストリは insecure (安全ではない)レジストリとして表示されません( Docker Engine (Docker エンジン) をご覧ください )。Docker Desktop は安全ではないレジストリにある証明書を無視します。そして、クライアント証明書も送信しません。 docker run のようなレジストリから取得するコマンドは、コマンドライン上でもレジストリでもエラーになるメッセージが出ます。

認証情報のディレクトリ構造

次のディレクトリ構造の場合、Mac OS システムログインのため、CA 証明書を手動で追加する必要はありません。

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

以下は、カスタム証明書を設定例と説明を追加したものです:

/etc/docker/certs.d/        <-- Certificate directory
└── localhost:5000          <-- Hostname:port
   ├── client.cert          <-- Client certificate
   ├── client.key           <-- Client key
   └── ca.crt               <-- Certificate authority that signed
                                the registry certificate

あるいは、CA 証明書が自分のキーチェンにあれば、次のようなディレクトリ構造にもできます。

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

認証用にクライアント TLS 証明書を設定する方法を学ぶには、Docker エンジンの記事 :doc:`証明書でリポジトリ・クライアントを確認する </engine/security/certificates>`_ を御覧ください。

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

Docker Desktop には、 dockerdocker-compose のコマンド補完を有効化するスクリプトがあります。補完スクリプトは Docker.app 内の Contents/Resources/etc ディレクトリ内にあり、 Bash と Zsh の両方にインストールできます。

Bash

Bash は `補完のサポートを内蔵 <https://www.debian-administration.org/article/316/An_introduction_to_bash_completion_part_1`_ しています。Docker コマンドの補完をできるようにするには、 bash_completion.d/ ディレクトリ内に各ファイルをコピーしたり symlink を作成必要があります。たとえば、 `Homebrew <http://brew.sh/`_ 経由で 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/ ディレクトリに各ファイルをコピーするか symlink する必要があります。以下は 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-shell の completions ディレクトリにコピーするか symlink する必要があります。

completions ディレクトリを作成します:

mkdir -p ~/.config/fish/completions

次に docker から fish completions を追加します。

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 Desktop for Mac forum にログオンください。

バグや問題の報告をするには、 GitHub の Mac issues にログオンし、そこでコミュニティに報告された報告を見たり、新しい課題を追加できます。詳細は [ログとトラブルシューティング] をご覧ください。

ドキュメントのに対するフェイードバックの提供や、自分自身で更新する方法は、 コントリビュート のドキュメントをご覧ください。

Docker Hub

自分の Docker Hub アカウントでアクセスするには、Docker Desktop のメニューから **Sing in/Create Docker ID ** (サインイン/Docker ID 作成)を選びます。一度ログインしておけば、Docker Desktop のメニューから Docker Hub リポジトリに直接アクセス可能になります。

詳しい情報は、以下の :doc:`Docker Hub 記事 </docker-hub/toc) をご覧ください。

二要素認証

Docker Desktop では、Docker Hub へのログインに二要素認証(Two-factor authentication)を有効化できます。二要素認証は Docker Hub アカウントにアクセスするとき、追加のセキュリティ段階を提供します。

Docker Hub での二要素認証を有効化する前に、Docker Desktop を通して Docker Hub アカウントにサインインする必要があります。手順は Docker Hub で二要素認証を有効にする をご覧ください。

二要素認証を有効化した後、

  1. Docker Desktop のメニューから「 Sign in / Create Docker ID 」を選択。
  1. Docker ID とパスワードを入力し、 Sign in (サインイン)をクリック。
  1. サインインに成功した後、 Docker Desktop で認証コード(authentication code)の入力を求める画面が開きます。電話に届いた6桁のコードを入力し、 Verify (確認)をクリックします。

認証に成功したら、Docker Desktop のメニューから organization やリポジトリにアクセス可能になります。

次は何をしますか

  • Docker Labs の例を通したりソースコードを深く掘り下げましょう。
  • Docker コマンドライン・インターフェース(CLI)コマンドのまとめについては、 Docker CLI リファレンスガイド をご覧ください。

参考

Get Started with Docker for Mac OS X
https://docs.docker.com/mac/