DockerでGUIベースのアプリケーションを実行する方法

Dockerは一般的にサーバーサイドおよびコマンドラインアプリケーションに使用されます。しかし、適切な設定を行うことで、コンテナ内でGUIベースのアプリケーションを実行することもできます。これらのコンテナにはGUIライブラリや表示ツールが含まれており、アプリが安全で隔離された環境で実行できるようになります。このアプローチは、異なるマシンやOS環境でGUIアプリを開発、テスト、デプロイする際に簡素化します。このガイドでは、最小限の設定でDockerコンテナ内でGUIアプリを実行する方法を説明します。
DockerとDocker GUIコンテナの理解
Dockerを使用すると、アプリケーションをコード、ライブラリ、設定など、必要なすべてのものと一緒にパッケージ化し、コンテナと呼ばれる自己完結型ユニットにまとめることができます。これらのコンテナはホストシステムのカーネルを共有しているため、フル仮想マシンと比較して軽量で、起動が速く、効率的です。
GUIコンテナは、Firefox、Gedit、またはその他のデスクトップツールなどのグラフィカルアプリケーションを含むDockerセットアップであり、それらのウィンドウが実際の画面に表示されることを可能にします。標準のコンテナとは異なり、これらはホストの表示システムと接続するために追加の設定が必要で、GUI要素との適切なレンダリングと相互作用を可能にします。
DockerでGUIアプリを実行する理由
DockerでGUIアプリを実行することが有益な主な理由は次のとおりです:
- DockerでGUIアプリを実行すると、ライブラリや設定など、必要なすべてのものがコンテナ内にパッケージ化されます。これにより、メインシステムが混雑や競合から解放されます。
- Dockerを使用すると、アプリはどのマシンでも同じように動作します。開発、テスト、他の人と共有する場合でも、環境は一貫しています。
- コンテナを使用すると、新しいアプリをテストしたり、何かをデバッグしたりするのが簡単です。ホストマシンに影響を与えることなく、実行、停止、または削除できます。
- Dockerを使用すると、非LinuxシステムでLinux GUIアプリケーションを実行できます。これは、XQuartzやVcXsrvなどの表示共有ツールを使用することで実現され、仮想マシンは必要ありません。
- 従来のVMとは異なり、Dockerコンテナはシステムリソースを少なく使用します。これにより、起動が速く、GUIベースのアプリでもスムーズに動作します。
DockerでGUIアプリケーションを実行する
DockerでGUIアプリケーションを実行するには、まずLinuxシステムにDockerがインストールされていることを確認する必要があります。次のコマンドを実行して確認できます:
docker--versionこのコマンドがバージョン番号を返す場合、Dockerはインストールされており、動作しています。そうでない場合は、「command not found」エラーが表示される可能性があります。
Dockerが正しく設定されたら、次のステップに進むことができます。
Dockerサービスをアクティブにする
次に、次のコマンドを使用してDockerサービスを開始します:
sudo systemctl start dockerDockerサービスが正常に実行されているかどうかを確認するには、次のコマンドを実行します:
sudo systemctl status docker出力は、Dockerサービスがアクティブであり、問題なく実行されていることを確認します:

プロジェクトフォルダーとDockerfileの設定
「dockerGUI」という名前のディレクトリを作成し、GUIアプリを実行するためのすべてのDocker関連ファイルを保存します:
mkdir dockerGUI次に、このディレクトリに移動して、作成または変更するすべてのファイルがdockerGUIフォルダーに保持されることを確認します:
cd dockerGUIDockerイメージの構成を定義するために、dockerGUIFileという名前の新しいファイルを作成します:
nano dockerGUIFile次に、dockerGUIFileに次の行のコードを貼り付けます:
FROM jess/firefox
ENV DISPLAY=:0
CMD ["firefox"]上記のコードは、DockerにFirefoxの事前構築されたイメージを使用するよう指示し、GUIがホストシステムに表示されるように表示環境を設定します。さらに、コンテナが実行されるときにFirefoxが自動的に起動することを保証します。
注: 別のアプリを試すには、Dockerfile内のイメージとコマンドを変更するだけです。たとえば、Geditを実行するには、公式のUbuntuイメージを使用し、ビルド中にアプリをインストールします:
FROM ubuntu
RUN apt-get update&&apt-get install-y gedit
ENV DISPLAY=:0
CMD ["gedit"]Dockerイメージのビルド
dockerGUIFileにDocker構成が設定されたので、次のコマンドを使用してDockerイメージをビルドします:
sudodocker build -t myfirefox:1-f dockerGUIFile .このコマンドは、dockerGUIFileからDockerイメージをビルドし、myfirefoxという名前を付け、タグ1を付け、現在のディレクトリをコンテキストとして使用します:

GUIサポートを有効にしたDockerコンテナの起動
次に、次のコマンドを実行してDockerコンテナのGUIサポートを有効にします:
xhost +local:docker出力は、私のシステムで実行されているローカルクライアント(Dockerコンテナなど)が私のXサーバーに接続できることを確認します:
次に、次のコマンドを使用してコンテナを実行し、ホストシステムでGUIサポートを持つFirefoxを起動します:
docker run -it--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unix myfirefox:1その結果、このコマンドはコンテナをあなたの表示に接続し、Firefoxがネイティブアプリのようにあなたの画面に開くことを可能にします:

注: --rmオプションを使用すると、アプリが閉じた後にDockerが自動的にコンテナを削除し、システムをクリーンに保ち、docker ps -sに表示されないようにします。
DockerをXサーバーから切断する
GUIアプリケーションの使用が終了したら、セキュリティ上の理由からXサーバーへのアクセスを閉じることをお勧めします:
xhost -local:docker最後の考え
DockerでGUIベースのアプリケーションを実行することは、コンテナがコマンドラインを超えてできることを拡張する素晴らしい方法です。適切な設定を行うことで、コンテナからデスクトップアプリを起動することができ、システムにインストールされているかのように動作します。これは、クリーンな環境でのテスト、開発、またはLinuxツールの探索に対するシンプルでありながら強力なアプローチです。自分自身のGUI対応コンテナを構築し、LinuxデスクトップでDockerが提供するものを最大限に活用しましょう。