Docker Desktop for Linux (ベータ版)

読む時間の目安: 4 分

Docker Desktop for Linux(ベータ版)へようこそ。 このベータ版は、Docker Desktop for Linux をいち早く試したい方、フィードバックを提供して頂ける方に向けたものです。

Docker Desktop は簡単にインストールできるアプリケーションであり、これを使えばコンテナー化アプリケーションやマイクロサービスをビルドして共有できるようになります。 Docker Desktop for Linux (DD4L) は 公開ロードマップ において、2 番めに人気を集めた機能リクエストにあがっていました。

ダウンロードとインストール

Docker Desktop for Linux(ベータ版)は今のところ Ubuntu 21.04, 21.10 および Debian において利用できます。

メモ

Docker Desktop は仮想環境がネストする状態をサポートしていません。 Docker Desktop for Linux の実行は、ネイティブな Ubuntu または Debian の配布を利用することをお勧めします。

Docker Desktop for Linux をインストールするには以下のようにします。

  1. Docker リポジトリ を設定します。
  2. Debian パッケージをダウンロードしてインストールします。 これまでにプレビュー版をインストールしている場合は、sudo apt remove docker-desktopを実行することをお勧めします。
     $ curl https://desktop-stage.docker.com/linux/main/amd64/77103/docker-desktop.deb --output docker-desktop.deb
     $ sudo apt install ./docker-desktop.deb
    

メンテナースクリプトによって実施される、インストール後の設定手順がいくつかあります(deb パッケージにはインストール後のスクリプトが用意されています)。

インストール後のスクリプトは以下を行います。

  • Docker Desktop の実行ファイルに対して、特権ポートを割り当てリソース制限を設定するためのケーパビリティーを設定します。
  • Kubernetes に対する DNS 名を/etc/hostsに追加します。
  • /usr/bin/dockerから/usr/local/bin/com.docker.cliへのリンクを生成します。
  • 各ユーザー向けに systemd ユニットをインストールします。

Docker Desktop の起動

Docker Desktop for Linux を開始するには、Applications メニューから Docker Desktop を探し出して開きます。 これを行うことで、クジラメニューアイコンが起動して Docker ダッシュボードが開きます。 そこでは Docker Desktop の状態が表示されます。

別の方法として、端末を開いて以下を実行することもできます。

$ systemctl --user start docker-desktop

Docker Desktop が起動すると、Docker CLI がターゲットとして利用する専用のコンテキストが生成され、カレントなコンテキストとして利用できる状態になります。 これは Linux ホスト上にローカルで Docker Engine が起動していて、デフォルトのコンテキストを用いている場合に、それとの衝突を避けるためです。 シャットダウンの際に Docker Desktop は現在のコンテキストをリセットして、元のものに戻します。

Docker Desktop インストーラーは、ホスト上の Docker Compose と Docker CLI バイナリを更新します。 このときには Docker Compose V2 がインストールされます。 そしてこれを docker-compose にリンクするかどうかを Settings パネルから選択できるようになっています。 Docker Desktop のインストールによって、クラウド統合機能を含む新たな Docker CLI バイナリが/usr/local/binにインストールされて、従来の Docker CLI は/usr/local/bin/com.docker.cliとしてシンボリックリンクが生成されます。。

Docker Desktop のインストールを正常終了したら、以下のコマンドを実行して各バイナリのバージョンを確認します。

$ docker compose version
Docker Compose version v2.2.3

$ docker --version
Docker version 20.10.12, build e91ed57

$ docker version
Client: Docker Engine - Community
Cloud integration: 1.0.17
Version:           20.10.12
API version:       1.41
...

ログイン時に Docker Desktop を有効にするには、Docker メニューから Settings > General > Start Docker Desktop when you log in を選びます。

あるいは端末を開いて以下を実行することもできます。

$ systemctl --user enable docker-desktop

Docker Desktop を停止するには、タスクトレイのクジラメニューアイコンをクリックして Docker メニューを開きます。 そして Quit Docker Desktop を選びます。

あるいは端末を開いて以下を実行することもできます。

$ systemctl --user stop docker-desktop

Credentials management

Docker Desktop relies on pass to store credentials in gpg2-encrypted files. Before signing in to Docker Hub from the Docker Dashboard or the Docker menu, you must initialize pass. Docker Desktop displays a warning if you’ve not initialized pass.

You can intialize pass by using a gpg key. To generate a gpg key, run:

$ gpg --generate-key
...
GnuPG needs to construct a user ID to identify your key.

Real name: Molly
Email address: molly@example.com
You selected this USER-ID:
    "Molly <molly@example.com>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
...
pub   rsa3072 2022-03-31 [SC] [expires: 2024-03-30]
      7865BA9185AFA2C26C5B505669FC4F36530097C2
uid                      Molly <molly@example.com>
sub   rsa3072 2022-03-31 [E] [expires: 2024-03-30]

To initialize pass, run:

molly@ubuntu:~$ pass init 7865BA9185AFA2C26C5B505669FC4F36530097C2
mkdir: created directory '/home/molly/.password-store/'
Password store initialized for 7865BA9185AFA2C26C5B505669FC4F36530097C2

Once pass is initialized, we can sign in on the Docker Dashboard and pull our private images. When credentials are used by the Docker CLI or Docker Desktop, a user prompt may pop up for the password you set during the gpg key generation.

$ docker pull molly/privateimage
Using default tag: latest
latest: Pulling from molly/privateimage
3b9cc81c3203: Pull complete
Digest: sha256:3c6b73ce467f04d4897d7a7439782721fd28ec9bf62ea2ad9e81a5fb7fb3ff96
Status: Downloaded newer image for molly/privateimage:latest
docker.io/molly/privateimage:latest

フィードバック

Thanks for trying out the Docker Desktop Linux (beta) release. We’d love to hear from you. You can provide feedback and report any bugs through the Issues tracker within the docker/desktop-linux repository.

バグ報告を行う診断バンドル(diagnostics bundle)を生成して更新するには、以下を行います。

  1. Docker メニューから Troubleshoot > Get support を選びます。
  2. 診断機能が利用可能であれば Upload to get a Diagnostic ID をクリックします。
  3. サポートページ上に表示される Diagnostic ID を書き留めておきます。 何かの問題を調査する際には、この ID を含めてバグ報告を送信します。 その後にバンドルのアップロードと生成を待つと、診断 ID(diagnostics ID)が表示されるので、調査が必要な場合にはこれを送信します。

ログ

あるいは自分で問題を調査したい場合には、以下のコマンドを実行して Docker Desktop のログにアクセスできます。

$ journalctl --user --unit=docker-desktop

また Docker Desktop 内の内部コンポーネントに対する追加ログが、$HOME/.docker/desktop/log/ にもあります。

アンインストール

Docker Desktop for Linux を削除するには、以下を実行します。

$ sudo apt remove docker-desktop

For a complete cleanup, remove configuration and data files at $HOME/.docker/desktop, the symlink at /usr/local/bin/com.docker.cli, and purge the remaining systemd service files.

$ rm -r $HOME/.docker/desktop
$ sudo rm /usr/local/bin/com.docker.cli
$ sudo apt purge docker-desktop

既知の問題

インストールの終盤において、aptがダウンロードパッケージのインストールに関するエラーを表示します。 このエラーメッセージは無視してください。

  N: Download is performed unsandboxed as root, as file '/home/user/Downloads/docker-desktop.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)

それまでのリリース版をインストールしていて、(明示的にその古い版を削除することなく)そこに新しいパッケージを再インストールする場合は~/.config/systemd/user/docker-desktop.service~/.local/share/systemd/user/docker-desktop.serviceを削除する必要があります。

Docker Desktop for Linux はなぜ VM を起動するのか

Docker Desktop for Linux が仮想マシン(Virtual Machine; VM)を実行するのは、以下の理由によります。

  1. Docker Desktop が多くのプラットフォームにわたって安定した機能を提供するためです

    調査の結果、Docker Desktop for Linux (DD4L) を利用したい理由として、もっとも多く寄せられたものは、多くのメジャーオペレーティングシステムにおいて、安定した同一の機能を実現してほしいというものでした。 VM を利用すれば Linux ユーザーが実現する Docker Desktop は、Windows や macOS と限りなく同じものとなります。

    このようにあらゆるメジャー OS にわたって一貫した機能を提供することは、ますます重要になっています。 Docker Desktop では、Docker Extensions などのような魅力ある新機能の追加を目指しており、どのようなユーザーに対してもメリットとなるはずです。 この部分については DockerCon22 において詳細を提供しています。 そちらへの参加をお願いします。

  2. カーネルの新しい機能を活用するためです

    オペレーティングシステムの新機能は利用したくなるものです。 カーネルや OS は VM の中で制御することができるので、あらゆるユーザーに即座に公開することができます。 マシン OS に LTS バージョンの利用が必須であるユーザーであっても、同じです。

  3. セキュリティを拡充するためです

    コンテナーイメージにぜい弱性があると、ホスト環境にセキュリティリスクをもたらします。 既知のぜい弱性を検証していることが保証されていない非公式なイメージというものは、数多く存在します。 悪意のあるユーザーが公開リポジトリにイメージをプッシュして、あらゆる方法を駆使して、そのイメージをプルさせて実行させようとします。 VM を用いるこの方法では、そういった脅威を軽減できます。 VM 環境ではホストにアクセスすることはできないため、マルウェアが root 権限を奪取するには制限があるためです。

    rootless Docker を実行しますか? この方法ではたしかに、root ユーザーへのアクセスを表面的に制限して、「最上位」のものがすべて安全に見えるというメリットがあります。 ただしその際には、非特権ユーザーが自身の名前空間内でCAP_SYS_ADMINを取得するものであり、本来は非特権ユーザーからの利用を想定していないカーネル API へのアクセスを可能としています。 これは ここ に示されるようなぜい弱性を生み出すことになります。

  4. パフォーマンスへの影響を最小限に抑えながら、機能の同等性とセキュリティの拡充を図るためです

    DD4L が利用する VM ではvirtiofsが用いられます。 これは共有ファイルシステムであって、ホスト上にあるディレクトリツリーに対して、仮想マシンがアクセスすることを可能にします。 ベンチマークの内部調査では、VM に対してリソース割り当てが適切であれば、virtiofs はネイティブなファイルシステムと変わらないパフォーマンスを実現しています。

    このことから DD4L では VM に対して割り当てるデフォルトメモリを調整しています。 この設定は Docker Desktop の Settings > Resources タブにある Memory スライダーを使えば、調整することができます。

docker, Desktop for linux, beta, tech preview