とことんDevOps | 日本仮想化技術が提供するDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けするとことんDevOpsでは、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果など、DevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、アジャイル開発、コンテナ開発など

開催予定の勉強会

各種SNSのフォローもよろしくお願いいたします。

Docker DesktopをUbuntuで使ってみる

Docker Desktopは元々Linux以外の環境でDockerを使えるようにするためのソフトウェアです。現在はLinuxにも対応しており、Linuxでデスクトップ環境を用意すれば、Linuxでも同じようにコンテナベースのアプリケーション開発ができるようになりました。

では早速インストールしてみようとドキュメント に書かれているようにUbuntu Desktopにインストールしようとすると、うまくインストールできません。

$ sudo apt install ./docker-desktop-4.15.0-amd64.deb 
[sudo] user のパスワード: 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 docker-desktop : 依存: qemu-system-x86 (>= 5.2.0) しかし、インストールされていません
                  依存: docker-ce-cli しかし、インストールすることができません
                  依存: pass しかし、インストールされていません
                  依存: uidmap
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。

エラーから分かるように、Docker DesktopはネイティブのDocker Engineと異なり、Linux版もVMの中で動作するようです。docker-ce-cliは名前から、Docker Engine(旧称Docker CE)のリポジトリーの有効化が必要そうです。passやuidmap、qemu-system-x86はUbuntu Archivesにパッケージがありそうです。

Install Docker Engine on Ubuntuを見て、リポジトリーを追加してみます。

$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
lsb-release はすでに最新バージョン (11.1.0ubuntu4) です。
lsb-release は手動でインストールしたと設定されました。
ca-certificates はすでに最新バージョン (20211016ubuntu0.22.04.1) です。
ca-certificates は手動でインストールしたと設定されました。
curl はすでに最新バージョン (7.81.0-1ubuntu1.6) です。
gnupg はすでに最新バージョン (2.2.27-3ubuntu2.1) です。
gnupg は手動でインストールしたと設定されました。
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 docker-desktop : 依存: qemu-system-x86 (>= 5.2.0) しかし、インストールされようとしていません
                  依存: docker-ce-cli しかし、インストールすることができません
                  依存: pass しかし、インストールされようとしていません
                  依存: uidmap
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)。

ちょっとこのエラーが出たのは謎(多分インストールが正常に終わっていないから引き続きエラーが出る?)ですが、無視して進めます。

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt-get update

とりあえずここまで設定したら、もう一度実行してみます。

$ sudo apt install ./docker-desktop-4.15.0-amd64.deb
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
これらを直すためには 'apt --fix-broken install' を実行する必要があるかもしれません。
以下のパッケージには満たせない依存関係があります:
 docker-desktop : 依存: qemu-system-x86 (>= 5.2.0) しかし、インストールされていません
                  依存: docker-ce-cli しかし、インストールされていません
                  依存: pass しかし、インストールされていません
                  依存: uidmap
E: 未解決の依存関係です。'apt --fix-broken install' を実行してみてください (または解法を明示してください)

変わらないですね。「sudo apt --fix-broken install」を実行してみます。

…
アップグレード: 0 個、新規インストール: 47 個、削除: 0 個、保留: 26 個。
1 個のパッケージが完全にインストールまたは削除されていません。
80.7 MB のアーカイブを取得する必要があります。
この操作後に追加で 291 MB のディスク容量が消費されます。
続行しますか? [Y/n] 

何か幾つかパッケージが入るようですので、そのまま実行します。 インストールが終わったらもう一度実行してみます。

$ sudo apt install ./docker-desktop-4.15.0-amd64.deb 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了        
状態情報を読み取っています... 完了        
注意、'./docker-desktop-4.15.0-amd64.deb' の代わりに 'docker-desktop' を選択します
docker-desktop はすでに最新バージョン (4.15.0-93002) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 26 個。

どうやら、先ほど実行したコマンドにより依存関係が解決されてインストールできたようです。

なお、Docker DesktopにDockerのアカウントでログインするには、Linuxの場合次の設定が必要だそうです。作ったイメージをDocker Hubで共有するなどの時必要になるのでログインできるようにしておきましょう。

sshで入って実行した時は失敗してしまいましたが、直接Ubuntu Desktopの端末から実行した場合はうまくいきました。

docs.docker.com

$ gpg --generate-key
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
...
本名: 名前を入力
電子メール・アドレス: メールアドレスを入力
次のユーザIDを選択しました:
    "入力した名前 <入力したメールドレス>"
名前(N)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

を実行したあと2回パススレーズを入力するウィンドウが現れますので、同じパスフレーズを入力します。正しく入力されると次のように出力されて成功します。このGPGキーは1年間有効みたいです。

...
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か
す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生
成器に十分なエントロピーを供給する機会を与えることができます。
gpg: 鍵3A27CAFCA4159F55を究極的に信用するよう記録しました
gpg: ディレクトリ'/home/ytooyama/.gnupg/openpgp-revocs.d'が作成されました
gpg: 失効証明書を '/home/ytooyama/.gnupg/openpgp-revocs.d/2D9DD224358ABBF47CD8EED13A27CAFCA4159F55.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。

pub   rsa3072 2022-12-26 [SC] [有効期限: 2024-12-25]
      <generated gpg-id public key>
uid                      Youhei Tooyama <user@mail.example.com>
sub   rsa3072 2022-12-26 [E] [有効期限: 2024-12-25]

次にこのコマンドを実行します。GPG-IDは先ほどコマンドを実行した時に現れたキーを入力します。~/.gnupg/openpgp-revocs.dにそのキーが保管されています。

pass init <generated gpg-id public key>

最後にdocker loginすれば良さそうです。macOSやWindowsはDocker Desktopの右上をクリックするとブラウザーが開いてそこでログイン処理するとDocker Desktopおログイン状態になるのですが、Linux版はコマンドライン操作が必要です。Dockerのアカウントに2FAを設定している場合はパスワードではなくアクセストークンを入力するとログインできます。アクセストークン は作成したものを設定します。

docker login 

ログインすると、Docker Desktopの右上がログインされた状態にかわります。

Dockerアカウントにログインしていない状態だとイメージのPull(ダウンロード)に厳しい制限がありますのでログインしておきましょう。パスワードはアクセストークンを作成して、それを設定します。以上でUbuntuにDocker Desktopをインストールして使い始めることができました。

あとは何らかのエディターやVSCodeなどをインストールすれば、コンテナアプリケーションの開発がLinuxでもできるようになります。

VSCodeはsuapパッケージとdebパッケージが用意されていますが、snapパッケージでインストールすると日本語入力ができないようです。日本語入力をする必要があれば、debパッケージを使ったインストールをすると良いでしょう。

code.visualstudio.com

インストール後はお好みのVSCode拡張を入れて準備完了です。

会社のセキュリティポリシーで使えるOSが決められている場合は難しいものの、最近は開発者が開発に利用するOSを選択できる場合もあるようですし、そんな時はLinuxを使ってみたらいかがでしょうか?