10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker内でPython-GUIアプリを作成する(PySimpleGUI)

Last updated at Posted at 2020-05-05

この記事で学べること

  • Dockerを利用したPySimpleGUIの開発環境の構築【PySimpleGUI】
  • Dockerを利用したGUIの開発環境の構築【Docker & X11 & VcXsrv】

前提条件

  • Docker 及び Docker-compose が導入済みであること
  • Python 及び Docker の基本的な利用ができること
  • X11の概要をしっているとなお良い

自分はDockerToolboxを利用していますが、Docker Desktopでもできるはず(未検証)

ホスト側の設定とコンテナの準備

ホスト側の設定(VcXsrvの導入)

ホスト側でコンテナのWindowを表示するために、VcXsrvを導入する。
VcXsrv:ダウンロードリンク

ここでセキュリティのエラーを回避するためにコンテナが起動しているVM等のIPアドレスを取得する。
取得したIPアドレスをVcXsrvがインストールされているフォルダの「x0.hosts」へ追記する。

通常インストール先:C:\Program Files\VcXsrv

インストールしたらXLanuchをデフォルトの設定で起動する。
タスクバーで起動していればOK!

コンテナの準備

DockerfileとDocker-compose.ymlを作成する。

Docekrfile
# 最低限必要な部分だけ抜粋
FROM python:3.8.2

RUN pip install pysimplegui

pip installでPySimpleGUIをインストールしているだけ。
ユーザーやフォルダ、他の依存関係等々の設定は自分で足すこと。

Docker-compose.yml
version: "3.2"
services:
  python-gui:
    build: .
    restart: always
    tty: true
    volumes:
      - ホスト側フォルダ:コンテナ側フォルダ
    environment:
      - DISPLAY=ホストIPアドレス:0.0

X11の設定を環境変数でしている。
ここでのホストIPアドレスは、DockerNatのIPアドレスやVirtualBoxネットワークのIPアドレスになる。
(当たり前だけどコンテナと繋がっているネットワークじゃないとダメ)

Qiita参考記事:Docker for WindowsでGUI(sshでX11転送しない方法)

ここまでできたらコンテナを起動して、準備完了

docker-compose up -d --build

PySImpleGUIの利用

作成したコードを実行すれば、ホスト側にWindowが作成されるはず。

以下のようなエラーが出た場合はX11の設定がうまく行ってないので、再度設定を見直す。

ErrorMessage
省略 : couldn't connect to display "ホストIPアドレス:0.0"

環境構築メインの記事なので、コードの作成方法は下記記事を参照してください。

公式のドキュメントがしっかりしていて良い。

日本語で参考になった記事も上げておく

追記

コンテナで作成したアプリケーションをWindows向けにEXE化する方法も記事にしました。
PythonのWindows用EXE化をDockerコンテナで実現する方法

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?