2021/05/05

WindowsでDockerコンテナの画面を表示する方法

私にとってDockerを活用する最大の目的は、自分のPC環境を汚さないことです。仕事やプライベートでPCを利用するにあたり、いろいろなソフトウェアをインストールしたり、環境を構築しなければならず、その度にPCが重くなったり、ソフトウェアの残骸が残ったりします。Dockerを活用することで、簡単にソフトウェアのインストールや環境構築ができ、またアンインストール後もゴミを残さないようにしたいのです。

例えば、FirefoxをWindowsにインストールせずに、Docker上でFirefoxを起動させ、その画面をWindowsホスト上から参照・操作するということです。Firefoxが不要になれば、Dockerコンテナを削除するだけで残骸が残らないということです。

本記事では、Windowsホスト上のDockerコンテナとして起動するソフトウェアの画面を、Windowsホスト上から表示・操作する方法について説明します。


Docker上で起動するソフトウェアとは

DockerはLinuxベースで起動するソフトウェアです。コンテナ化するソフトウェアやツールは基本的にそのLinuxライブラリを使って動作します。簡単にいうと、考えるべきことはLinux上で動作するソフトウェアの画面をどのようにWindows上で画面表示(画面共有)するかということです。


Linux OSの画面を共有する場合、一般的にX Windows System(以後Xシステムという)というしくみを利用します。このXシステムは、Xプロトコルという通信仕様を利用してGUI環境を実現します。ソフトウェアがインストールされたDockerコンテナがクライアント、WindowsホストがXサーバとして動作します。つまり、Windows 10にはデフォルトでXサーバはインストールされていないため、Windows上にXサーバをインストールすればDockerコンテナ上の画面を表示・操作することができるようになります

(参考)Windowsのリモートデスクトップでは、画面共有側がサーバになりますが、Xシステムの場合は画面操作する側がサーバとなります。


VcXsrv Windows X Serverのインストール

いくつかXサーバソフトウェアがありますが、現在では無償利用できるXサーバとして、VcXsrv Windows X Serverが主流のようです。私も利用しています。


VcXsrvの入手

VcXsrv Windows X Serverのダウンロードページ(SourceForge)からインストーラをダウンロードします。記事作成時点のバージョンは1.20.9.0です。

ダウンロードページを開き、Downloadボタンをクリックします。


VcXsrvのインストール

  1. ダウンロードしたインストーラを管理者権限で実行します。
  2. インストールオプションでは、インストールタイプに「Full」が選択されていることを確認して、「Next」ボタンをクリックします。


  3. インストールフォルダでは、そのままの状態で「Install」ボタンをクリックします。




  4. インストールの完了後、「Close」ボタンをクリックします。


VcXsrvの設定と起動

設定ウィザード

  1. デスクトップ上に作成された「XLaunch」のショートカットを実行します。


  2. ディスプレイ設定では、画面の表示方法を指定します。デフォルトのまま(Multiple windowsが選択)で「Next」ボタンをクリックします。


  3. クライアントの開始では、デフォルトのまま(Start no client)で「Next」ボタンをクリックします。


  4. 追加の設定では、「Disable access control」にチェックを付けます。チェックを付けない場合、アクセス制御が有効となってしまい、DockerコンテナからのXプロトコルを許可できないためです。チェックを付けることでアクセス制御を無効化し、コンテナ上のGUIをWindows上で表示できるようになります。
    ※アクセス制御を有効化したい場合は、別途「C:\Program Files\VcXsrv\X0.hosts」ファイルにコンテナのIPアドレスをホワイトリスト登録する必要があります。


  5. これで設定が完了しました。上記で設定した内容を外部ファイルに保存することができます。必要に応じて「Save configuration」ボタンをクリックして保存します。「Finish」ボタンをクリックして設定を終了します。


  6. 「Windowsセキュリティの重要な警告」ポップアップ画面が表示された場合は、アクセスを許可します。


設定完了と同時に、Xサーバが起動しました。タスクトレイにVcXsrvのアイコンが表示されていることを確認します。


追加設定:設定ウィザードの省略

デフォルトではVcXsrvを起動する度に、毎回設定ウィザードで設定を行う必要があります。以下の手順で、設定ウィザードを省略し、外部ファイルに保存した設定でVcXsrvを起動することができます。

  1. 外部ファイルに保存した設定ファイル(config.xlaunch)を任意のフォルダに配置します。この例ではインストール時に作成されたXLaunchのプログラムフォルダ(C:\Program Files\VcXsrv)直下に配置しました。
  2. XLaunchショートカットを右クリックして、プロパティを開きます。
  3. ショートカットタブのリンク先(Target)は、デフォルトで"C:\Program Files\VcXsrv\xlaunch.exe"となっていると思いますが、この引数に「 -run "C:\Program Files\VcXsrv\config.xlaunch"」(実行ファイルパスの後の半角スペースを忘れないように)を追加し、「OK」ボタンをクリックします。


以上で、Xサーバの設定および起動は完了です。


Firefox Dockerコンテナの準備

FirefoxのDockerコンテナを準備します。

特定ディレクトリ(例:C:\Work\docker\Firefox)配下に以下のDockerファイルを作成します。ファイル名は「Dockerfile」とし、以下をテキストエディタで入力して保存します。Ubuntu 20.04にfirefoxをインストールし、firefoxを実行する命令が書かれています。

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y firefox
CMD /usr/bin/firefox


コマンドプロンプトを起動し、カレントディレクトリをfirefoxのDockerfileがあるディレクトリまで移動します。

cd C:\Work\docker\Firefox


以下のコマンドでfirefoxコンテナを起動してみましょう。

docker run -d --rm firefox
ec2c3c4f9c8ca3ebd2356b9e4fc27211a430469e42cb2e53ca82c94c716c0a6c


実行できたら準備は完了です。


動作確認:Firefox DockerコンテナのGUI画面を表示・操作

FirefoxのDockerコンテナを用いて、コンテナとWindowsホスト間の画面共有動作確認を行います。

  1. コマンドプロンプトを起動します。
  2. ipconfigコマンドを実行し、WindowsホストのIPアドレスを確認します。
  3. DISPLAY環境変数に、手順2で確認したIPアドレス、ディスプレイ番号(0~)、スクリーン番号(0~)を指定します。取り急ぎ、ディスプレイ番号とスクリーン番号は0でOKだと思います。
    フォーマット:IPアドレス:ディスプレイ番号.スクリーン番号
    set DISPLAY=192.168.24.110:0.0

  4. DISPLAY環境変数を追加して、FirefoxのDockerコンテナを起動するコマンドを実行します。
    docker run -ti --rm -e DISPLAY=%DISPLAY% firefox

  5. Windows上でFirefoxを起動するのと同じように、別ウィンドウでFirefoxが起動します。マウスやキーボード操作もできることをご確認ください。このウィンドウを閉じると、自動的にDockerコンテナも停止します。


おわりに

VcXsrvを用いてDockerコンテナ画面をWindows上で表示・操作する方法を説明しました。

今やDockerを活用する時代とはいえ、Web GUIインタフェースのないシステムやソフトウェアは多数あります。とくに、VSCodeなどの開発ツールやMySQL WorkbenchのようなDBMS管理コンソールソフトウェアなど、ソフトウェア開発の現場で利用されるものです。複数のプロジェクトに従事することはよくあることで、ソフトウェア間での競合が懸念されたり、意図しない環境依存を作ってしまう場合もあります。さらに、開発者はまだまだWindows上で開発を行っています。

本記事の方法で、DockerコンテナとXサーバをうまく活用することで、いくらかましになるかもしれませんね。