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 のインストール を御覧ください。
バージョンの確認¶
docker と docker-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 )機能で利用できるようになります。
詳しい情報は、こちらをご覧ください。
- osxfs ファイルシステム共有 の Namespaces のトピック内
- mac-volume-mounting-requires-file-sharing-for-any-project-directories-outside-of-users
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_PROXY 、 http_proxy 、 no_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 クラスタのような他の環境を向いている場合は、 kubectl
が docker-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 には、 docker
と docker-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 で二要素認証を有効にする をご覧ください。
二要素認証を有効化した後、
- Docker Desktop のメニューから「 Sign in / Create Docker ID 」を選択。
- Docker ID とパスワードを入力し、 Sign in (サインイン)をクリック。
- サインインに成功した後、 Docker Desktop で認証コード(authentication code)の入力を求める画面が開きます。電話に届いた6桁のコードを入力し、 Verify (確認)をクリックします。
認証に成功したら、Docker Desktop のメニューから organization やリポジトリにアクセス可能になります。
次は何をしますか¶
- 始めましょう を一通り試しましょう。
- Docker Labs の例を通したりソースコードを深く掘り下げましょう。
- Docker コマンドライン・インターフェース(CLI)コマンドのまとめについては、 Docker CLI リファレンスガイド をご覧ください。
- What's New in Docker 17.06 Community Edition (CE) のブログ記事をご覧ください。
参考
- Get Started with Docker for Mac OS X
- https://docs.docker.com/mac/