Ubuntu Weekly Recipe

第719回 UbuntuでDocker Desktop for Linuxを使う

この記事を読むのに必要な時間:およそ 6 分

別のDockerデーモンとの共存について

DD4Lは,仮想マシン内の独立した空間でDockerデーモンを起動します。そしてDD4Lは,ホストマシン上に直接インストールされた,別のDockerデーモンと共存させることができます。

Dockerには「コンテキスト」と呼ばれる仕組みが存在します。コンテキストにはDockerデーモンのエンドポイントをはじめとする情報が含まれており,このコンテキストを切り替えることで,ひとつのdockerコマンドから,複数のバックエンドを選択して操作することができるのです。

通常Dockerをインストールすると,エンドポイントがローカルのunix:///var/run/docker.sockというソケットを向いた,defaultという名前のコンテキストが作成されます。対してDD4Lは,インストール時にdesktop-linuxという名前で,エンドポイントがホームディレクトリ内の~/.docker/desktop/docker.sockを向いた専用のコンテキストを作成します。そしてDD4Lは,起動時にdockerコマンドがdesktop-linuxコンテキストを利用するよう切り替え,終了時にはdefaultコンテキストに切り戻すという動作を行います。そのためホスト上で別のDockerデーモンが動作していても,DD4Lの起動中のみ,dockerコマンドはDD4LのDockerデーモンと対話するようになるのです。

とはいえ複数のDockerデーモン自体は共存できると言っても,当然コンテナはそれぞれで別管理となるため,どんなコンテナが起動しているかの見通しが悪くなるといったデメリットもあります。起動したコンテナがホストのポートを奪い合うといったトラブルも起きがちですので,筆者としてはあまりお勧めしません。日常的にDD4Lを使うのであれば,ホスト上のDockerデーモンは停止するか,アンインストールしてしまうほうが安心でしょう。

DD4L起動中にdocker context listコマンドを実行した例。desktop-linuxコンテキストに切り替わっていることがわかる。

$ docker context list
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                   KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                             swarm
desktop-linux *     moby                                                          unix:///home/mizuno/.docker/desktop/docker.sock

なおパッケージの依存関係の都合上,本記事の手順でインストールしたDD4Lと,Ubuntuが提供しているdocker.ioパッケージを共存させることはできません。共存させたい場合はDocker公式が提供しているdocker-ceパッケージを利用してください。

Docker Extensionsを利用する

Docker Desktopを使うメリットのひとつが,Docker Extensionsです。現時点ではまだベータ版の機能ではあるもの,サードパーティ製のツールを追加することで,Docker Desktopの機能を拡張できます。

左ペインの「Add Extensions」をクリックしてください。MarketplaceにあるExtensionsの一覧が表示されますので,インストールしたいExtensionsの「Install」ボタンをクリックしてください。

図19 ExtensionsのMarketplaceの画面。ここからインストールしたいExtensionsを探してInstallボタンをクリックする。ただしまだExtensionsの数は少ない

図19

筆者が便利だなと思ったExtensionsが,⁠Logs Explorer」です。通常コンテナのログを確認しようと思うと,docker psでコンテナIDを調べ,docker logsコマンドを実行する必要があります。ログをtailしたければ,-fオプションをつけて,ターミナルを開きっぱなしにしなければなりません。負荷分散のために複数のNGINXコンテナを起動しているような場合は,すべてのコンテナのアクセスログを束ねて監視したいですよね。そうなるともう面倒くさすぎます注2⁠。

注2
なおKubernetes環境であれば,正規表現で指定した複数Podのログをまとめてtailできる,sternというツールがあります。便利です。

Log Explorerは,起動中のコンテナのログを横断的に検索できるExtensionsです。複数コンテナのログを時系列に並べて一括表示できるだけでなく,コンテナ単位での絞り込み,キーワード検索,標準出力/標準エラー出力でのフィルタが可能です。

図20 Logs Explorerの画面。docker logsコマンドを使ったことがある人であれば,これだけで便利さが理解できると思う

図20

「Disk Usage」Extensionsは,Dockerが利用しているディスク容量を可視化してくれます。⁠Reclaim space」ボタンをクリックすると,停止しているコンテナや不要なイメージ,ボリューム,ビルドキャッシュなどを選択して削除できます。

図21 Disk Usageの画面。ディスク容量が逼迫したような場合は,不要なデータが多く溜まっていないかチェックしてみるとよいだろう

図21

「Anchore」Extensionsは,コンテナイメージの脆弱性をチェックできます。コンテナのセキュリティを高めるためにも,自分でビルドしたイメージはもちろん,DockerHubから入手したイメージのチェックに役立ててみてください。

図22 ローカルに保存されているコンテナイメージの一覧が,インストールされているパッケージと,脆弱性の数とともに表示される

図22

図23 特定のイメージ名をクリックすると,パッケージ名,パッケージバージョンとともに,影響するCVEと緊急度も確認できる

図23

著者プロフィール

水野源(みずのはじめ)

Ubuntu Japanese Teamメンバー。理想のフリーデスクトップ環境を求めて東へ西へ……のはずが,気がついたら北の大地で就職していたインフラ寄りのエンジニア。最近レンズ沼にハマる。日本仮想化技術株式会社所属。